Blame view

vendor/symfony/console/Helper/SymfonyQuestionHelper.php 3.01 KB
ad2e91f7   Mihail   move multyparser ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
  <?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\Helper;
  
  use Symfony\Component\Console\Input\InputInterface;
  use Symfony\Component\Console\Output\OutputInterface;
  use Symfony\Component\Console\Question\ChoiceQuestion;
  use Symfony\Component\Console\Question\ConfirmationQuestion;
  use Symfony\Component\Console\Question\Question;
  use Symfony\Component\Console\Style\SymfonyStyle;
  
  /**
   * Symfony Style Guide compliant question helper.
   *
   * @author Kevin Bond <kevinbond@gmail.com>
   */
  class SymfonyQuestionHelper extends QuestionHelper
  {
      /**
       * {@inheritdoc}
       */
      public function ask(InputInterface $input, OutputInterface $output, Question $question)
      {
          $validator = $question->getValidator();
          $question->setValidator(function ($value) use ($validator) {
              if (null !== $validator && is_callable($validator)) {
                  $value = $validator($value);
              }
  
              // make required
              if (!is_array($value) && !is_bool($value) && 0 === strlen($value)) {
                  throw new \Exception('A value is required.');
              }
  
              return $value;
          });
  
          return parent::ask($input, $output, $question);
      }
  
      /**
       * {@inheritdoc}
       */
      protected function writePrompt(OutputInterface $output, Question $question)
      {
          $text = $question->getQuestion();
          $default = $question->getDefault();
  
          switch (true) {
              case null === $default:
                  $text = sprintf(' <info>%s</info>:', $text);
  
                  break;
  
              case $question instanceof ConfirmationQuestion:
                  $text = sprintf(' <info>%s (yes/no)</info> [<comment>%s</comment>]:', $text, $default ? 'yes' : 'no');
  
                  break;
  
              case $question instanceof ChoiceQuestion:
                  $choices = $question->getChoices();
                  $text = sprintf(' <info>%s</info> [<comment>%s</comment>]:', $text, $choices[$default]);
  
                  break;
  
              default:
                  $text = sprintf(' <info>%s</info> [<comment>%s</comment>]:', $text, $default);
          }
  
          $output->writeln($text);
  
          if ($question instanceof ChoiceQuestion) {
              $width = max(array_map('strlen', array_keys($question->getChoices())));
  
              foreach ($question->getChoices() as $key => $value) {
                  $output->writeln(sprintf("  [<comment>%-${width}s</comment>] %s", $key, $value));
              }
          }
  
          $output->write(' > ');
      }
  
      /**
       * {@inheritdoc}
       */
      protected function writeError(OutputInterface $output, \Exception $error)
      {
          if ($output instanceof SymfonyStyle) {
              $output->newLine();
              $output->error($error->getMessage());
  
              return;
          }
  
          parent::writeError($output, $error);
      }
  }