Skip to content
Browse files

Merge pull request #1176 from ceeram/2.3-3694

Throw exceptions only when datasource has wrong package.

This is replaces instanceof checks with a more generalized check. 

Refs #3694
  • Loading branch information...
2 parents 3d4ebc0 + 8374eb9 commit 30247fd769504a9aed94435a9258584192e38b86 @markstory markstory committed
View
12 lib/Cake/Model/ConnectionManager.php
@@ -78,7 +78,6 @@ protected static function _init() {
*
* @param string $name The name of the DataSource, as defined in app/Config/database.php
* @return DataSource Instance
- * @throws MissingDatasourceConfigException
* @throws MissingDatasourceException
*/
public static function getDataSource($name) {
@@ -99,17 +98,16 @@ public static function getDataSource($name) {
$conn = self::$_connectionsEnum[$name];
$class = $conn['classname'];
- $instance = new $class(self::$config->{$name});
- $instance->configKeyName = $name;
-
- if (!$instance instanceof Datasource) {
+ if (strpos(App::location($class), 'Datasource') === false) {
throw new MissingDatasourceException(array(
'class' => $class,
'plugin' => null,
- 'message' => 'Only classes extending Datasource can be used as datasources.'
+ 'message' => 'Datasource is not found in Model/Datasource package.'
));
}
- self::$_dataSources[$name] = $instance;
+ self::$_dataSources[$name] = new $class(self::$config->{$name});
+ self::$_dataSources[$name]->configKeyName = $name;
+
return self::$_dataSources[$name];
}
View
3 lib/Cake/Test/Case/Model/Datasource/DboSourceTest.php
@@ -21,6 +21,9 @@
App::uses('AppModel', 'Model');
App::uses('DataSource', 'Model/Datasource');
App::uses('DboSource', 'Model/Datasource');
+App::uses('DboTestSource', 'Model/Datasource');
+App::uses('DboSecondTestSource', 'Model/Datasource');
+App::uses('MockDataSource', 'Model/Datasource');
require_once dirname(dirname(__FILE__)) . DS . 'models.php';
class MockPDO extends PDO {
View
1 lib/Cake/Test/Case/Model/ModelIntegrationTest.php
@@ -20,6 +20,7 @@
require_once dirname(__FILE__) . DS . 'ModelTestBase.php';
App::uses('DboSource', 'Model/Datasource');
+App::uses('DboMock', 'Model/Datasource');
/**
* DboMock class
View
5 lib/Cake/Test/Case/Model/ModelWriteTest.php
@@ -17,6 +17,11 @@
* @since CakePHP(tm) v 1.2.0.4206
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
*/
+App::uses('MockTransactionDboSource', 'Model/Datasource');
+App::uses('MockTransactionAssociatedDboSource', 'Model/Datasource');
+App::uses('MockManyTransactionDboSource', 'Model/Datasource');
+App::uses('MockAssociatedTransactionDboSource', 'Model/Datasource');
+
require_once dirname(__FILE__) . DS . 'ModelTestBase.php';
/**
* ModelWriteTest

0 comments on commit 30247fd

Please sign in to comment.
Something went wrong with that request. Please try again.