Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Start skeleton of BehaviorRegistry and its test case.
BehaviorRegistry will be the replacement for BehaviorCollection in 3.0, and follow the same pattern as HelperRegistry and ComponentRegistry.
- Loading branch information
Showing
2 changed files
with
219 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
<?php | ||
/** | ||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | ||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* | ||
* Licensed under The MIT License | ||
* For full copyright and license information, please see the LICENSE.txt | ||
* Redistributions of files must retain the above copyright notice. | ||
* | ||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* @link http://cakephp.org CakePHP(tm) Project | ||
* @since CakePHP(tm) v 3.0.0 | ||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php) | ||
*/ | ||
namespace Cake\ORM; | ||
|
||
use Cake\Core\App; | ||
use Cake\Error; | ||
use Cake\ORM\Table; | ||
use Cake\Utility\ObjectRegistry; | ||
|
||
/** | ||
* BehaviorRegistry is used as a registry for loaded behaviors and handles loading | ||
* and constructing behavior objects. | ||
* | ||
* This class also provides method for checking and dispatching behavior methods. | ||
*/ | ||
class BehaviorRegistry extends ObjectRegistry { | ||
|
||
/** | ||
* The table using this registry. | ||
* | ||
* @var Cake\ORM\Table | ||
*/ | ||
protected $_table; | ||
|
||
/** | ||
* EventManager instance. | ||
* | ||
* Behaviors constructed by this object will be subscribed to this manager. | ||
* | ||
* @var Cake\Event\EventManager | ||
*/ | ||
protected $_eventManager; | ||
|
||
/** | ||
* Constructor | ||
* | ||
* @param Cake\ORM\Table $table | ||
*/ | ||
public function __construct(Table $table) { | ||
$this->_table = $table; | ||
$this->_eventManager = $table->getEventManager(); | ||
} | ||
|
||
/** | ||
* Resolve a behavior classname. | ||
* | ||
* Part of the template method for Cake\Utility\ObjectRegistry::load() | ||
* | ||
* @param string $class Partial classname to resolve. | ||
* @return string|false Either the correct classname or false. | ||
*/ | ||
protected function _resolveClassName($class) { | ||
return App::classname($class, 'Model/Behavior', 'Behavior'); | ||
} | ||
|
||
/** | ||
* Throws an exception when a behavior is missing. | ||
* | ||
* Part of the template method for Cake\Utility\ObjectRegistry::load() | ||
* | ||
* @param string $class The classname that is missing. | ||
* @param string $plugin The plugin the behavior is missing in. | ||
* @throws Cake\Error\MissingBehaviorException | ||
*/ | ||
protected function _throwMissingClassError($class, $plugin) { | ||
throw new Error\MissingBehaviorException([ | ||
'class' => $class, | ||
'plugin' => $plugin | ||
]); | ||
} | ||
|
||
/** | ||
* Create the behavior instance. | ||
* | ||
* Part of the template method for Cake\Utility\ObjectRegistry::load() | ||
* Enabled behaviors will be registered with the event manager. | ||
* | ||
* @param string $class The classname that is missing. | ||
* @param array $settings An array of settings to use for the behavior. | ||
* @return Component The constructed behavior class. | ||
*/ | ||
protected function _create($class, $settings) { | ||
$instance = new $class($this->_table, $settings); | ||
$enable = isset($settings['enabled']) ? $settings['enabled'] : true; | ||
if ($enable) { | ||
$this->_eventManager->attach($instance); | ||
} | ||
return $instance; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
<?php | ||
/** | ||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | ||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* | ||
* Licensed under The MIT License | ||
* For full copyright and license information, please see the LICENSE.txt | ||
* Redistributions of files must retain the above copyright notice. | ||
* | ||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* @link http://cakephp.org CakePHP(tm) Project | ||
* @since CakePHP(tm) v 3.0.0 | ||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php) | ||
*/ | ||
namespace Cake\Test\TestCase\ORM; | ||
|
||
use Cake\Core\Plugin; | ||
use Cake\ORM\Table; | ||
use Cake\ORM\BehaviorRegistry; | ||
use Cake\TestSuite\TestCase; | ||
|
||
/** | ||
* Test case for BehaviorRegistry. | ||
*/ | ||
class BehaviorRegistryTest extends TestCase { | ||
|
||
/** | ||
* setup method. | ||
* | ||
* @return void | ||
*/ | ||
public function setUp() { | ||
parent::setUp(); | ||
$this->Table = new Table(['table' => 'articles']); | ||
$this->EventManager = $this->Table->getEventManager(); | ||
$this->Behaviors = new BehaviorRegistry($this->Table); | ||
} | ||
|
||
/** | ||
* tearDown | ||
* | ||
* @return void | ||
*/ | ||
public function tearDown() { | ||
Plugin::unload(); | ||
unset($this->Table, $this->EventManager, $this->Behaviors); | ||
parent::tearDown(); | ||
} | ||
|
||
/** | ||
* Test loading app & core behaviors. | ||
* | ||
* @return void | ||
*/ | ||
public function testLoad() { | ||
$this->markTestIncomplete('not done'); | ||
} | ||
|
||
/** | ||
* Test load() binding listeners. | ||
* | ||
* @return void | ||
*/ | ||
public function testLoadBindEvents() { | ||
$this->markTestIncomplete('not done'); | ||
} | ||
|
||
/** | ||
* Test load() with enabled = false | ||
* | ||
* @return void | ||
*/ | ||
public function testLoadEnabledFalse() { | ||
$this->markTestIncomplete('not done'); | ||
} | ||
|
||
/** | ||
* Test loading plugin behaviors | ||
* | ||
* @return void | ||
*/ | ||
public function testLoadPlugin() { | ||
$this->markTestIncomplete('not done'); | ||
} | ||
|
||
/** | ||
* Test load() on undefined class | ||
* | ||
* @expectedException Cake\Error\MissingBehaviorException | ||
* @return void | ||
*/ | ||
public function testLoadMissingClass() { | ||
$this->markTestIncomplete('not done'); | ||
} | ||
|
||
/** | ||
* Test load() duplicate method error | ||
* | ||
* @expectedException Cake\Error\Exception | ||
* @expectedExceptionMessage TestApp\Model\Behavior\DuplicateBehavior contains duplicate method "dupe" | ||
* @return void | ||
*/ | ||
public function testLoadDuplicateMethodError() { | ||
$this->markTestIncomplete('not done'); | ||
} | ||
|
||
/** | ||
* test hasMethod() | ||
* | ||
* @return void | ||
*/ | ||
public function testHasMethod() { | ||
$this->markTestIncomplete('not done'); | ||
} | ||
|
||
} |