Browse Source

Updating ConsoleOptionParser to be able to use a subcommandSort property.
The subcommandSort property is set to true by default to allow for BC.

Ronald Chaplin 8 years ago
parent
commit
9e568d73cd

+ 35 - 3
src/Console/ConsoleOptionParser.php

@@ -121,6 +121,13 @@ class ConsoleOptionParser
     protected $_subcommands = [];
 
     /**
+     * Subcommand sorting option
+     *
+     * @var bool
+     */
+    protected $_subcommandSort = true;
+
+    /**
      * Command name.
      *
      * @var string
@@ -408,6 +415,32 @@ class ConsoleOptionParser
     }
 
     /**
+     * Gets the subcommandSort Property
+     *
+     * @return bool
+     */
+    public function getSubcommandSort()
+    {
+        return $this->_subcommandSort;
+    }
+
+    /**
+     * Sets the subcommandSort property.
+     *
+     * @param bool $sort Whether or not the ConsoleOptionParser should sort subcommands
+     *
+     * @return $this
+     */
+    public function setSubcommandSort($sort)
+    {
+        if ($sort !== true) {
+            $this->_subcommandSort = false;
+        }
+
+        return $this;
+    }
+
+    /**
      * Add an option to the option parser. Options allow you to define optional or required
      * parameters for your console application. Options are defined by the parameters they use.
      *
@@ -576,10 +609,9 @@ class ConsoleOptionParser
      *
      * @param \Cake\Console\ConsoleInputSubcommand|string $name Name of the subcommand. Will also accept an instance of ConsoleInputSubcommand
      * @param array $options Array of params, see above.
-     * @param boolean $sort Optional sorting of the subcommand
      * @return $this
      */
-    public function addSubcommand($name, array $options = [], $sort = true)
+    public function addSubcommand($name, array $options = [])
     {
         if ($name instanceof ConsoleInputSubcommand) {
             $command = $name;
@@ -596,7 +628,7 @@ class ConsoleOptionParser
             $command = new ConsoleInputSubcommand($options);
         }
         $this->_subcommands[$name] = $command;
-        if ($sort) {
+        if ($this->_subcommandSort) {
             asort($this->_subcommands);
         }
 

+ 5 - 2
tests/TestCase/Console/ConsoleOptionParserTest.php

@@ -657,8 +657,11 @@ class ConsoleOptionParserTest extends TestCase
     public function testAddSubcommandSort()
     {
         $parser = new ConsoleOptionParser('test', false);
-        $parser->addSubcommand(new ConsoleInputSubcommand('betaTest'), [], false);
-        $parser->addSubcommand(new ConsoleInputSubcommand('alphaTest'), [], false);
+        $this->assertEquals(true, $parser->getSubcommandSort());
+        $parser->setSubcommandSort(false);
+        $this->assertEquals(false, $parser->getSubcommandSort());
+        $parser->addSubcommand(new ConsoleInputSubcommand('betaTest'), []);
+        $parser->addSubcommand(new ConsoleInputSubcommand('alphaTest'), []);
         $result = $parser->subcommands();
         $this->assertCount(2, $result);
         $firstResult = key($result);