Browse Source

[Console] refactored helpers

Fabien Potencier 15 years ago
parent
commit
5592580b32

+ 6 - 42
src/Symfony/Components/Console/Command/Command.php

@@ -8,9 +8,6 @@ use Symfony\Components\Console\Input\InputArgument;
 use Symfony\Components\Console\Input\InputInterface;
 use Symfony\Components\Console\Output\OutputInterface;
 use Symfony\Components\Console\Application;
-use Symfony\Components\Console\Helper\HelperSet;
-use Symfony\Components\Console\Helper\FormatterHelper;
-use Symfony\Components\Console\Helper\InteractHelper;
 
 /*
  * This file is part of the symfony framework.
@@ -45,26 +42,15 @@ class Command
   /**
    * Constructor.
    *
-   * @param string          $name
-   * @param HelperSet       $helperSet A helper set instance
+   * @param string $name The name of the command
    */
-  public function __construct($name = null, HelperSet $helperSet = null)
+  public function __construct($name = null)
   {
     $this->definition = new InputDefinition();
     $this->ignoreValidationErrors = false;
     $this->applicationDefinitionMerged = false;
     $this->aliases = array();
 
-    if (null === $helperSet)
-    {
-      $helperSet = new HelperSet(array(
-        new FormatterHelper(),
-        new InteractHelper(),
-      ));
-    }
-
-    $this->setHelperSet($helperSet);
-
     if (null !== $name)
     {
       $this->setName($name);
@@ -403,39 +389,17 @@ class Command
   }
 
   /**
-   * Set a helper set to be used with the command.
-   *
-   * @param HelperSet $helperSet The helper set
-   */
-  public function setHelperSet(HelperSet $helperSet)
-  {
-    $this->helperSet = $helperSet;
-
-    $helperSet->setCommand($this);
-  }
-
-  /**
-   * Get the helper set associated with the command
-   *
-   * @return HelperSet
-   */
-  public function getHelperSet()
-  {
-    return $this->helperSet;
-  }
-
-  /**
-   * Gets a helper value.
+   * Gets a helper instance by name.
    *
-   * @param string $name  The helper name
+   * @param string $name The helper name
    *
    * @return mixed The helper value
    *
    * @throws \InvalidArgumentException if the helper is not defined
    */
-  public function __get($name)
+  protected function getHelper($name)
   {
-    return $this->helperSet->get($name);
+    return $this->application->getHelperSet()->get($name);
   }
 
   /**

+ 0 - 9
src/Symfony/Components/Console/Helper/FormatterHelper.php

@@ -20,14 +20,6 @@ namespace Symfony\Components\Console\Helper;
  */
 class FormatterHelper extends Helper
 {
-  /**
-   * Returns the helper's canonical name
-   */
-  public function getName()
-  {
-    return 'formatter';
-  }
-
   /**
    * Formats a message within a section.
    *
@@ -95,4 +87,3 @@ class FormatterHelper extends Helper
     return 'formatter';
   }
 }
-

+ 4 - 4
src/Symfony/Components/Console/Helper/Helper.php

@@ -3,19 +3,19 @@
 namespace Symfony\Components\Console\Helper;
 
 /*
- * This file is part of the symfony package.
+ * This file is part of the symfony framework.
  *
  * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
  */
 
 /**
  * Helper is the base class for all helper classes.
  *
  * @package    symfony
- * @subpackage templating
+ * @subpackage console
  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
  */
 abstract class Helper implements HelperInterface

+ 11 - 11
src/Symfony/Components/Console/Helper/HelperInterface.php

@@ -3,30 +3,23 @@
 namespace Symfony\Components\Console\Helper;
 
 /*
- * This file is part of the symfony package.
+ * This file is part of the symfony framework.
  *
  * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
  */
 
 /**
  * HelperInterface is the interface all helpers must implement.
  *
  * @package    symfony
- * @subpackage templating
+ * @subpackage console
  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
  */
 interface HelperInterface
 {
-  /**
-   * Returns the canonical name of this helper.
-   *
-   * @return string The canonical name
-   */
-  function getName();
-
   /**
    * Sets the helper set associated with this helper.
    *
@@ -40,4 +33,11 @@ interface HelperInterface
    * @return HelperSet A HelperSet instance
    */
   function getHelperSet();
+
+  /**
+   * Returns the canonical name of this helper.
+   *
+   * @return string The canonical name
+   */
+  function getName();
 }

+ 4 - 5
src/Symfony/Components/Console/Helper/HelperSet.php

@@ -5,19 +5,19 @@ namespace Symfony\Components\Console\Helper;
 use Symfony\Components\Console\Command\Command;
 
 /*
- * This file is part of the symfony package.
+ * This file is part of the symfony framework.
  *
  * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
  */
 
 /**
  * HelperSet represents a set of helpers to be used with a command.
  *
  * @package    symfony
- * @subpackage templating
+ * @subpackage console
  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
  */
 class HelperSet
@@ -102,4 +102,3 @@ class HelperSet
     return $this->command;
   }
 }
