Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
CRAP | |
31.71% |
13 / 41 |
| ConfigHandler | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
49.54 | |
31.71% |
13 / 41 |
| readLocation($location) | |
0.00% |
0 / 1 |
23.50 | |
30.43% |
7 / 23 |
|||
| getReaderByExtension($location) | |
0.00% |
0 / 1 |
8.74 | |
33.33% |
6 / 18 |
|||
| <?php | |
| namespace Environaut\Config; | |
| use Environaut\Checks\Validator; | |
| use Environaut\Config\BaseConfigHandler; | |
| use Environaut\Config\Reader\IConfigReader; | |
| use Environaut\Config\Reader\JsonConfigReader; | |
| use Environaut\Config\Reader\PhpConfigReader; | |
| use Environaut\Config\Reader\XmlConfigReader; | |
| /** | |
| * Default config handler that reads a config file from the | |
| * given locations. Supported are JSON, XML and PHP config | |
| * file formats. | |
| */ | |
| class ConfigHandler extends BaseConfigHandler | |
| { | |
| /** | |
| * @var array supported config file extensions | |
| */ | |
| protected $supported_file_extensions = array('json', 'xml', 'php'); | |
| /** | |
| * @var array default config file names (order is important) | |
| */ | |
| protected $default_filenames = array('environaut.xml', 'environaut.json', 'environaut.php'); | |
| /** | |
| * Reads a config file from the given location and returns it's | |
| * data as an associative array. | |
| * | |
| * @param mixed $location location of config file (as a string with a file or directory path) | |
| * | |
| * @return array config data | |
| * | |
| * @throws \InvalidArgumentException on errors like missing config file | |
| */ | |
| protected function readLocation($location) | |
| { | |
| $reader = null; | |
| if (is_dir($location)) { | |
| $base_location = Validator::fixPath(Validator::fixRelativePath($location)); | |
| foreach ($this->default_filenames as $filename) { | |
| $file = $base_location . $filename; | |
| if (is_readable($file)) { | |
| try { | |
| $reader = $this->getReaderByExtension($file); | |
| break; // found possible config file \o/ | |
| } catch (\InvalidArgumentException $e) { | |
| // next attempt as extension has no handler | |
| } | |
| } | |
| // next attempt, as file is not readable or does not exist | |
| } | |
| if (!$reader instanceof IConfigReader) { | |
| throw new \InvalidArgumentException( | |
| 'Could not find an environaut config file in "' . $base_location . '".' . PHP_EOL . | |
| 'Attempted files were: ' . implode(', ', $this->default_filenames) . '.' . PHP_EOL . | |
| 'Try calling from a different folder or specify a file using the "--config" option.' | |
| ); | |
| } | |
| } elseif (is_file($location)) { | |
| $reader = $this->getReaderByExtension($location); | |
| } else { | |
| throw new \InvalidArgumentException( | |
| 'Currently only regular files and directories are supported for config file reading.' | |
| ); | |
| } | |
| $config_data = $reader->getConfigData($location); | |
| return $config_data; | |
| } | |
| /** | |
| * Returns a specific reader instance depending on the file | |
| * extension of the given config file location. | |
| * | |
| * @param string $location | |
| * | |
| * @return IConfigReader | |
| * | |
| * @throws \InvalidArgumentException in case of unsupported file extensions | |
| */ | |
| protected function getReaderByExtension($location) | |
| { | |
| $ext = pathinfo($location, PATHINFO_EXTENSION); | |
| $reader = null; | |
| switch ($ext) { | |
| case 'json': | |
| $reader = new JsonConfigReader(); | |
| break; | |
| case 'xml': | |
| $reader = new XmlConfigReader(); | |
| break; | |
| case 'php': | |
| $reader = new PhpConfigReader(); | |
| break; | |
| default: | |
| throw new \InvalidArgumentException( | |
| 'File could not be read: ' . $location . PHP_EOL . | |
| 'Supported config file extensions are: ' . implode(', ', $this->supported_file_extensions) | |
| ); | |
| break; | |
| } | |
| return $reader; | |
| } | |
| } |