diff --git a/cake/libs/config/php_reader.php b/cake/libs/config/php_reader.php new file mode 100644 index 000000000..c43cbd801 --- /dev/null +++ b/cake/libs/config/php_reader.php @@ -0,0 +1,66 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The MIT License + * Redistributions of files must retain the above copyright notice + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.tests.cases.libs + * @since CakePHP(tm) v 2.0 + * @license MIT License (http://www.opensource.org/licenses/mit-license.php) + */ + +/** + * PHP Reader allows Configure to load configuration values from + * files containing simple PHP arrays. + * + * @package cake.libs.config + */ +class PhpReader { +/** + * The path this reader finds files on. + * + * @var string + */ + protected $_path = null; + +/** + * Constructor for PHP Config file reading. + * + * @param string $path The path to read config files from. Defaults to CONFIGS + */ + public function __construct($path = CONFIGS) { + $this->_path = $path; + } + +/** + * Read a config file and return its contents. + * + * Keys with `.` will be treated as values in plugins. Instead of reading from + * the initialized path, plugin keys will be located using App::pluginPath(). + * + * + * @param string $key The identifier to read from. If the key has a . it will be treated + * as a plugin prefix. + * @return array Parsed configuration values. + */ + public function read($key) { + $file = $this->_path . $key . '.php'; + if (!file_exists($file)) { + throw new RuntimeException(__('Could not load configuration file: ') . $file); + } + include $file; + if (!isset($config)) { + return array(); + } + return $config; + } +} \ No newline at end of file diff --git a/cake/tests/cases/libs/config/php_reader.test.php b/cake/tests/cases/libs/config/php_reader.test.php new file mode 100644 index 000000000..0fcbea640 --- /dev/null +++ b/cake/tests/cases/libs/config/php_reader.test.php @@ -0,0 +1,53 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The MIT License + * Redistributions of files must retain the above copyright notice + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.tests.cases + * @since CakePHP(tm) v 2.0 + * @license MIT License (http://www.opensource.org/licenses/mit-license.php) + */ +App::import('Core', 'config/PhpReader'); + +class PhpReaderTest extends CakeTestCase { +/** + * setup + * + * @return void + */ + function setUp() { + parent::setUp(); + $this->path = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'config'. DS; + } +/** + * test reading files + * + * @return void + */ + function testRead() { + $reader = new PhpReader($this->path); + $values = $reader->read('var_test'); + $this->assertEquals('value', $values['Read']); + } + +/** + * Test an exception is thrown by reading files that don't exist. + * + * @expectedException RuntimeException + * @return void + */ + function testReadWithNonExistantFile() { + $reader = new PhpReader($this->path); + $reader->read('fake_values'); + } +} diff --git a/cake/tests/test_app/config/var_test.php b/cake/tests/test_app/config/var_test.php new file mode 100644 index 000000000..e0f3ae2a1 --- /dev/null +++ b/cake/tests/test_app/config/var_test.php @@ -0,0 +1,9 @@ + 'value', + 'Deep' => array( + 'Deeper' => array( + 'Deepest' => 'buried' + ) + ) +); \ No newline at end of file