From 3099c48e4665b8e0eeadbfae659f1fe69dc0a89a Mon Sep 17 00:00:00 2001 From: Greg Anderson Date: Mon, 12 Sep 2016 11:57:39 -0700 Subject: [PATCH] Clean up Config class initialization / global input option handling. --- src/Application.php | 2 +- src/Config.php | 45 +++++++++++++++++++++--------- src/GlobalOptionsEventListener.php | 13 ++++++++- 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/src/Application.php b/src/Application.php index b868f53db..85b7dd278 100644 --- a/src/Application.php +++ b/src/Application.php @@ -19,7 +19,7 @@ public function __construct($name, $version) ); $this->getDefinition() ->addOption( - new InputOption('--progress-delay', null, InputOption::VALUE_REQUIRED, 'Number of seconds before progress bar is displayed in long-running task collections. Default: 2s.') + new InputOption('--progress-delay', null, InputOption::VALUE_REQUIRED, 'Number of seconds before progress bar is displayed in long-running task collections. Default: 2s.', Config::DEFAULT_PROGRESS_DELAY) ); $this->getDefinition() ->addOption( diff --git a/src/Config.php b/src/Config.php index 50a553812..32ab62343 100644 --- a/src/Config.php +++ b/src/Config.php @@ -4,28 +4,49 @@ class Config { const PROGRESS_BAR_AUTO_DISPLAY_INTERVAL = 'progress-delay'; + const DEFAULT_PROGRESS_DELAY = 2; const SIMULATE = 'simulate'; const SUPRESS_MESSAGES = 'supress-messages'; const DECORATED = 'decorated'; protected $config = []; - public function get($key, $default = null) + /** + * Fet a configuration value + * @param string $key Which config item to look up + * @param string|null $defaultOverride Override usual default value with a different default + * @return mixed + */ + public function get($key, $defaultOverride = null) { - return isset($this->config[$key]) ? $this->config[$key] : $default; + if (isset($this->config[$key])) { + return $this->config[$key]; + } + return $this->getDefault($key, $defaultOverride); } + /** + * Set a configu value + * @param string $key + * @param mixed $value + * @return Config + */ public function set($key, $value) { $this->config[$key] = $value; return $this; } + /** + * Return an associative array containing all of the global configuration + * options and their default values. + * @return array + */ public function getGlobalOptionDefaultValues() { $globalOptions = [ - self::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL => 2, + self::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL => self::DEFAULT_PROGRESS_DELAY, self::SIMULATE => false, self::SUPRESS_MESSAGES => false, ]; @@ -33,18 +54,16 @@ public function getGlobalOptionDefaultValues() return $globalOptions; } - public function setGlobalOptions($input) + /** + * Return the default value for a given configuration item. + * @param string $key + * @param string|null $defaultOverride + * @return mixed + */ + public function getDefault($key, $defaultOverride = null) { $globalOptions = $this->getGlobalOptionDefaultValues(); - - foreach ($globalOptions as $option => $default) { - $value = $input->hasOption($option) ? $input->getOption($option) : null; - // Unfortunately, the `?:` operator does not differentate between `0` and `null` - if (!isset($value)) { - $value = $default; - } - $this->set($option, $value); - } + return isset($globalOptions[$key]) ? $globalOptions[$key] : $defaultOverride; } public function isSimulated() diff --git a/src/GlobalOptionsEventListener.php b/src/GlobalOptionsEventListener.php index fbb6a498d..eadf1c304 100644 --- a/src/GlobalOptionsEventListener.php +++ b/src/GlobalOptionsEventListener.php @@ -29,6 +29,17 @@ public static function getSubscribedEvents() */ public function setGlobalOptions(ConsoleCommandEvent $event) { - $this->getConfig()->setGlobalOptions($event->getInput()); + $config = $this->getConfig(); + $input = $event->getInput(); + $globalOptions = $config->getGlobalOptionDefaultValues(); + + foreach ($globalOptions as $option => $default) { + $value = $input->hasOption($option) ? $input->getOption($option) : null; + // Unfortunately, the `?:` operator does not differentate between `0` and `null` + if (!isset($value)) { + $value = $default; + } + $config->set($option, $value); + } } }