Allow to set configuration values directly in the command line

This commit is contained in:
Stéphane Goetz 2017-11-05 23:56:46 +01:00
parent 55ee848e32
commit 8e7340da3d
3 changed files with 50 additions and 9 deletions

View File

@ -2,10 +2,51 @@
use Symfony\Component\Console\Command\Command as SymfonyCommand; use Symfony\Component\Console\Command\Command as SymfonyCommand;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Todaymade\Daux\Daux; use Todaymade\Daux\Daux;
class DauxCommand extends SymfonyCommand class DauxCommand extends SymfonyCommand
{ {
protected function configure()
{
$this
->addOption('configuration', 'c', InputOption::VALUE_REQUIRED, 'Configuration file')
->addOption('value', null, InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Set different configuration values')
->addOption('source', 's', InputOption::VALUE_REQUIRED, 'Where to take the documentation from')
->addOption('processor', 'p', InputOption::VALUE_REQUIRED, 'Manipulations on the tree');
}
private function setValue(&$array, $key, $value)
{
if (is_null($key)) {
return $array = $value;
}
$keys = explode('.', $key);
while (count($keys) > 1) {
$key = array_shift($keys);
if (! isset($array[$key]) || ! is_array($array[$key])) {
$array[$key] = [];
}
$array = &$array[$key];
}
$array[array_shift($keys)] = $value;
return $array;
}
private function applyConfiguration(array $options, Daux $daux)
{
$values = array_map(
function ($value) {
return array_map("trim", explode('=', $value));
},
$options
);
foreach ($values as $value) {
$this->setValue($daux->options, $value[0], $value[1]);
}
}
protected function prepareDaux(InputInterface $input) protected function prepareDaux(InputInterface $input)
{ {
$daux = new Daux(Daux::STATIC_MODE); $daux = new Daux(Daux::STATIC_MODE);
@ -30,6 +71,10 @@ class DauxCommand extends SymfonyCommand
$daux->getParams()['confluence']['delete'] = true; $daux->getParams()['confluence']['delete'] = true;
} }
if ($input->hasOption('value')) {
$this->applyConfiguration($input->getOption('value'), $daux);
}
return $daux; return $daux;
} }
} }

View File

@ -11,22 +11,21 @@ class Generate extends DauxCommand
{ {
protected function configure() protected function configure()
{ {
parent::configure();
$description = 'Destination folder, relative to the working directory'; $description = 'Destination folder, relative to the working directory';
$this $this
->setName('generate') ->setName('generate')
->setDescription('Generate documentation') ->setDescription('Generate documentation')
->addOption('configuration', 'c', InputOption::VALUE_REQUIRED, 'Configuration file')
->addOption('source', 's', InputOption::VALUE_REQUIRED, 'Where to take the documentation from')
->addOption('format', 'f', InputOption::VALUE_REQUIRED, 'Output format, html or confluence', 'html') ->addOption('format', 'f', InputOption::VALUE_REQUIRED, 'Output format, html or confluence', 'html')
->addOption('processor', 'p', InputOption::VALUE_REQUIRED, 'Manipulations on the tree')
->addOption('themes', 't', InputOption::VALUE_REQUIRED, 'Set a different themes directory')
// Confluence format only // Confluence format only
->addOption('delete', null, InputOption::VALUE_NONE, 'Delete pages not linked to a documentation page (confluence)') ->addOption('delete', null, InputOption::VALUE_NONE, 'Delete pages not linked to a documentation page (confluence)')
// HTML Format only // HTML Format only
->addOption('themes', 't', InputOption::VALUE_REQUIRED, 'Set a different themes directory')
->addOption('destination', 'd', InputOption::VALUE_REQUIRED, $description, 'static') ->addOption('destination', 'd', InputOption::VALUE_REQUIRED, $description, 'static')
->addOption('search', null, InputOption::VALUE_NONE, 'Generate full text search'); ->addOption('search', null, InputOption::VALUE_NONE, 'Generate full text search');
} }

View File

@ -13,15 +13,12 @@ class Serve extends DauxCommand
{ {
protected function configure() protected function configure()
{ {
parent::configure();
$this $this
->setName('serve') ->setName('serve')
->setDescription('Serve documentation') ->setDescription('Serve documentation')
->addOption('configuration', 'c', InputOption::VALUE_REQUIRED, 'Configuration file')
->addOption('source', 's', InputOption::VALUE_REQUIRED, 'Where to take the documentation from')
->addOption('processor', 'p', InputOption::VALUE_REQUIRED, 'Manipulations on the tree')
->addOption('themes', 't', InputOption::VALUE_REQUIRED, 'Set a different themes directory')
// Serve the current documentation // Serve the current documentation
->addOption('serve', null, InputOption::VALUE_NONE, 'Serve the current directory') ->addOption('serve', null, InputOption::VALUE_NONE, 'Serve the current directory')
->addOption('host', null, InputOption::VALUE_REQUIRED, 'The host to serve on', 'localhost') ->addOption('host', null, InputOption::VALUE_REQUIRED, 'The host to serve on', 'localhost')