172 lines
3.9 KiB
PHP
172 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace Robo\Config;
|
|
|
|
use Consolidation\Config\Util\ConfigOverlay;
|
|
use Consolidation\Config\ConfigInterface;
|
|
|
|
class Config extends ConfigOverlay implements GlobalOptionDefaultValuesInterface
|
|
{
|
|
const PROGRESS_BAR_AUTO_DISPLAY_INTERVAL = 'options.progress-delay';
|
|
const DEFAULT_PROGRESS_DELAY = 2;
|
|
const SIMULATE = 'options.simulate';
|
|
|
|
// Read-only configuration properties; changing these has no effect.
|
|
const INTERACTIVE = 'options.interactive';
|
|
const DECORATED = 'options.decorated';
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $defaults;
|
|
|
|
/**
|
|
* Create a new configuration object, and initialize it with
|
|
* the provided nested array containing configuration data.
|
|
*/
|
|
public function __construct(array $data = [])
|
|
{
|
|
parent::__construct();
|
|
|
|
$this->import($data ?: []);
|
|
$this->defaults = $this->getGlobalOptionDefaultValues();
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function import($data)
|
|
{
|
|
return $this->replace($data);
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function replace($data)
|
|
{
|
|
$this->getContext(ConfigOverlay::DEFAULT_CONTEXT)->replace($data);
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function combine($data)
|
|
{
|
|
$this->getContext(ConfigOverlay::DEFAULT_CONTEXT)->combine($data);
|
|
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 => self::DEFAULT_PROGRESS_DELAY,
|
|
self::SIMULATE => false,
|
|
];
|
|
return $this->trimPrefixFromGlobalOptions($globalOptions);
|
|
}
|
|
|
|
/**
|
|
* Remove the 'options.' prefix from the global options list.
|
|
*
|
|
* @param array $globalOptions
|
|
*
|
|
* @return array
|
|
*/
|
|
protected function trimPrefixFromGlobalOptions($globalOptions)
|
|
{
|
|
$result = [];
|
|
foreach ($globalOptions as $option => $value) {
|
|
$option = str_replace('options.', '', $option);
|
|
$result[$option] = $value;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* @deprecated Use $config->get(Config::SIMULATE)
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isSimulated()
|
|
{
|
|
return $this->get(self::SIMULATE);
|
|
}
|
|
|
|
/**
|
|
* @deprecated Use $config->set(Config::SIMULATE, true)
|
|
*
|
|
* @param bool $simulated
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function setSimulated($simulated = true)
|
|
{
|
|
return $this->set(self::SIMULATE, $simulated);
|
|
}
|
|
|
|
/**
|
|
* @deprecated Use $config->get(Config::INTERACTIVE)
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isInteractive()
|
|
{
|
|
return $this->get(self::INTERACTIVE);
|
|
}
|
|
|
|
/**
|
|
* @deprecated Use $config->set(Config::INTERACTIVE, true)
|
|
*
|
|
* @param bool $interactive
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function setInteractive($interactive = true)
|
|
{
|
|
return $this->set(self::INTERACTIVE, $interactive);
|
|
}
|
|
|
|
/**
|
|
* @deprecated Use $config->get(Config::DECORATED)
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isDecorated()
|
|
{
|
|
return $this->get(self::DECORATED);
|
|
}
|
|
|
|
/**
|
|
* @deprecated Use $config->set(Config::DECORATED, true)
|
|
*
|
|
* @param bool $decorated
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function setDecorated($decorated = true)
|
|
{
|
|
return $this->set(self::DECORATED, $decorated);
|
|
}
|
|
|
|
/**
|
|
* @deprecated Use $config->set(Config::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL, $interval)
|
|
*
|
|
* @param int $interval
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function setProgressBarAutoDisplayInterval($interval)
|
|
{
|
|
return $this->set(self::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL, $interval);
|
|
}
|
|
}
|