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
This commit is contained in:
Mark Story 2013-03-13 17:19:53 -07:00
commit 30247fd769
4 changed files with 14 additions and 7 deletions

View file

@ -78,7 +78,6 @@ class ConnectionManager {
*
* @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 @@ class ConnectionManager {
$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 file

@ -21,6 +21,9 @@ App::uses('Model', 'Model');
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 file

@ -20,6 +20,7 @@
require_once dirname(__FILE__) . DS . 'ModelTestBase.php';
App::uses('DboSource', 'Model/Datasource');
App::uses('DboMock', 'Model/Datasource');
/**
* DboMock class

View file

@ -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