Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Adding patches, and tests from tkykmw. Add support for plugin datasou…

…rce drivers. Fixes #297
  • Loading branch information...
commit 2279b1a736ca772622aa63f809b54b5368805857 1 parent e1eb827
@markstory markstory authored
View
14 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']);
View
71 cake/tests/cases/libs/model/connection_manager.test.php
@@ -114,6 +114,77 @@ function testGetPluginDataSource() {
}
/**
+ * 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
*
* @access public
View
6 cake/tests/test_app/models/datasources/test/test_local_driver.php
@@ -0,0 +1,6 @@
+<?php
+
+class TestLocalDriver extends TestSource {
+}
+
+?>
View
9 cake/tests/test_app/plugins/test_plugin/models/datasources/dbo/dbo_dummy.php
@@ -0,0 +1,9 @@
+<?php
+
+class DboDummy extends DboSource {
+ function connect() {
+ return true;
+ }
+}
+
+?>
View
6 cake/tests/test_app/plugins/test_plugin/models/datasources/test/test_driver.php
@@ -0,0 +1,6 @@
+<?php
+
+class TestDriver extends TestSource {
+}
+
+?>
Please sign in to comment.
Something went wrong with that request. Please try again.