-

+ 0 - 119
src/Symfony/Components/Console/Helper/InteractHelper.php

@@ -1,119 +0,0 @@
-<?php
-
-namespace Symfony\Components\Console\Helper;
-
-use Symfony\Components\Console\Output\OutputInterface;
-
-/*
- * This file is part of the symfony framework.
- *
- * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
- *
- * This source file is subject to the MIT license that is bundled
- * with this source code in the file LICENSE.
- */
-
-/**
- * The Interact class provides helpers to interact with the user.
- *
- * @package    symfony
- * @subpackage cli
- * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
- */
-class InteractHelper extends Helper
-{
-  /**
-   * Returns the helper's canonical name
-   */
-  public function getName()
-  {
-    return 'interact';
-  }
-
-  /**
-   * Asks a question to the user.
-   *
-   * @param OutputInterface $output
-   * @param string|array    $question The question to ask
-   * @param string          $default  The default answer if none is given by the user
-   *
-   * @param string The user answer
-   */
-  public function ask(OutputInterface $output, $question, $default = null)
-  {
-    // @codeCoverageIgnoreStart
-    $output->write($question);
-
-    $ret = trim(fgets(STDIN));
-
-    return $ret ? $ret : $default;
-    // @codeCoverageIgnoreEnd
-  }
-
-  /**
-   * Asks a confirmation to the user.
-   *
-   * The question will be asked until the user answer by nothing, yes, or no.
-   *
-   * @param OutputInterface $output
-   * @param string|array    $question The question to ask
-   * @param Boolean         $default  The default answer if the user enters nothing
-   *
-   * @param Boolean true if the user has confirmed, false otherwise
-   */
-  public function askConfirmation(OutputInterface $output, $question, $default = true)
-  {
-    // @codeCoverageIgnoreStart
-    $answer = 'z';
-    while ($answer && !in_array(strtolower($answer[0]), array('y', 'n')))
-    {
-      $answer = $this->ask($output, $question);
-    }
-
-    if (false === $default)
-    {
-      return $answer && 'y' == strtolower($answer[0]);
-    }
-    else
-    {
-      return !$answer || 'y' == strtolower($answer[0]);
-    }
-    // @codeCoverageIgnoreEnd
-  }
-
-  /**
-   * Asks for a value and validates the response.
-   *
-   * @param OutputInterface $output
-   * @param string|array    $question
-   * @param Closure         $validator
-   * @param integer         $attempts Max number of times to ask before giving up (false by default, which means infinite)
-   *
-   * @return mixed
-   */
-  public function askAndValidate(OutputInterface $output, $question, \Closure $validator, $attempts = false)
-  {
-    // @codeCoverageIgnoreStart
-    $error = null;
-    while (false === $attempts || $attempts--)
-    {
-      if (null !== $error)
-      {
-        $output->write($this->getHelperSet()->get('formatter')->formatBlock($error->getMessage(), 'error'));
-      }
-
-      $value = $this->ask($output, $question, null);
-
-      try
-      {
-        return $validator($value);
-      }
-      catch (\Exception $error)
-      {
-      }
-    }
-
-    throw $error;
-    // @codeCoverageIgnoreEnd
-  }
-}