Skip to content

Commit

Permalink
Making TaskCollection use App::import instead of goofy shell paths.
Browse files Browse the repository at this point in the history
Moving files in the testsuite around to reflect changed paths.
  • Loading branch information
markstory committed Oct 17, 2010
1 parent 8c63f15 commit 5737cf7
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 23 deletions.
29 changes: 10 additions & 19 deletions cake/console/libs/task_collection.php
Expand Up @@ -27,6 +27,13 @@ class TaskCollection extends ObjectCollection {
protected $_Shell;
protected $_Dispatch;

/**
* The directory inside each shell path that contains tasks.
*
* @var string
*/
public $taskPathPrefix = 'tasks/';

/**
* Constructor
*
Expand Down Expand Up @@ -56,8 +63,9 @@ public function load($task, $settings = array(), $enable = true) {
$taskFile = Inflector::underscore($name);
$taskClass = $name . 'Task';
if (!class_exists($taskClass)) {
$taskFile = $this->_getPath($taskFile);
require_once $taskFile;
if (!App::import('Shell', $plugin . $this->taskPathPrefix . $name)) {
throw new MissingTaskFileException($taskFile . '.php');
}
if (!class_exists($taskClass)) {
throw new MissingTaskClassException($taskClass);
}
Expand All @@ -72,21 +80,4 @@ public function load($task, $settings = array(), $enable = true) {
return $this->_loaded[$name];
}

/**
* Find a task file on one of the paths.
*
* @param string $file Underscored name of the file to find missing .php
* @return string Filename to the task
* @throws MissingTaskFileException
*/
protected function _getPath($file) {
foreach ($this->_Shell->shellPaths as $path) {
$taskPath = $path . 'tasks' . DS . $file . '.php';
if (file_exists($taskPath)) {
return $taskPath;
}
}
throw new MissingTaskFileException($file . '.php');
}

}
9 changes: 9 additions & 0 deletions cake/libs/configure.php
Expand Up @@ -1142,6 +1142,15 @@ private static function __settings($type, $plugin, $parent) {
}
return array('class' => $type, 'suffix' => null, 'path' => $path);
break;
case 'shell':
if (!class_exists('Shell')) {
App::import($type, 'Shell', false);
}
if ($plugin) {
$path = $pluginPath . DS . 'console' . DS . 'shells' . DS;
}
return array('class' => $type, 'suffix' => null, 'path' => $path);
break;
case 'vendor':
if ($plugin) {
$path = $pluginPath . DS . 'vendors' . DS;
Expand Down
7 changes: 3 additions & 4 deletions cake/tests/cases/console/libs/task_collection.test.php
Expand Up @@ -29,7 +29,6 @@ class TaskCollectionTest extends CakeTestCase {
*/
function setup() {
$shell = $this->getMock('Shell', array(), array(), '', false);
$shell->shellPaths = App::path('shells');
$dispatcher = $this->getMock('ShellDispatcher', array(), array(), '', false);
$this->Tasks = new TaskCollection($shell, $dispatcher);
}
Expand Down Expand Up @@ -89,9 +88,9 @@ function testLoadMissingTaskFile() {
function testLoadPluginTask() {
$dispatcher = $this->getMock('ShellDispatcher', array(), array(), '', false);
$shell = $this->getMock('Shell', array(), array(), '', false);
$shell->shellPaths = App::path('shells');
$shell->shellPaths[] = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS . 'test_plugin' . DS . 'vendors' . DS . 'shells' . DS;
$dispatcher->shellPaths = $shell->shellPaths;
App::build(array(
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
));
$this->Tasks = new TaskCollection($shell, $dispatcher);

$result = $this->Tasks->load('TestPlugin.OtherTask');
Expand Down

0 comments on commit 5737cf7

Please sign in to comment.