Allow array recursion in get

This commit is contained in:
Joas Schilling 2015-12-09 14:47:28 +01:00
parent a06f0256a9
commit f2cb03e155
2 changed files with 31 additions and 6 deletions

View file

@ -48,8 +48,8 @@ class GetConfig extends Base {
->setDescription('Get a system config value')
->addArgument(
'name',
InputArgument::REQUIRED,
'Name of the config to get'
InputArgument::REQUIRED | InputArgument::IS_ARRAY,
'Name of the config to get, specify multiple for array parameter'
)
->addOption(
'default-value',
@ -68,7 +68,8 @@ class GetConfig extends Base {
* @return null|int null or 0 if everything went fine, or an error code
*/
protected function execute(InputInterface $input, OutputInterface $output) {
$configName = $input->getArgument('name');
$configNames = $input->getArgument('name');
$configName = array_shift($configNames);
$defaultValue = $input->getOption('default-value');
if (!in_array($configName, $this->systemConfig->getKeys()) && !$input->hasParameterOption('--default-value')) {
@ -79,6 +80,18 @@ class GetConfig extends Base {
$configValue = $defaultValue;
} else {
$configValue = $this->systemConfig->getValue($configName);
if (!empty($configNames)) {
foreach ($configNames as $configName) {
if (isset($configValue[$configName])) {
$configValue = $configValue[$configName];
} else if (!$input->hasParameterOption('--default-value')) {
return 1;
} else {
$configValue = $defaultValue;
break;
}
}
}
}
$this->writeMixedInOutputFormat($input, $output, $configValue);

View file

@ -90,13 +90,19 @@ class GetConfigTest extends TestCase {
['name', ['a' => 1, 'b' => 2], true, null, false, 'json', 0, json_encode(['a' => 1, 'b' => 2])],
['name', ['a' => 1, 'b' => 2], true, null, false, 'plain', 0, "a: 1\nb: 2"],
// Nested depth
[['name', 'a'], ['a' => 1, 'b' => 2], true, null, false, 'json', 0, json_encode(1)],
[['name', 'a'], ['a' => 1, 'b' => 2], true, null, false, 'plain', 0, '1'],
[['name', 'c'], ['a' => 1, 'b' => 2], true, true, true, 'json', 0, json_encode(true)],
[['name', 'c'], ['a' => 1, 'b' => 2], true, true, false, 'json', 1, null],
];
}
/**
* @dataProvider getData
*
* @param string $configName
* @param string[] $configNames
* @param mixed $value
* @param bool $configExists
* @param mixed $defaultValue
@ -105,7 +111,13 @@ class GetConfigTest extends TestCase {
* @param int $expectedReturn
* @param string $expectedMessage
*/
public function testGet($configName, $value, $configExists, $defaultValue, $hasDefault, $outputFormat, $expectedReturn, $expectedMessage) {
public function testGet($configNames, $value, $configExists, $defaultValue, $hasDefault, $outputFormat, $expectedReturn, $expectedMessage) {
if (is_array($configNames)) {
$configName = $configNames[0];
} else {
$configName = $configNames;
$configNames = [$configName];
}
$this->systemConfig->expects($this->atLeastOnce())
->method('getKeys')
->willReturn($configExists ? [$configName] : []);
@ -122,7 +134,7 @@ class GetConfigTest extends TestCase {
$this->consoleInput->expects($this->once())
->method('getArgument')
->with('name')
->willReturn($configName);
->willReturn($configNames);
$this->consoleInput->expects($this->any())
->method('getOption')
->willReturnMap([