annotate vendor/symfony/console/Input/Input.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Symfony package.
Chris@0 5 *
Chris@0 6 * (c) Fabien Potencier <fabien@symfony.com>
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Symfony\Component\Console\Input;
Chris@0 13
Chris@0 14 use Symfony\Component\Console\Exception\InvalidArgumentException;
Chris@0 15 use Symfony\Component\Console\Exception\RuntimeException;
Chris@0 16
Chris@0 17 /**
Chris@0 18 * Input is the base class for all concrete Input classes.
Chris@0 19 *
Chris@0 20 * Three concrete classes are provided by default:
Chris@0 21 *
Chris@0 22 * * `ArgvInput`: The input comes from the CLI arguments (argv)
Chris@0 23 * * `StringInput`: The input is provided as a string
Chris@0 24 * * `ArrayInput`: The input is provided as an array
Chris@0 25 *
Chris@0 26 * @author Fabien Potencier <fabien@symfony.com>
Chris@0 27 */
Chris@0 28 abstract class Input implements InputInterface, StreamableInputInterface
Chris@0 29 {
Chris@0 30 protected $definition;
Chris@0 31 protected $stream;
Chris@17 32 protected $options = [];
Chris@17 33 protected $arguments = [];
Chris@0 34 protected $interactive = true;
Chris@0 35
Chris@0 36 public function __construct(InputDefinition $definition = null)
Chris@0 37 {
Chris@0 38 if (null === $definition) {
Chris@0 39 $this->definition = new InputDefinition();
Chris@0 40 } else {
Chris@0 41 $this->bind($definition);
Chris@0 42 $this->validate();
Chris@0 43 }
Chris@0 44 }
Chris@0 45
Chris@0 46 /**
Chris@0 47 * {@inheritdoc}
Chris@0 48 */
Chris@0 49 public function bind(InputDefinition $definition)
Chris@0 50 {
Chris@17 51 $this->arguments = [];
Chris@17 52 $this->options = [];
Chris@0 53 $this->definition = $definition;
Chris@0 54
Chris@0 55 $this->parse();
Chris@0 56 }
Chris@0 57
Chris@0 58 /**
Chris@0 59 * Processes command line arguments.
Chris@0 60 */
Chris@0 61 abstract protected function parse();
Chris@0 62
Chris@0 63 /**
Chris@0 64 * {@inheritdoc}
Chris@0 65 */
Chris@0 66 public function validate()
Chris@0 67 {
Chris@0 68 $definition = $this->definition;
Chris@0 69 $givenArguments = $this->arguments;
Chris@0 70
Chris@0 71 $missingArguments = array_filter(array_keys($definition->getArguments()), function ($argument) use ($definition, $givenArguments) {
Chris@18 72 return !\array_key_exists($argument, $givenArguments) && $definition->getArgument($argument)->isRequired();
Chris@0 73 });
Chris@0 74
Chris@17 75 if (\count($missingArguments) > 0) {
Chris@0 76 throw new RuntimeException(sprintf('Not enough arguments (missing: "%s").', implode(', ', $missingArguments)));
Chris@0 77 }
Chris@0 78 }
Chris@0 79
Chris@0 80 /**
Chris@0 81 * {@inheritdoc}
Chris@0 82 */
Chris@0 83 public function isInteractive()
Chris@0 84 {
Chris@0 85 return $this->interactive;
Chris@0 86 }
Chris@0 87
Chris@0 88 /**
Chris@0 89 * {@inheritdoc}
Chris@0 90 */
Chris@0 91 public function setInteractive($interactive)
Chris@0 92 {
Chris@0 93 $this->interactive = (bool) $interactive;
Chris@0 94 }
Chris@0 95
Chris@0 96 /**
Chris@0 97 * {@inheritdoc}
Chris@0 98 */
Chris@0 99 public function getArguments()
Chris@0 100 {
Chris@0 101 return array_merge($this->definition->getArgumentDefaults(), $this->arguments);
Chris@0 102 }
Chris@0 103
Chris@0 104 /**
Chris@0 105 * {@inheritdoc}
Chris@0 106 */
Chris@0 107 public function getArgument($name)
Chris@0 108 {
Chris@0 109 if (!$this->definition->hasArgument($name)) {
Chris@0 110 throw new InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name));
Chris@0 111 }
Chris@0 112
Chris@0 113 return isset($this->arguments[$name]) ? $this->arguments[$name] : $this->definition->getArgument($name)->getDefault();
Chris@0 114 }
Chris@0 115
Chris@0 116 /**
Chris@0 117 * {@inheritdoc}
Chris@0 118 */
Chris@0 119 public function setArgument($name, $value)
Chris@0 120 {
Chris@0 121 if (!$this->definition->hasArgument($name)) {
Chris@0 122 throw new InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name));
Chris@0 123 }
Chris@0 124
Chris@0 125 $this->arguments[$name] = $value;
Chris@0 126 }
Chris@0 127
Chris@0 128 /**
Chris@0 129 * {@inheritdoc}
Chris@0 130 */
Chris@0 131 public function hasArgument($name)
Chris@0 132 {
Chris@0 133 return $this->definition->hasArgument($name);
Chris@0 134 }
Chris@0 135
Chris@0 136 /**
Chris@0 137 * {@inheritdoc}
Chris@0 138 */
Chris@0 139 public function getOptions()
Chris@0 140 {
Chris@0 141 return array_merge($this->definition->getOptionDefaults(), $this->options);
Chris@0 142 }
Chris@0 143
Chris@0 144 /**
Chris@0 145 * {@inheritdoc}
Chris@0 146 */
Chris@0 147 public function getOption($name)
Chris@0 148 {
Chris@0 149 if (!$this->definition->hasOption($name)) {
Chris@0 150 throw new InvalidArgumentException(sprintf('The "%s" option does not exist.', $name));
Chris@0 151 }
Chris@0 152
Chris@18 153 return \array_key_exists($name, $this->options) ? $this->options[$name] : $this->definition->getOption($name)->getDefault();
Chris@0 154 }
Chris@0 155
Chris@0 156 /**
Chris@0 157 * {@inheritdoc}
Chris@0 158 */
Chris@0 159 public function setOption($name, $value)
Chris@0 160 {
Chris@0 161 if (!$this->definition->hasOption($name)) {
Chris@0 162 throw new InvalidArgumentException(sprintf('The "%s" option does not exist.', $name));
Chris@0 163 }
Chris@0 164
Chris@0 165 $this->options[$name] = $value;
Chris@0 166 }
Chris@0 167
Chris@0 168 /**
Chris@0 169 * {@inheritdoc}
Chris@0 170 */
Chris@0 171 public function hasOption($name)
Chris@0 172 {
Chris@0 173 return $this->definition->hasOption($name);
Chris@0 174 }
Chris@0 175
Chris@0 176 /**
Chris@0 177 * Escapes a token through escapeshellarg if it contains unsafe chars.
Chris@0 178 *
Chris@0 179 * @param string $token
Chris@0 180 *
Chris@0 181 * @return string
Chris@0 182 */
Chris@0 183 public function escapeToken($token)
Chris@0 184 {
Chris@0 185 return preg_match('{^[\w-]+$}', $token) ? $token : escapeshellarg($token);
Chris@0 186 }
Chris@0 187
Chris@0 188 /**
Chris@0 189 * {@inheritdoc}
Chris@0 190 */
Chris@0 191 public function setStream($stream)
Chris@0 192 {
Chris@0 193 $this->stream = $stream;
Chris@0 194 }
Chris@0 195
Chris@0 196 /**
Chris@0 197 * {@inheritdoc}
Chris@0 198 */
Chris@0 199 public function getStream()
Chris@0 200 {
Chris@0 201 return $this->stream;
Chris@0 202 }
Chris@0 203 }