diff --git a/cake/libs/model/connection_manager.php b/cake/libs/model/connection_manager.php index 4de4d406d5b..4ce71ab38fa 100644 --- a/cake/libs/model/connection_manager.php +++ b/cake/libs/model/connection_manager.php @@ -256,11 +256,17 @@ function __connectionData($config) { $filename = $classname = $parent = $plugin = null; if (!empty($config['driver'])) { - $source = $config['datasource'] . '_' . $config['driver']; - - $filename = $config['datasource'] . DS . $source; - $classname = Inflector::camelize(strtolower($source)); $parent = $this->__connectionData(array('datasource' => $config['datasource'])); + $parentSource = preg_replace('/_source$/', '', $parent['filename']); + + if (strpos($config['driver'], '.') !== false) { + list($plugin, $classname) = explode('.', $config['driver']); + $source = Inflector::underscore($classname); + } else { + $source = $parentSource . '_' . $config['driver']; + $classname = Inflector::camelize(strtolower($source)); + } + $filename = $parentSource . DS . $source; } else { if (strpos($config['datasource'], '.') !== false) { list($plugin, $classname) = explode('.', $config['datasource']); diff --git a/cake/tests/cases/libs/model/connection_manager.test.php b/cake/tests/cases/libs/model/connection_manager.test.php index 5c2530ec26c..a4336a28ad2 100644 --- a/cake/tests/cases/libs/model/connection_manager.test.php +++ b/cake/tests/cases/libs/model/connection_manager.test.php @@ -113,6 +113,77 @@ function testGetPluginDataSource() { App::build(); } +/** + * testGetPluginDataSourceAndPluginDriver method + * + * @access public + * @return void + */ + function testGetPluginDataSourceAndPluginDriver() { + App::build(array( + 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS) + )); + + $name = 'test_plugin_source_and_driver'; + $config = array('datasource' => 'TestPlugin.TestSource', 'driver' => 'TestPlugin.TestDriver'); + + $connection = ConnectionManager::create($name, $config); + + $this->assertTrue(class_exists('TestSource')); + $this->assertTrue(class_exists('TestDriver')); + $this->assertEqual($connection->configKeyName, $name); + $this->assertEqual($connection->config, $config); + + App::build(); + } + +/** + * testGetLocalDataSourceAndPluginDriver method + * + * @access public + * @return void + */ + function testGetLocalDataSourceAndPluginDriver() { + App::build(array( + 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS) + )); + + $name = 'test_local_source_and_plugin_driver'; + $config = array('datasource' => 'dbo', 'driver' => 'TestPlugin.DboDummy'); + + $connection = ConnectionManager::create($name, $config); + + $this->assertTrue(class_exists('DboSource')); + $this->assertTrue(class_exists('DboDummy')); + $this->assertEqual($connection->configKeyName, $name); + + App::build(); + } + +/** + * testGetPluginDataSourceAndLocalDriver method + * + * @access public + * @return void + */ + function testGetPluginDataSourceAndLocalDriver() { + App::build(array( + 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS), + 'datasources' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'models' . DS . 'datasources' . DS) + )); + + $name = 'test_plugin_source_and_local_driver'; + $config = array('datasource' => 'TestPlugin.TestSource', 'driver' => 'local_driver'); + + $connection = ConnectionManager::create($name, $config); + + $this->assertTrue(class_exists('TestSource')); + $this->assertTrue(class_exists('TestLocalDriver')); + $this->assertEqual($connection->configKeyName, $name); + $this->assertEqual($connection->config, $config); + App::build(); + } + /** * testSourceList method * diff --git a/cake/tests/test_app/models/datasources/test/test_local_driver.php b/cake/tests/test_app/models/datasources/test/test_local_driver.php new file mode 100644 index 00000000000..fe9c9fdd306 --- /dev/null +++ b/cake/tests/test_app/models/datasources/test/test_local_driver.php @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/cake/tests/test_app/plugins/test_plugin/models/datasources/dbo/dbo_dummy.php b/cake/tests/test_app/plugins/test_plugin/models/datasources/dbo/dbo_dummy.php new file mode 100644 index 00000000000..aee12a17a0b --- /dev/null +++ b/cake/tests/test_app/plugins/test_plugin/models/datasources/dbo/dbo_dummy.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/cake/tests/test_app/plugins/test_plugin/models/datasources/test/test_driver.php b/cake/tests/test_app/plugins/test_plugin/models/datasources/test/test_driver.php new file mode 100644 index 00000000000..beae8d0b67c --- /dev/null +++ b/cake/tests/test_app/plugins/test_plugin/models/datasources/test/test_driver.php @@ -0,0 +1,6 @@ + \ No newline at end of file