/** * Build a parser from an array. Uses an array like * * ``` * $spec = [ * 'description' => 'text', * 'epilog' => 'text', * 'arguments' => [ * // list of arguments compatible with addArguments. * ], * 'options' => [ * // list of options compatible with addOptions * ], * 'subcommands' => [ * // list of subcommands to add. * ] * ]; * ``` * * @param array $spec The spec to build the OptionParser with. * @param bool $defaultOptions Whether you want the verbose and quiet options set. * @return $this */ public static function buildFromArray($spec, $defaultOptions = true) { $parser = new ConsoleOptionParser($spec['command'], $defaultOptions); if (!empty($spec['arguments'])) { $parser->addArguments($spec['arguments']); } if (!empty($spec['options'])) { $parser->addOptions($spec['options']); } if (!empty($spec['subcommands'])) { $parser->addSubcommands($spec['subcommands']); } if (!empty($spec['description'])) { $parser->description($spec['description']); } if (!empty($spec['epilog'])) { $parser->epilog($spec['epilog']); } return $parser; }
/** * test adding multiple subcommands * * @return void */ public function testAddSubcommands() { $parser = new ConsoleOptionParser('test', false); $result = $parser->addSubcommands(['initdb' => ['help' => 'Initialize the database'], 'create' => ['help' => 'Create something']]); $this->assertEquals($parser, $result, 'Adding a subcommands is not chainable'); $result = $parser->subcommands(); $this->assertEquals(2, count($result), 'Not enough subcommands'); }