You are here

InputOption.php in Zircon Profile 8

Same filename and directory in other branches
  1. 8.0 vendor/symfony/console/Input/InputOption.php

File

vendor/symfony/console/Input/InputOption.php
View source
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace Symfony\Component\Console\Input;


/**
 * Represents a command line option.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class InputOption {
  const VALUE_NONE = 1;
  const VALUE_REQUIRED = 2;
  const VALUE_OPTIONAL = 4;
  const VALUE_IS_ARRAY = 8;
  private $name;
  private $shortcut;
  private $mode;
  private $default;
  private $description;

  /**
   * Constructor.
   *
   * @param string       $name        The option name
   * @param string|array $shortcut    The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts
   * @param int          $mode        The option mode: One of the VALUE_* constants
   * @param string       $description A description text
   * @param mixed        $default     The default value (must be null for self::VALUE_REQUIRED or self::VALUE_NONE)
   *
   * @throws \InvalidArgumentException If option mode is invalid or incompatible
   */
  public function __construct($name, $shortcut = null, $mode = null, $description = '', $default = null) {
    if (0 === strpos($name, '--')) {
      $name = substr($name, 2);
    }
    if (empty($name)) {
      throw new \InvalidArgumentException('An option name cannot be empty.');
    }
    if (empty($shortcut)) {
      $shortcut = null;
    }
    if (null !== $shortcut) {
      if (is_array($shortcut)) {
        $shortcut = implode('|', $shortcut);
      }
      $shortcuts = preg_split('{(\\|)-?}', ltrim($shortcut, '-'));
      $shortcuts = array_filter($shortcuts);
      $shortcut = implode('|', $shortcuts);
      if (empty($shortcut)) {
        throw new \InvalidArgumentException('An option shortcut cannot be empty.');
      }
    }
    if (null === $mode) {
      $mode = self::VALUE_NONE;
    }
    elseif (!is_int($mode) || $mode > 15 || $mode < 1) {
      throw new \InvalidArgumentException(sprintf('Option mode "%s" is not valid.', $mode));
    }
    $this->name = $name;
    $this->shortcut = $shortcut;
    $this->mode = $mode;
    $this->description = $description;
    if ($this
      ->isArray() && !$this
      ->acceptValue()) {
      throw new \InvalidArgumentException('Impossible to have an option mode VALUE_IS_ARRAY if the option does not accept a value.');
    }
    $this
      ->setDefault($default);
  }

  /**
   * Returns the option shortcut.
   *
   * @return string The shortcut
   */
  public function getShortcut() {
    return $this->shortcut;
  }

  /**
   * Returns the option name.
   *
   * @return string The name
   */
  public function getName() {
    return $this->name;
  }

  /**
   * Returns true if the option accepts a value.
   *
   * @return bool true if value mode is not self::VALUE_NONE, false otherwise
   */
  public function acceptValue() {
    return $this
      ->isValueRequired() || $this
      ->isValueOptional();
  }

  /**
   * Returns true if the option requires a value.
   *
   * @return bool true if value mode is self::VALUE_REQUIRED, false otherwise
   */
  public function isValueRequired() {
    return self::VALUE_REQUIRED === (self::VALUE_REQUIRED & $this->mode);
  }

  /**
   * Returns true if the option takes an optional value.
   *
   * @return bool true if value mode is self::VALUE_OPTIONAL, false otherwise
   */
  public function isValueOptional() {
    return self::VALUE_OPTIONAL === (self::VALUE_OPTIONAL & $this->mode);
  }

  /**
   * Returns true if the option can take multiple values.
   *
   * @return bool true if mode is self::VALUE_IS_ARRAY, false otherwise
   */
  public function isArray() {
    return self::VALUE_IS_ARRAY === (self::VALUE_IS_ARRAY & $this->mode);
  }

  /**
   * Sets the default value.
   *
   * @param mixed $default The default value
   *
   * @throws \LogicException When incorrect default value is given
   */
  public function setDefault($default = null) {
    if (self::VALUE_NONE === (self::VALUE_NONE & $this->mode) && null !== $default) {
      throw new \LogicException('Cannot set a default value when using InputOption::VALUE_NONE mode.');
    }
    if ($this
      ->isArray()) {
      if (null === $default) {
        $default = array();
      }
      elseif (!is_array($default)) {
        throw new \LogicException('A default value for an array option must be an array.');
      }
    }
    $this->default = $this
      ->acceptValue() ? $default : false;
  }

  /**
   * Returns the default value.
   *
   * @return mixed The default value
   */
  public function getDefault() {
    return $this->default;
  }

  /**
   * Returns the description text.
   *
   * @return string The description text
   */
  public function getDescription() {
    return $this->description;
  }

  /**
   * Checks whether the given option equals this one.
   *
   * @param InputOption $option option to compare
   *
   * @return bool
   */
  public function equals(InputOption $option) {
    return $option
      ->getName() === $this
      ->getName() && $option
      ->getShortcut() === $this
      ->getShortcut() && $option
      ->getDefault() === $this
      ->getDefault() && $option
      ->isArray() === $this
      ->isArray() && $option
      ->isValueRequired() === $this
      ->isValueRequired() && $option
      ->isValueOptional() === $this
      ->isValueOptional();
  }

}

Classes

Namesort descending Description
InputOption Represents a command line option.