$value) { $this->{'_' . $key} = $value; } } else { $this->_name = $name; $this->_help = $help; $this->_required = $required; $this->_choices = $choices; } } /** * Get the value of the name attribute. * * @return string Value of this->_name. */ public function name() { return $this->_name; } /** * Generate the help for this this argument. * * @param int $width The width to make the name of the option. * @return string */ public function help($width = 0) { $name = $this->_name; if (strlen($name) < $width) { $name = str_pad($name, $width, ' '); } $optional = ''; if (!$this->isRequired()) { $optional = __(' (optional)'); } if (!empty($this->_choices)) { $optional .= sprintf(__(' (choices: %s)'), implode('|', $this->_choices)); } return sprintf('%s%s%s', $name, $this->_help, $optional); } /** * Get the usage value for this argument * * @return string */ public function usage() { $name = $this->_name; if (!empty($this->_choices)) { $name = implode('|', $this->_choices); } $name = '<' . $name . '>'; if (!$this->isRequired()) { $name = '[' . $name . ']'; } return $name; } /** * Check if this argument is a required argument * * @return boolean */ public function isRequired() { return (bool) $this->_required; } /** * Check that $value is a valid choice for this argument. * * @return boolean */ public function validChoice($value) { if (empty($this->_choices)) { return true; } if (!in_array($value, $this->_choices)) { throw new InvalidArgumentException(sprintf( __('"%s" is not a valid value for %s. Please use one of "%s"'), $value, $this->_name, implode(', ', $this->_choices) )); } return true; } /** * Append this argument to the passed in SimpleXml object. * * @param SimpleXmlElement The parent element. * @return SimpleXmlElement The parent with this argument appended. */ public function xml(SimpleXmlElement $parent) { $option = $parent->addChild('argument'); $option->addAttribute('name', $this->_name); $option->addAttribute('help', $this->_help); $option->addAttribute('required', $this->isRequired()); $choices = $option->addChild('choices'); foreach ($this->_choices as $valid) { $choices->addChild('choice', $valid); } return $parent; } }