pictcode / lib / Cake / Console / ConsoleInputArgument.php @ master
履歴 | 表示 | アノテート | ダウンロード (4.096 KB)
| 1 | 635eef61 | spyder1211 | <?php
 | 
      
|---|---|---|---|
| 2 | /**
 | 
      ||
| 3 |  * ConsoleArgumentOption file
 | 
      ||
| 4 |  *
 | 
      ||
| 5 |  * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 | 
      ||
| 6 |  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | 
      ||
| 7 |  *
 | 
      ||
| 8 |  * Licensed under The MIT License
 | 
      ||
| 9 |  * For full copyright and license information, please see the LICENSE.txt
 | 
      ||
| 10 |  * Redistributions of files must retain the above copyright notice.
 | 
      ||
| 11 |  *
 | 
      ||
| 12 |  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | 
      ||
| 13 |  * @link          http://cakephp.org CakePHP(tm) Project
 | 
      ||
| 14 |  * @since         CakePHP(tm) v 2.0
 | 
      ||
| 15 |  * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 | 
      ||
| 16 |  */
 | 
      ||
| 17 | |||
| 18 | /**
 | 
      ||
| 19 |  * An object to represent a single argument used in the command line.
 | 
      ||
| 20 |  * ConsoleOptionParser creates these when you use addArgument()
 | 
      ||
| 21 |  *
 | 
      ||
| 22 |  * @see ConsoleOptionParser::addArgument()
 | 
      ||
| 23 |  * @package       Cake.Console
 | 
      ||
| 24 |  */
 | 
      ||
