浏览代码

Improve bitmasks

dereuromark 8 年之前
父节点
当前提交
7aa1031584
共有 2 个文件被更改,包括 26 次插入5 次删除
  1. 4 4
      src/Model/Behavior/BitmaskedBehavior.php
  2. 22 1
      tests/TestCase/Model/Behavior/BitmaskedBehaviorTest.php

+ 4 - 4
src/Model/Behavior/BitmaskedBehavior.php

@@ -53,7 +53,7 @@ class BitmaskedBehavior extends Behavior {
 		$config = $this->_config;
 
 		if (empty($config['bits'])) {
-			$config['bits'] = Inflector::pluralize($config['field']);
+			$config['bits'] = Inflector::variable(Inflector::pluralize($config['field']));
 		}
 
 		$entity = $this->_table->newEntity();
@@ -61,14 +61,14 @@ class BitmaskedBehavior extends Behavior {
 		if (is_callable($config['bits'])) {
 			$config['bits'] = call_user_func($config['bits']);
 		} elseif (is_string($config['bits']) && method_exists($entity, $config['bits'])) {
-			$config['bits'] = $entity->{$config['bits']}();
+			$config['bits'] = $entity::{$config['bits']}();
 		} elseif (is_string($config['bits']) && method_exists($this->_table, $config['bits'])) {
-			$config['bits'] = $this->_table->{$config['bits']}();
+			$config['bits'] = $this->_table::{$config['bits']}();
 		} elseif (!is_array($config['bits'])) {
 			$config['bits'] = false;
 		}
 		if (empty($config['bits'])) {
-			throw new RuntimeException('Bits not found');
+			throw new RuntimeException('Bits not found for field ' . $config['field'] . ', expected pluralized static method ' . Inflector::variable(Inflector::pluralize($config['field'])) . '() on the entity.');
 		}
 		ksort($config['bits'], SORT_NUMERIC);
 

+ 22 - 1
tests/TestCase/Model/Behavior/BitmaskedBehaviorTest.php

@@ -29,7 +29,28 @@ class BitmaskedBehaviorTest extends TestCase {
 		$this->Comments = TableRegistry::get('BitmaskedComments');
 		$this->Comments->addBehavior('Tools.Bitmasked', ['mappedField' => 'statuses']);
 	}
-
+	
+	/**
+	 * @return void
+	 */
+	public function testConfig() {
+		$this->Comments->removeBehavior('Bitmasked');
+		$this->Comments->addBehavior('Tools.Bitmasked', []);
+		$bits = $this->Comments->behaviors()->Bitmasked->getConfig('bits');
+		$expected = BitmaskedComment::statuses();
+		$this->assertSame($expected, $bits);
+	}
+	
+	/**
+	 * @return void
+	 * @expectedException \RuntimeException
+	 * @expectedExceptionMessage Bits not found for field my_field, expected pluralized static method myFields() on the entity.
+	 */
+	public function testFieldMethodMissing() {
+		$this->Comments->removeBehavior('Bitmasked');
+		$this->Comments->addBehavior('Tools.Bitmasked', ['field' => 'my_field']);
+	}
+	
 	/**
 	 * @return void
 	 */