統計
| ブランチ: | リビジョン:

pictcode / lib / Cake / Console / Command / CompletionShell.php @ 0b1b8047

履歴 | 表示 | アノテート | ダウンロード (3.562 KB)

1
<?php
2
/**
3
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
4
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
5
 *
6
 * Licensed under The MIT License
7
 * For full copyright and license information, please see the LICENSE.txt
8
 * Redistributions of files must retain the above copyright notice.
9
 *
10
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
11
 * @link          http://cakephp.org CakePHP Project
12
 * @package       Cake.Console.Command
13
 * @since         CakePHP v 2.5
14
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
15
 */
16

    
17
App::uses('AppShell', 'Console/Command');
18

    
19
/**
20
 * Provide command completion shells such as bash.
21
 * 
22
 * @package       Cake.Console.Command
23
 */
24
class CompletionShell extends AppShell {
25

    
26
/**
27
 * Contains tasks to load and instantiate
28
 *
29
 * @var array
30
 */
31
        public $tasks = array('Command');
32

    
33
/**
34
 * Echo no header by overriding the startup method
35
 *
36
 * @return void
37
 */
38
        public function startup() {
39
        }
40

    
41
/**
42
 * Not called by the autocomplete shell - this is for curious users
43
 *
44
 * @return void
45
 */
46
        public function main() {
47
                return $this->out($this->getOptionParser()->help());
48
        }
49

    
50
/**
51
 * list commands
52
 *
53
 * @return void
54
 */
55
        public function commands() {
56
                $options = $this->Command->commands();
57
                return $this->_output($options);
58
        }
59

    
60
/**
61
 * list options for the named command
62
 *
63
 * @return void
64
 */
65
        public function options() {
66
                $commandName = '';
67
                if (!empty($this->args[0])) {
68
                        $commandName = $this->args[0];
69
                }
70
                $options = $this->Command->options($commandName);
71

    
72
                return $this->_output($options);
73
        }
74

    
75
/**
76
 * list subcommands for the named command
77
 *
78
 * @return void
79
 */
80
        public function subCommands() {
81
                if (!$this->args) {
82
                        return $this->_output();
83
                }
84

    
85
                $options = $this->Command->subCommands($this->args[0]);
86
                return $this->_output($options);
87
        }
88

    
89
/**
90
 * Guess autocomplete from the whole argument string
91
 * 
92
 * @return void
93
 */
94
        public function fuzzy() {
95
                return $this->_output();
96
        }
97

    
98
/**
99
 * Gets the option parser instance and configures it.
100
 *
101
 * @return ConsoleOptionParser
102
 */
103
        public function getOptionParser() {
104
                $parser = parent::getOptionParser();
105

    
106
                $parser->description(
107
                        __d('cake_console', 'Used by shells like bash to autocomplete command name, options and arguments')
108
                )->addSubcommand('commands', array(
109
                        'help' => __d('cake_console', 'Output a list of available commands'),
110
                        'parser' => array(
111
                                'description' => __d('cake_console', 'List all availables'),
112
                                'arguments' => array(
113
                                )
114
                        )
115
                ))->addSubcommand('subcommands', array(
116
                        'help' => __d('cake_console', 'Output a list of available subcommands'),
117
                        'parser' => array(
118
                                'description' => __d('cake_console', 'List subcommands for a command'),
119
                                'arguments' => array(
120
                                        'command' => array(
121
                                                'help' => __d('cake_console', 'The command name'),
122
                                                'required' => true,
123
                                        )
124
                                )
125
                        )
126
                ))->addSubcommand('options', array(
127
                        'help' => __d('cake_console', 'Output a list of available options'),
128
                        'parser' => array(
129
                                'description' => __d('cake_console', 'List options'),
130
                                'arguments' => array(
131
                                        'command' => array(
132
                                                'help' => __d('cake_console', 'The command name'),
133
                                                'required' => false,
134
                                        )
135
                                )
136
                        )
137
                ))->epilog(
138
                        __d('cake_console', 'This command is not intended to be called manually')
139
                );
140

    
141
                return $parser;
142
        }
143

    
144
/**
145
 * Emit results as a string, space delimited
146
 *
147
 * @param array $options The options to output
148
 * @return void
149
 */
150
        protected function _output($options = array()) {
151
                if ($options) {
152
                        return $this->out(implode($options, ' '));
153
                }
154
        }
155
}