Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Doing some refactoring in the project task.

Adding tests for constants staying commented out when CakePHP is on the include_path.
  • Loading branch information...
commit cdcabc79b675f3448b4ca73d4cdd4dd31bb73d9f 1 parent 6e2870c
@markstory markstory authored markstory committed
View
61 lib/Cake/Console/Command/Task/ProjectTask.php
@@ -52,6 +52,7 @@ public function execute() {
$prompt = __d('cake_console', "What is the path to the project you want to bake?");
$project = $this->in($prompt, null, APP . 'myapp');
}
+
if ($project && !Folder::isAbsolute($project) && isset($_SERVER['PWD'])) {
$project = $_SERVER['PWD'] . DS . $project;
@@ -297,41 +298,17 @@ public function securityCipherSeed($path) {
* Generates and writes CAKE_CORE_INCLUDE_PATH
*
* @param string $path Project path
+ * @param bool $hardCode Wether or not define calls should be hardcoded.
* @return boolean Success
*/
public function corePath($path, $hardCode = true) {
- $prefix = $hardCode == true ? '' : '//';
-
if (dirname($path) !== CAKE_CORE_INCLUDE_PATH) {
- $File = new File($path . 'webroot' . DS . 'index.php');
- $contents = $File->read();
- $root = strpos(CAKE_CORE_INCLUDE_PATH, '/') === 0 ? " DS . '" : "'";
- $corePath = $root . str_replace(DS, "' . DS . '", trim(CAKE_CORE_INCLUDE_PATH, DS)) . "'";
- if (preg_match('#(\s*[/]+define\(\'CAKE_CORE_INCLUDE_PATH\', .*?\);)#', $contents, $match)) {
- $result = str_replace(
- $match[0],
- "\n\t" . $prefix . "define('CAKE_CORE_INCLUDE_PATH', " . $corePath . ");",
- $contents
- );
- if (!$File->write($result)) {
- return false;
- }
- } else {
+ $filename = $path . 'webroot' . DS . 'index.php';
+ if (!$this->_replaceCorePath($filename, $hardCode)) {
return false;
}
-
- $File = new File($path . 'webroot' . DS . 'test.php');
- $contents = $File->read();
- if (preg_match('#(\s*[/]+define\(\'CAKE_CORE_INCLUDE_PATH\', .*?\);)#', $contents, $match)) {
- $result = str_replace(
- $match[0],
- "\n\t" . $prefix . "define('CAKE_CORE_INCLUDE_PATH', " . $corePath . ");",
- $contents
- );
- if (!$File->write($result)) {
- return false;
- }
- } else {
+ $filename = $path . 'webroot' . DS . 'test.php';
+ if (!$this->_replaceCorePath($filename, $hardCode)) {
return false;
}
return true;
@@ -339,6 +316,32 @@ public function corePath($path, $hardCode = true) {
}
/**
+ * Replaces the __CAKE_PATH__ placeholder in the template files.
+ *
+ * @param string $filename The filename to operate on.
+ * @param boolean $hardCode Whether or not the define should be uncommented.
+ * @retun bool Success
+ */
+ protected function _replaceCorePath($filename, $hardCode) {
+ $contents = file_get_contents($filename);
+
+ $root = strpos(CAKE_CORE_INCLUDE_PATH, '/') === 0 ? " DS . '" : "'";
+ $corePath = $root . str_replace(DS, "' . DS . '", trim(CAKE_CORE_INCLUDE_PATH, DS)) . "'";
+
+ $result = str_replace('__CAKE_PATH__', $corePath, $contents, $count);
+ if ($hardCode) {
+ $result = str_replace('//define(\'CAKE_CORE', 'define(\'CAKE_CORE', $result);
+ }
+ if (!file_put_contents($filename, $result)) {
+ return false;
+ }
+ if ($count == 0) {
+ return false;
+ }
+ return true;
+ }
+
+/**
* Enables Configure::read('Routing.prefixes') in /app/Config/core.php
*
* @param string $name Name to use as admin routing
View
29 lib/Cake/Test/Case/Console/Command/Task/ProjectTaskTest.php
@@ -118,37 +118,42 @@ public function testExecuteWithAbsolutePath() {
$path = $this->Task->args[0] = TMP . 'tests' . DS . 'bake_test_app';
$this->Task->params['skel'] = CAKE . 'Console' . DS . 'Templates' . DS . 'skel';
$this->Task->expects($this->at(0))->method('in')->will($this->returnValue('y'));
- $this->Task->expects($this->at(3))->method('in')->will($this->returnValue('n'));
$this->Task->execute();
$this->assertTrue(is_dir($this->Task->args[0]), 'No project dir');
$file = new File($path . DS . 'webroot' . DS . 'index.php');
$contents = $file->read();
- $this->assertPattern('/define\(\'CAKE_CORE_INCLUDE_PATH\', ROOT/', $contents);
+ $this->assertPattern('/define\(\'CAKE_CORE_INCLUDE_PATH\', .*?DS/', $contents);
$file = new File($path . DS . 'webroot' . DS . 'test.php');
$contents = $file->read();
- $this->assertPattern('/define\(\'CAKE_CORE_INCLUDE_PATH\', ROOT/', $contents);
+ $this->assertPattern('/define\(\'CAKE_CORE_INCLUDE_PATH\', .*?DS/', $contents);
}
/**
- * test bake with setting CAKE_CORE_INCLUDE_PATH in webroot/index.php
+ * test bake with CakePHP on the include path. The constants should remain commented out.
*
* @return void
*/
- public function testExecuteWithSettingIncludePath() {
+ public function testExecuteWithCakeOnIncludePath() {
+ if (!function_exists('ini_set')) {
+ $this->markTestAsSkipped('Not access to ini_set, cannot proceed.');
+ }
+ $restore = ini_get('include_path');
+ ini_set('include_path', CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . $restore);
+
$path = $this->Task->args[0] = TMP . 'tests' . DS . 'bake_test_app';
$this->Task->params['skel'] = CAKE . 'Console' . DS . 'Templates' . DS . 'skel';
$this->Task->expects($this->at(0))->method('in')->will($this->returnValue('y'));
- $this->Task->expects($this->at(3))->method('in')->will($this->returnValue('y'));
$this->Task->execute();
$this->assertTrue(is_dir($this->Task->args[0]), 'No project dir');
- $file = new File($path . DS . 'webroot' . DS . 'index.php');
- $contents = $file->read();
- $this->assertNoPattern('/define\(\'CAKE_CORE_INCLUDE_PATH\', ROOT/', $contents);
- $file = new File($path . DS . 'webroot' . DS . 'test.php');
- $contents = $file->read();
- $this->assertNoPattern('/define\(\'CAKE_CORE_INCLUDE_PATH\', ROOT/', $contents);
+ $contents = file_get_contents($path . DS . 'webroot' . DS . 'index.php');
+ $this->assertRegExp('#//define\(\'CAKE_CORE_INCLUDE_PATH#', $contents);
+
+ $contents = file_get_contents($path . DS . 'webroot' . DS . 'test.php');
+ $this->assertRegExp('#//define\(\'CAKE_CORE_INCLUDE_PATH#', $contents);
+
+ ini_set('include_path', $restore);
}
/**
Please sign in to comment.
Something went wrong with that request. Please try again.