| 25 | class ConsoleInputArgument {  | 
      ||
| 26 | |||
| 27 | /**
 | 
      ||
| 28 |  * Name of the argument.
 | 
      ||
| 29 |  *
 | 
      ||
| 30 |  * @var string
 | 
      ||
| 31 |  */
 | 
      ||
| 32 | protected $_name;  | 
      ||
| 33 | |||
| 34 | /**
 | 
      ||
| 35 |  * Help string
 | 
      ||
| 36 |  *
 | 
      ||
| 37 |  * @var string
 | 
      ||
| 38 |  */
 | 
      ||
| 39 | protected $_help;  | 
      ||
| 40 | |||
| 41 | /**
 | 
      ||
| 42 |  * Is this option required?
 | 
      ||
| 43 |  *
 | 
      ||
| 44 |  * @var bool
 | 
      ||
| 45 |  */
 | 
      ||
| 46 | protected $_required;  | 
      ||
| 47 | |||
| 48 | /**
 | 
      ||
| 49 |  * An array of valid choices for this argument.
 | 
      ||
| 50 |  *
 | 
      ||
| 51 |  * @var array
 | 
      ||
| 52 |  */
 | 
      ||
| 53 | protected $_choices;  | 
      ||
| 54 | |||
| 55 | /**
 | 
      ||
| 56 |  * Make a new Input Argument
 | 
      ||
| 57 |  *
 | 
      ||
| 58 |  * @param string|array $name The long name of the option, or an array with all the properties.
 | 
      ||
| 59 |  * @param string $help The help text for this option
 | 
      ||
| 60 |  * @param bool $required Whether this argument is required. Missing required args will trigger exceptions
 | 
      ||
| 61 |  * @param array $choices Valid choices for this option.
 | 
      ||
| 62 |  */
 | 
      ||
| 63 | public function __construct($name, $help = '', $required = false, $choices = array()) {  | 
      ||
| 64 | if (is_array($name) && isset($name['name'])) {  | 
      ||
| 65 | foreach ($name as $key => $value) {  | 
      ||
| 66 | $this->{'_' . $key} = $value;  | 
      ||
| 67 | }  | 
      ||
| 68 |                 } else {
 | 
      ||
| 69 | $this->_name = $name;  | 
      ||
| 70 | $this->_help = $help;  | 
      ||
| 71 | $this->_required = $required;  | 
      ||
| 72 | $this->_choices = $choices;  | 
      ||
| 73 | }  | 
      ||
| 74 | }  | 
      ||
| 75 | |||
| 76 | /**
 | 
      ||
| 77 |  * Get the value of the name attribute.
 | 
      ||
| 78 |  *
 | 
      ||
| 79 |  * @return string Value of this->_name.
 | 
      ||
| 80 |  */
 | 
      ||
| 81 | public function name() {  | 
      ||
| 82 | return $this->_name;  | 
      ||
| 83 | }  | 
      ||
| 84 | |||
| 85 | /**
 | 
      ||
| 86 |  * Generate the help for this argument.
 | 
      ||
| 87 |  *
 | 
      ||
| 88 |  * @param int $width The width to make the name of the option.
 | 
      ||
| 89 |  * @return string
 | 
      ||
| 90 |  */
 | 
      ||
| 91 | public function help($width = 0) {  | 
      ||
| 92 | $name = $this->_name;  | 
      ||
| 93 | if (strlen($name) < $width) {  | 
      ||
| 94 | $name = str_pad($name, $width, ' ');  | 
      ||
| 95 | }  | 
      ||
| 96 | $optional = '';  | 
      ||
| 97 | if (!$this->isRequired()) {  | 
      ||
| 98 | $optional = __d('cake_console', ' <comment>(optional)</comment>');  | 
      ||
| 99 | }  | 
      ||
| 100 | if (!empty($this->_choices)) {  | 
      ||
| 101 | $optional .= __d('cake_console', ' <comment>(choices: %s)</comment>', implode('|', $this->_choices));  | 
      ||
| 102 | }  | 
      ||
| 103 | return sprintf('%s%s%s', $name, $this->_help, $optional);  | 
      ||
| 104 | }  | 
      ||
| 105 | |||
| 106 | /**
 | 
      ||
| 107 |  * Get the usage value for this argument
 | 
      ||
| 108 |  *
 | 
      ||
| 109 |  * @return string
 | 
      ||
| 110 |  */
 | 
      ||
| 111 | public function usage() {  | 
      ||
| 112 | $name = $this->_name;  | 
      ||
| 113 | if (!empty($this->_choices)) {  | 
      ||
| 114 | $name = implode('|', $this->_choices);  | 
      ||
| 115 | }  | 
      ||
| 116 | $name = '<' . $name . '>';  | 
      ||
| 117 | if (!$this->isRequired()) {  | 
      ||
| 118 | $name = '[' . $name . ']';  | 
      ||
| 119 | }  | 
      ||
| 120 | return $name;  | 
      ||
| 121 | }  | 
      ||
| 122 | |||
| 123 | /**
 | 
      ||
| 124 |  * Check if this argument is a required argument
 | 
      ||
| 125 |  *
 | 
      ||
| 126 |  * @return bool
 | 
      ||
| 127 |  */
 | 
      ||
| 128 | public function isRequired() {  | 
      ||
| 129 | return (bool)$this->_required;  | 
      ||
| 130 | }  | 
      ||
| 131 | |||
| 132 | /**
 | 
      ||
| 133 |  * Check that $value is a valid choice for this argument.
 | 
      ||
| 134 |  *
 | 
      ||
| 135 |  * @param string $value The choice to validate.
 | 
      ||
| 136 |  * @return bool
 | 
      ||
| 137 |  * @throws ConsoleException
 | 
      ||
| 138 |  */
 | 
      ||
| 139 | public function validChoice($value) {  | 
      ||
| 140 | if (empty($this->_choices)) {  | 
      ||
| 141 | return true;  | 
      ||
| 142 | }  | 
      ||
| 143 | if (!in_array($value, $this->_choices)) {  | 
      ||
| 144 | throw new ConsoleException(  | 
      ||
| 145 | __d('cake_console', '"%s" is not a valid value for %s. Please use one of "%s"',  | 
      ||
| 146 | $value, $this->_name, implode(', ', $this->_choices)  | 
      ||
| 147 | ));  | 
      ||
| 148 | }  | 
      ||
| 149 | return true;  | 
      ||
| 150 | }  | 
      ||
| 151 | |||
| 152 | /**
 | 
      ||
| 153 |  * Append this arguments XML representation to the passed in SimpleXml object.
 | 
      ||
| 154 |  *
 | 
      ||
| 155 |  * @param SimpleXmlElement $parent The parent element.
 | 
      ||
| 156 |  * @return SimpleXmlElement The parent with this argument appended.
 | 
      ||
| 157 |  */
 | 
      ||
| 158 | public function xml(SimpleXmlElement $parent) {  | 
      ||
| 159 | $option = $parent->addChild('argument');  | 
      ||
| 160 | $option->addAttribute('name', $this->_name);  | 
      ||
| 161 | $option->addAttribute('help', $this->_help);  | 
      ||
| 162 | $option->addAttribute('required', $this->isRequired());  | 
      ||
| 163 | $choices = $option->addChild('choices');  | 
      ||
| 164 | foreach ($this->_choices as $valid) {  | 
      ||
| 165 | $choices->addChild('choice', $valid);  | 
      ||
| 166 | }  | 
      ||
| 167 | return $parent;  | 
      ||
| 168 | }  | 
      ||
| 169 | |||
| 170 | }  |