
| Current Path : /var/www/html/rocksensor1/vendor/grasmash/yaml-cli/src/Command/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/html/rocksensor1/vendor/grasmash/yaml-cli/src/Command/UpdateValueCommand.php |
<?php
namespace Grasmash\YamlCli\Command;
use Dflydev\DotAccessData\Data;
use Symfony\Component\Console\Exception\RuntimeException;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
/**
* Class CreateProjectCommand
*
* @package Grasmash\YamlCli\Command
*/
class UpdateValueCommand extends CommandBase
{
/**
* {inheritdoc}
*/
protected function configure()
{
$this
->setName('update:value')
->setDescription('Update the value for a specific key in a YAML file.')
->addUsage("path/to/file.yml example.key 'new value for example.key'")
->addArgument(
'filename',
InputArgument::REQUIRED,
"The filename of the YAML file"
)
->addArgument(
'key',
InputArgument::REQUIRED,
"The key for the value to set, in dot notation"
)
->addArgument(
'value',
InputArgument::REQUIRED,
"The new value"
)
->addOption('type', 't', InputOption::VALUE_REQUIRED, 'Set the variable type for the value. Accepted types are int, integer, bool, boolean, str, and string.');
}
/**
* @param \Symfony\Component\Console\Input\InputInterface $input
* @param \Symfony\Component\Console\Output\OutputInterface $output
*
* @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output): int
{
$filename = $input->getArgument('filename');
$key = $input->getArgument('key');
$raw_value = $input->getArgument('value');
$yaml_parsed = $this->loadYamlFile($filename);
if ($yaml_parsed === false) {
// Exit with a status of 1.
return 1;
}
$data = new Data($yaml_parsed);
$value = $raw_value;
if ($type = $input->getOption('type')) {
$value = match ($type) {
'int', 'integer' => (int) $raw_value,
'bool', 'boolean' => (bool) $raw_value,
'float', 'double', 'real' => (float) $raw_value,
'str', 'string' => (string) $raw_value,
'null' => null,
default => throw new RuntimeException('The option type must have a value of int, integer, bool, or boolean.'),
};
} elseif (strtolower($value) === 'false') {
$value = false;
} elseif (strtolower($value) === 'true') {
$value = true;
} elseif (strtolower($value) === 'null') {
$value = null;
}
$data->set($key, $value);
if ($this->writeYamlFile($filename, $data)) {
$this->output->writeln("<info>The value for key '$key' was set to '$raw_value' (" . gettype($value) . ") in $filename.</info>");
return 0;
}
return 1;
}
}