"Initial refactoring of BehaviorCollection.

Fixed vendor path being the first searched directory for files, this caused unexpected results.
Fixed failing DboSource tests"

git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@6583 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
phpnut 2008-03-16 05:44:20 +00:00
parent d8a7097490
commit a6fbe05964
5 changed files with 25 additions and 18 deletions

View file

@ -459,6 +459,7 @@ class Configure extends Object {
$paths = Cache::read('core_paths', '_cake_core_'); $paths = Cache::read('core_paths', '_cake_core_');
if (!$paths) { if (!$paths) {
$used = array(); $used = array();
$vendor = false;
$openBasedir = ini_get('open_basedir'); $openBasedir = ini_get('open_basedir');
if ($openBasedir) { if ($openBasedir) {
@ -501,10 +502,14 @@ class Configure extends Object {
$paths['class'][] = $path . DS . 'cake' . DS; $paths['class'][] = $path . DS . 'cake' . DS;
} }
if (is_dir($path . DS . 'vendors')) { if (is_dir($path . DS . 'vendors')) {
$paths['vendor'][] = $path . DS . 'vendors' . DS; $vendor['vendor'][] = $path . DS . 'vendors' . DS;
} }
$used[] = $path; $used[] = $path;
} }
if ($vendor) {
$paths = array_merge($paths, $vendor);
}
Cache::write('core_paths', array_filter($paths), '_cake_core_'); Cache::write('core_paths', array_filter($paths), '_cake_core_');
} }
if ($type && isset($paths[$type])) { if ($type && isset($paths[$type])) {

View file

@ -147,7 +147,7 @@ class ModelBehavior extends Object {
function onError(&$model, $error) { } function onError(&$model, $error) { }
/** /**
* Overrides Object::dispatchMethod to account for PHP4's broken reference support * Overrides Object::dispatchMethod to account for PHP4's broken reference support
* *
* @see Object::dispatchMethod * @see Object::dispatchMethod
* @access public * @access public
*/ */
@ -209,11 +209,11 @@ class ModelBehavior extends Object {
class BehaviorCollection extends Object { class BehaviorCollection extends Object {
/** /**
* Stores a reference to the attached model * Stores a reference to the attached name
* *
* @var object * @var object
*/ */
var $model = null; var $modelName = null;
/** /**
* Lists the currently-attached behavior objects * Lists the currently-attached behavior objects
* *
@ -245,8 +245,8 @@ class BehaviorCollection extends Object {
* *
* @access public * @access public
*/ */
function init(&$model, $behaviors = array()) { function init($modelName, $behaviors = array()) {
$this->model =& $model; $this->modelName = $modelName;
if (!empty($behaviors)) { if (!empty($behaviors)) {
foreach (Set::normalize($behaviors) as $behavior => $config) { foreach (Set::normalize($behaviors) as $behavior => $config) {
@ -289,10 +289,10 @@ class BehaviorCollection extends Object {
} }
ClassRegistry::addObject($class, $this->{$name}); ClassRegistry::addObject($class, $this->{$name});
} }
} elseif (isset($this->{$name}->settings) && isset($this->{$name}->settings[$this->model->alias])) { } elseif (isset($this->{$name}->settings) && isset($this->{$name}->settings[$this->modelName])) {
$config = array_merge($this->{$name}->settings[$this->model->alias], $config); $config = array_merge($this->{$name}->settings[$this->modelName], $config);
} }
$this->{$name}->setup($this->model, $config); $this->{$name}->setup(ClassRegistry::getObject($this->modelName), $config);
foreach ($this->{$name}->mapMethods as $method => $alias) { foreach ($this->{$name}->mapMethods as $method => $alias) {
$this->__mappedMethods[$method] = array($alias, $name); $this->__mappedMethods[$method] = array($alias, $name);
@ -326,7 +326,7 @@ class BehaviorCollection extends Object {
*/ */
function detach($name) { function detach($name) {
if (isset($this->{$name})) { if (isset($this->{$name})) {
$this->{$name}->cleanup($this->model); $this->{$name}->cleanup(ClassRegistry::getObject($this->modelName));
unset($this->{$name}); unset($this->{$name});
} }
foreach ($this->__methods as $m => $callback) { foreach ($this->__methods as $m => $callback) {

View file

@ -389,7 +389,7 @@ class Model extends Overloadable {
} }
} }
$this->Behaviors = new BehaviorCollection(); $this->Behaviors = new BehaviorCollection();
$this->Behaviors->init($this, $this->actsAs); $this->Behaviors->init($this->alias, $this->actsAs);
} }
/** /**
* Handles custom method calls, like findBy<field> for DB models, * Handles custom method calls, like findBy<field> for DB models,

View file

@ -26,7 +26,7 @@
* @lastmodified $Date$ * @lastmodified $Date$
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
*/ */
uses('class_registry'); App::import('Core', 'ClassRegistry');
class ClassRegisterModel extends CakeTestModel { class ClassRegisterModel extends CakeTestModel {
var $useTable = false; var $useTable = false;
} }

View file

@ -600,13 +600,13 @@ class DboSourceTest extends CakeTestCase {
config('database'); config('database');
$config = new DATABASE_CONFIG(); $config = new DATABASE_CONFIG();
if (isset($config->test)) { if (isset($config->test)) {
$config = $config->test; $this->__config = $config->test;
} else { } else {
$config = $config->default; $this->__config = $config->default;
} }
$this->debug = Configure::read('debug'); $this->debug = Configure::read('debug');
Configure::write('debug', 1); Configure::write('debug', 1);
$this->db =& new DboTest($config); $this->db =& new DboTest($this->__config);
$this->Model = new TestModel(); $this->Model = new TestModel();
$db =& ConnectionManager::getDataSource($this->Model->useDbConfig); $db =& ConnectionManager::getDataSource($this->Model->useDbConfig);
} }
@ -631,7 +631,8 @@ class DboSourceTest extends CakeTestCase {
} }
function testFieldDoubleEscaping() { function testFieldDoubleEscaping() {
$test =& ConnectionManager::create('quoteTest', array('driver' => 'test')); $config = array_merge($this->__config, array('driver' => 'test'));
$test =& ConnectionManager::create('quoteTest', $config);
$this->Model = new Article2(array('name' => 'Article', 'ds' => 'quoteTest')); $this->Model = new Article2(array('name' => 'Article', 'ds' => 'quoteTest'));
$this->Model->setDataSource('quoteTest'); $this->Model->setDataSource('quoteTest');
@ -748,7 +749,7 @@ class DboSourceTest extends CakeTestCase {
function testGenerateInnerJoinAssociationQuery() { function testGenerateInnerJoinAssociationQuery() {
$this->Model =& new TestModel9(); $this->Model =& new TestModel9();
$test =& ConnectionManager::create('test2', array('driver' => 'test')); $test =& ConnectionManager::create('test2', $this->__config);
$this->Model->setDataSource('test2'); $this->Model->setDataSource('test2');
$this->Model->TestModel8 =& new TestModel8(); $this->Model->TestModel8 =& new TestModel8();
$this->Model->TestModel8->setDataSource('test2'); $this->Model->TestModel8->setDataSource('test2');
@ -761,7 +762,7 @@ class DboSourceTest extends CakeTestCase {
$this->db->read($this->Model, array('recursive' => 1)); $this->db->read($this->Model, array('recursive' => 1));
$result = $this->db->getLastQuery(); $result = $this->db->getLastQuery();
$this->assertPattern('/`TestModel9` INNER JOIN `test_model8`/', $result); $this->assertPattern('/`TestModel9` INNER JOIN `test_model8`/', $result);
} }
function testGenerateAssociationQuerySelfJoinWithConditionsInHasOneBinding() { function testGenerateAssociationQuerySelfJoinWithConditionsInHasOneBinding() {
@ -2160,6 +2161,7 @@ class DboSourceTest extends CakeTestCase {
$result = $this->db->calculate($this->Model, 'max', array('`Model`.`id`', 'id')); $result = $this->db->calculate($this->Model, 'max', array('`Model`.`id`', 'id'));
$this->assertEqual($result, 'MAX(`Model`.`id`) AS `id`'); $this->assertEqual($result, 'MAX(`Model`.`id`) AS `id`');
} }
} }
?> ?>