diff --git a/lib/Cake/Test/Case/Utility/FileTest.php b/lib/Cake/Test/Case/Utility/FileTest.php index 85a759e00..5d963e012 100644 --- a/lib/Cake/Test/Case/Utility/FileTest.php +++ b/lib/Cake/Test/Case/Utility/FileTest.php @@ -562,4 +562,40 @@ class FileTest extends CakeTestCase { } return false; } + +/** + * testReplaceText method + * + * @return void + */ + public function testReplaceText() { + $TestFile = new File(dirname(__FILE__) . '/../../test_app/Vendor/welcome.php'); + $TmpFile = new File(TMP . 'tests' . DS . 'cakephp.file.test.tmp'); + + // Copy the test file to the temporary location + $TestFile->copy($TmpFile->path, true); + + // Replace the contents of the tempory file + $result = $TmpFile->replaceText('welcome.php', 'welcome.tmp'); + $this->assertTrue($result); + + // Double check + $expected = 'This is the welcome.tmp file in vendors directory'; + $contents = $TmpFile->read(); + $this->assertContains($expected, $contents); + + $search = array('This is the', 'welcome.php file', 'in tmp directory'); + $replace = array('This should be a', 'welcome.tmp file', 'in the Lib directory'); + + // Replace the contents of the tempory file + $result = $TmpFile->replaceText($search, $replace); + $this->assertTrue($result); + + // Double check + $expected = 'This should be a welcome.tmp file in vendors directory'; + $contents = $TmpFile->read(); + $this->assertContains($expected, $contents); + + $TmpFile->delete(); + } } diff --git a/lib/Cake/Utility/File.php b/lib/Cake/Utility/File.php index 9c1be6afe..4cdd226cb 100644 --- a/lib/Cake/Utility/File.php +++ b/lib/Cake/Utility/File.php @@ -587,4 +587,32 @@ class File { return clearstatcache(); } +/** + * Searches for a given text and replaces the text if found. + * + * @param string|array $search Text(s) to search for. + * @param string|array $replace Text(s) to replace with. + * @return boolean Success + */ + public function replaceText($search, $replace) { + if (!$this->open('r+')) { + return false; + } + + if ($this->lock !== null) { + if (flock($this->handle, LOCK_EX) === false) { + return false; + } + } + + $replaced = $this->write(str_replace($search, $replace, $this->read()), 'w', true); + + if ($this->lock !== null) { + flock($this->handle, LOCK_UN); + } + $this->close(); + + return $replaced; + } + }