Adding in fallback for sql & schema dirs.

Starting to add plugin support for schema shell.
tests added.
This commit is contained in:
mark_story 2009-08-20 01:07:21 -04:00
parent f9e0ddfac6
commit ae715ef882
3 changed files with 54 additions and 12 deletions

View file

@ -58,18 +58,12 @@ class SchemaShell extends Shell {
* @access public
*/
function startup() {
$name = null;
$name = $file = $path = $connection = null;
if (!empty($this->params['name'])) {
$name = $this->params['name'];
$this->params['file'] = Inflector::underscore($name);
}
$path = null;
if (!empty($this->params['path'])) {
$path = $this->params['path'];
}
$file = null;
$path = $this->_getPath();
if (empty($this->params['file'])) {
$this->params['file'] = 'schema.php';
}
@ -78,7 +72,6 @@ class SchemaShell extends Shell {
}
$file = $this->params['file'];
$connection = null;
if (!empty($this->params['connection'])) {
$connection = $this->params['connection'];
}
@ -86,6 +79,23 @@ class SchemaShell extends Shell {
$this->Schema =& new CakeSchema(compact('name', 'path', 'file', 'connection'));
}
/**
* Get the correct path for the params. Uses path, and plugin to find the correct path.
* path param takes precedence over any plugins specified.
*
* @return mixed string to correct path or null.
**/
function _getPath() {
if (!empty($this->params['path'])) {
return $this->params['path'];
}
if (!empty($this->params['plugin'])) {
$pluginPath = $this->_pluginPath($this->params['plugin']);
return $pluginPath . 'config' . DS . 'schema' . DS;
}
return null;
}
/**
* Override main
*

View file

@ -90,7 +90,11 @@ class CakeSchema extends Object {
}
if (empty($options['path'])) {
$this->path = CONFIGS . 'schema';
if (is_dir(CONFIGS . 'schema')) {
$this->path = CONFIGS . 'schema';
} else {
$this->path = CONFIGS . 'sql';
}
}
$options = array_merge(get_object_vars($this), $options);

View file

@ -160,7 +160,7 @@ class SchemaShellTest extends CakeTestCase {
$this->assertEqual($this->Shell->Schema->file, 'test_schema.php');
$this->assertEqual($this->Shell->Schema->connection, 'default');
$this->assertEqual($this->Shell->Schema->path, APP . 'config' . DS . 'schema');
unset($this->Shell->Schema);
$this->Shell->params = array(
'file' => 'other_file.php',
@ -311,7 +311,7 @@ class SchemaShellTest extends CakeTestCase {
$this->Shell->startup();
$this->Shell->setReturnValue('in', 'y');
$this->Shell->run();
$db =& ConnectionManager::getDataSource('test_suite');
$sources = $db->listSources();
$this->assertTrue(in_array('i18n', $sources));
@ -364,5 +364,33 @@ class SchemaShellTest extends CakeTestCase {
$this->_fixtures['core.article']->create($this->db);
}
/**
* test that the plugin param creates the correct path in the schema object.
*
* @return void
**/
function testPluginParam() {
App::build(array(
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
));
$this->Shell->params = array(
'plugin' => 'TestPlugin',
'connection' => 'test_suite'
);
$this->Shell->startup();
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS . 'test_plugin' . DS . 'config' . DS . 'schema' . DS;
$this->assertEqual($this->Shell->Schema->path, $expected);
unset($this->Shell->Schema);
$this->Shell->params = array(
'plugin' => 'TestPlugin',
'connection' => 'test_suite',
'path' => '/some/path'
);
$this->Shell->startup();
$expected = '/some/path';
$this->assertEqual($this->Shell->Schema->path, $expected);
}
}
?>