Allow array recursion in get
This commit is contained in:
parent
a06f0256a9
commit
f2cb03e155
2 changed files with 31 additions and 6 deletions
|
@ -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);
|
||||
|
|
|
@ -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([
|
||||
|
|
Loading…
Reference in a new issue