commander-openflighthpc 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f2bd1303f7a91cad5cadac934d35ee270a9b2441db7c37685a669b000f8782b5
4
- data.tar.gz: '004078c3f1ee373463a37430dbc18207747907e12bc2d4b479903e1f08d1f200'
3
+ metadata.gz: 2f44f3e008d2afe4767d93545e1f96bee55eb972e1b8558f6ed214bf18290079
4
+ data.tar.gz: fc44c6aa1a350fe8be8d8ea1a79cd3841dc82b59fb5fab14040f4eaac2e199cd
5
5
  SHA512:
6
- metadata.gz: d2a0c2e988bcec7ce6d0a811777588684652b762c3886a4b7bbb25a79443fe924b8d726e6e576734769cbcf852f0bb1200717a5a509c3e25303846228ef28b7e
7
- data.tar.gz: b62447900fdf781e69886d657c5470dc59ca935daeee043c08308689f5b7f24375535261f3f28f311754943a8ce8efbaf75d04ac4a0e53430f7dfa9cafeca424
6
+ metadata.gz: 2b9a7db7d0cc5f8b08c8e2d894ace171c8a7d8527142c8117eb1705fc563d9504d92ddbe6abb56abc94526a9d2a3fb11f226191aa1f629a9a72a42bd95bc8c98
7
+ data.tar.gz: 55004b7e9ff3f42cbdc5a5d99281d24f9eb88f441bfbc8465fe2ea8792fc817ec8c06ada2a2f0dd66f6820264507fda8ff575941b265faacefa7ab2be32b96e0
data/README.md CHANGED
@@ -115,171 +115,22 @@ require 'rubygems'
115
115
  require 'commander'
116
116
 
117
117
  class MyApplication
118
- include Commander::Methods
119
-
120
- def run
121
- program :name, 'Foo Bar'
122
- program :version, '1.0.0'
123
- program :description, 'Stupid command that prints foo or bar.'
124
-
125
- command :foo do |c|
126
- c.syntax = 'foobar foo'
127
- c.description = 'Displays foo'
128
- c.action do |args, options|
129
- say 'foo'
130
- end
131
- end
132
-
133
- run!
134
- end
135
- end
118
+ extend Commander::CLI
136
119
 
137
- MyApplication.new.run if $0 == __FILE__
138
- ```
139
-
140
- ### Block style
141
-
142
- ```ruby
143
- require 'rubygems'
144
- require 'commander'
145
-
146
- Commander.configure do
147
120
  program :name, 'Foo Bar'
148
121
  program :version, '1.0.0'
149
122
  program :description, 'Stupid command that prints foo or bar.'
150
123
 
151
- # see classic style example for options
152
- end
153
- ```
154
-
155
- ## HighLine
156
-
157
- As mentioned above, the highline gem is imported into the global scope. Here
158
- are some quick examples for how to utilize highline in your commands:
159
-
160
- ```ruby
161
- # Ask for password masked with '*' character
162
- ask("Password: ") { |q| q.echo = "*" }
163
-
164
- # Ask for password
165
- ask("Password: ") { |q| q.echo = false }
166
-
167
- # Ask if the user agrees (yes or no)
168
- agree("Do something?")
169
-
170
- # Asks on a single line (note the space after ':')
171
- ask("Name: ")
172
-
173
- # Asks with new line after "Description:"
174
- ask("Description:")
175
-
176
- # Calls Date#parse to parse the date string passed
177
- ask("Birthday? ", Date)
178
-
179
- # Ensures Integer is within the range specified
180
- ask("Age? ", Integer) { |q| q.in = 0..105 }
181
-
182
- # Asks for a list of strings, converts to array
183
- ask("Fav colors?", Array)
184
- ```
185
-
186
- ## HighLine & Interaction Additions
187
-
188
- In addition to highline's fantastic choice of methods, commander adds the
189
- following methods to simplify common tasks:
190
-
191
- ```ruby
192
- # Ask for password
193
- password
194
-
195
- # Ask for password with specific message and mask character
196
- password "Enter your password please:", '-'
197
-
198
- # Ask for CLASS, which may be any valid class responding to #parse. Date, Time, Array, etc
199
- names = ask_for_array 'Names: '
200
- bday = ask_for_date 'Birthday?: '
201
-
202
- # Simple progress bar (Commander::UI::ProgressBar)
203
- uris = %w[
204
- http://vision-media.ca
205
- http://google.com
206
- http://yahoo.com
207
- ]
208
- progress uris do |uri|
209
- res = open uri
210
- # Do something with response
211
- end
212
-
213
- # 'Log' action to stdout
214
- log "create", "path/to/file.rb"
215
-
216
- # Enable paging of output after this point
217
- enable_paging
218
-
219
- # Ask editor for input (EDITOR environment variable or whichever is available: TextMate, vim, vi, emacs, nano, pico)
220
- ask_editor
221
-
222
- # Ask editor, supplying initial text
223
- ask_editor 'previous data to update'
224
-
225
- # Ask editor, preferring a specific editor
226
- ask_editor 'previous data', 'vim'
227
-
228
- # Choose from an array of elements
229
- choice = choose("Favorite language?", :ruby, :perl, :js)
230
-
231
- # Alter IO for the duration of the block
232
- io new_input, new_output do
233
- new_input_contents = $stdin.read
234
- puts new_input_contents # outputs to new_output stream
235
- end
236
- # $stdin / $stdout reset back to original streams
237
-
238
- # Speech synthesis
239
- speak 'What is your favorite food? '
240
- food = ask 'favorite food?: '
241
- speak "Wow, I like #{food} too. We have so much in common."
242
- speak "I like #{food} as well!", "Victoria", 190
243
-
244
- # Execute arbitrary applescript
245
- applescript 'foo'
246
-
247
- # Converse with speech recognition server
248
- case converse 'What is the best food?', :cookies => 'Cookies', :unknown => 'Nothing'
249
- when :cookies
250
- speak 'o.m.g. you are awesome!'
251
- else
252
- case converse 'That is lame, shall I convince you cookies are the best?', :yes => 'Ok', :no => 'No', :maybe => 'Maybe another time'
253
- when :yes
254
- speak 'Well you see, cookies are just fantastic, they melt in your mouth.'
255
- else
256
- speak 'Ok then, bye.'
124
+ command :foo do |c|
125
+ c.syntax = 'foobar foo'
126
+ c.description = 'Displays foo'
127
+ c.action do |args, options|
128
+ say 'foo'
129
+ end
257
130
  end
258
131
  end
259
- ```
260
-
261
- ## Growl Notifications
262
-
263
- Commander provides methods for displaying Growl notifications. To use these
264
- methods you need to install http://github.com/tj/growl which utilizes
265
- the [growlnotify](http://growl.info/extras.php#growlnotify) executable. Note that
266
- growl is auto-imported by Commander when available, no need to require.
267
-
268
- ```ruby
269
- # Display a generic Growl notification
270
- notify 'Something happened'
271
-
272
- # Display an 'info' status notification
273
- notify_info 'You have #{emails.length} new email(s)'
274
132
 
275
- # Display an 'ok' status notification
276
- notify_ok 'Gems updated'
277
-
278
- # Display a 'warning' status notification
279
- notify_warning '1 gem failed installation'
280
-
281
- # Display an 'error' status notification
282
- notify_error "Gem #{name} failed"
133
+ MyApplication.run!(ARGV) if $0 == __FILE__
283
134
  ```
284
135
 
285
136
  ## Commander Goodies
@@ -439,25 +290,7 @@ This abstraction could be utilized to generate HTML documentation for your execu
439
290
 
440
291
  ### Tracing
441
292
 
442
- By default the `-t` and `--trace` global options are provided to allow users to get a backtrace to aid debugging.
443
-
444
- You can disable these options:
445
-
446
- ```ruby
447
- never_trace!
448
- ```
449
-
450
- Or make it always on:
451
-
452
- ```ruby
453
- always_trace!
454
- ```
455
-
456
- Include the `--trace` global option but turn off the error message prompt:
457
-
458
- ```ruby
459
- silent_trace!
460
- ```
293
+ WIP: Update OpenFlight --trace behaviour
461
294
 
462
295
  ## Tips
463
296
 
@@ -25,12 +25,9 @@ require 'highline'
25
25
  $terminal = HighLine.new
26
26
  require 'commander/version'
27
27
  require 'commander/blank'
28
- require 'commander/user_interaction'
29
28
  require 'commander/core_ext'
30
29
  require 'commander/runner'
31
30
  require 'commander/command'
32
31
  require 'commander/help_formatters'
33
32
  require 'commander/platform'
34
- require 'commander/delegates'
35
- require 'commander/methods'
36
- require 'commander/configure'
33
+ require 'commander/cli'
@@ -0,0 +1,180 @@
1
+ module Commander
2
+ module CLI
3
+ ##
4
+ # Wrapper run command with error handling
5
+ def run!(*args)
6
+ instance = Runner.new(
7
+ @program, commands, default_command,
8
+ global_options, aliases, args
9
+ )
10
+ instance.run
11
+ rescue StandardError, Interrupt => e
12
+ $stderr.puts e.backtrace.reverse if args.include?('--trace')
13
+ error_handler(instance, e)
14
+ end
15
+
16
+ ##
17
+ # Assign program information.
18
+ #
19
+ # === Examples
20
+ #
21
+ # # Set data
22
+ # program :name, 'Commander'
23
+ # program :version, Commander::VERSION
24
+ # program :description, 'Commander utility program.'
25
+ # program :help, 'Copyright', '2008 TJ Holowaychuk'
26
+ # program :help, 'Anything', 'You want'
27
+ # program :help_formatter, :compact
28
+ # program :help_formatter, Commander::HelpFormatter::TerminalCompact
29
+ #
30
+ # # Get data
31
+ # program :name # => 'Commander'
32
+ #
33
+ # === Keys
34
+ #
35
+ # :version (required) Program version triple, ex: '0.0.1'
36
+ # :description (required) Program description
37
+ # :name Program name, defaults to basename of executable
38
+ # :help_formatter Defaults to Commander::HelpFormatter::Terminal
39
+ # :help Allows addition of arbitrary global help blocks
40
+ # :help_paging Flag for toggling help paging
41
+ #
42
+
43
+ def program(key, *args, &block)
44
+ @program ||= {
45
+ help_formatter: HelpFormatter::Terminal,
46
+ name: File.basename($PROGRAM_NAME),
47
+ help_paging: true,
48
+ }
49
+
50
+ if key == :help && !args.empty?
51
+ @program[:help] ||= {}
52
+ @program[:help][args.first] = args.at(1)
53
+ elsif key == :help_formatter && !args.empty?
54
+ @program[key] = (@help_formatter_aliases[args.first] || args.first)
55
+ elsif block
56
+ @program[key] = block
57
+ else
58
+ unless args.empty?
59
+ @program[key] = args.count == 1 ? args[0] : args
60
+ end
61
+ @program[key]
62
+ end
63
+ end
64
+
65
+ ##
66
+ # Default command _name_ to be used when no other
67
+ # command is found in the arguments.
68
+
69
+ def default_command(name = nil)
70
+ @default_command = name unless name.nil?
71
+ @default_command
72
+ end
73
+
74
+
75
+ ##
76
+ # Hash of Command objects
77
+ def commands
78
+ @commands ||= {}
79
+ end
80
+
81
+ ##
82
+ # Hash of Global Options
83
+ def global_options
84
+ @global_options ||= begin
85
+ @global_options = [] # Allows Recursive - Refactor
86
+ global_option('-h', '--help', 'Display help documentation') do
87
+ args = @args - %w(-h --help)
88
+ command(:help).run(*args)
89
+ exit 0
90
+ end
91
+ global_option('--version', 'Display version information') do
92
+ say version
93
+ exit 0
94
+ end
95
+ end
96
+ end
97
+
98
+ ##
99
+ # Add a global option; follows the same syntax as Command#option
100
+ # This would be used for switches such as --version
101
+ # NOTE: --trace is special and does not appear in the help
102
+ # It is intended for debugging purposes
103
+
104
+ def global_option(*args, &block)
105
+ switches, description = Runner.separate_switches_from_description(*args)
106
+ global_options << {
107
+ args: args,
108
+ proc: block,
109
+ switches: switches,
110
+ description: description,
111
+ }
112
+ end
113
+
114
+ ##
115
+ # Define and get a command by name
116
+ #
117
+ def command(name)
118
+ name = name.to_s
119
+ (commands[name] ||= Command.new(name)).tap do |cmd|
120
+ yield cmd if block_given?
121
+ end
122
+ end
123
+
124
+ # A hash of known aliases
125
+ def aliases
126
+ @aliases ||= {}
127
+ end
128
+
129
+ ##
130
+ # Alias command _name_ with _alias_name_. Optionally _args_ may be passed
131
+ # as if they were being passed straight to the original command via the command-line.
132
+
133
+ def alias_command(alias_name, name, *args)
134
+ commands[alias_name.to_s] = command name
135
+ aliases[alias_name.to_s] = args
136
+ end
137
+
138
+ def error_handler(runner, e)
139
+ error_msg = "#{Paint[runner.program(:name), '#2794d8']}: #{Paint[e.to_s, :red, :bright]}"
140
+ exit_code = e.respond_to?(:exit_code) ? e.exit_code.to_i : 1
141
+ case e
142
+ when OptionParser::InvalidOption,
143
+ Commander::Runner::InvalidCommandError,
144
+ Commander::Patches::CommandUsageError
145
+ # Display the error message for a specific command. Most likely due to
146
+ # invalid command syntax
147
+ if cmd = runner.active_command
148
+ $stderr.puts error_msg
149
+ $stderr.puts "\nUsage:\n\n"
150
+ runner.command('help').run(cmd.name)
151
+ # Display the main app help text when called without `--help`
152
+ elsif runner.args_without_command_name.empty?
153
+ $stderr.puts "Usage:\n\n"
154
+ runner.command('help').run(:error)
155
+ # Display the main app help text when called with arguments. Mostly
156
+ # likely an invalid syntax error
157
+ else
158
+ $stderr.puts error_msg
159
+ $stderr.puts "\nUsage:\n\n"
160
+ runner.command('help').run(:error)
161
+ end
162
+ exit_code = 254
163
+ # Display the help text for sub command groups when called without `--help`
164
+ when SubCommandGroupError
165
+ if cmd = runner.active_command
166
+ $stderr.puts "Usage:\n\n"
167
+ runner.command('help').run(cmd.name)
168
+ end
169
+ exit_code = 254
170
+ when Interrupt
171
+ $stderr.puts 'Received Interrupt!'
172
+ exit_code = 255
173
+ # Catch all error message for all other issues
174
+ else
175
+ $stderr.puts error_msg
176
+ end
177
+ exit(exit_code)
178
+ end
179
+ end
180
+ end
@@ -1,5 +1,5 @@
1
1
  require 'commander'
2
2
 
3
- include Commander::Methods
3
+ extend Commander::CLI
4
4
 
5
- at_exit { run! }
5
+ at_exit { run!(ARGV) }
@@ -2,42 +2,6 @@ require 'paint'
2
2
 
3
3
  module Commander
4
4
  class Runner
5
- DEFAULT_ERROR_HANDLER = lambda do |runner, e|
6
- error_msg = "#{Paint[runner.program(:name), '#2794d8']}: #{Paint[e.to_s, :red, :bright]}"
7
- case e
8
- when OptionParser::InvalidOption,
9
- Commander::Runner::InvalidCommandError,
10
- Commander::Patches::CommandUsageError
11
- # Display the error message for a specific command. Most likely due to
12
- # invalid command syntax
13
- if cmd = runner.active_command
14
- $stderr.puts error_msg
15
- $stderr.puts "\nUsage:\n\n"
16
- runner.command('help').run(cmd.name)
17
- # Display the main app help text when called without `--help`
18
- elsif runner.args_without_command_name.empty?
19
- $stderr.puts "Usage:\n\n"
20
- runner.command('help').run(:error)
21
- # Display the main app help text when called with arguments. Mostly
22
- # likely an invalid syntax error
23
- else
24
- $stderr.puts error_msg
25
- $stderr.puts "\nUsage:\n\n"
26
- runner.command('help').run(:error)
27
- end
28
- # Display the help text for sub command groups when called without `--help`
29
- when SubCommandGroupError
30
- if cmd = runner.active_command
31
- $stderr.puts "Usage:\n\n"
32
- runner.command('help').run(cmd.name)
33
- end
34
- # Catch all error message for all other issues
35
- else
36
- $stderr.puts error_msg
37
- end
38
- exit(1)
39
- end
40
-
41
5
  #--
42
6
  # Exceptions
43
7
  #++
@@ -63,67 +27,37 @@ module Commander
63
27
  # Initialize a new command runner. Optionally
64
28
  # supplying _args_ for mocking, or arbitrary usage.
65
29
 
66
- def initialize(args = ARGV)
67
- @args, @commands, @aliases, @options = args, {}, {}, []
68
- @help_formatter_aliases = help_formatter_alias_defaults
69
- @program = program_defaults
70
- @always_trace = false
71
- @never_trace = false
72
- @silent_trace = false
73
- @error_handler = DEFAULT_ERROR_HANDLER
74
- create_default_commands
75
- end
76
-
77
30
  ##
78
- # Return singleton Runner instance.
31
+ # Display the backtrace in the event of an error
32
+ attr_accessor :trace
79
33
 
80
- def self.instance
81
- @singleton ||= new
34
+ def initialize(*inputs)
35
+ @program, @commands, @default_command, \
36
+ @options, @aliases, @args = inputs.map(&:dup)
37
+ @args.reject! { |a| a == '--trace' }
38
+ @commands['help'] ||= Command.new('help').tap do |c|
39
+ c.syntax = "#{program(:name)} help [command]"
40
+ c.description = 'Display global or [command] help documentation'
41
+ c.example 'Display global help', "#{program(:name)} help"
42
+ c.example "Display help for 'foo'", "#{program(:name)} help foo"
43
+ c.when_called do |help_args, _|
44
+ self.run_help_command(help_args)
45
+ end
46
+ end
47
+ @help_formatter_aliases = help_formatter_alias_defaults
82
48
  end
83
49
 
84
50
  ##
85
- # Run command parsing and execution process.
51
+ # Run command parsing and execution process
52
+ # NOTE: This method does not have error handling, see: run!
86
53
 
87
- def run!
88
- trace = @always_trace || false
54
+ def run
89
55
  require_program :version, :description
90
- trap('INT') { abort program(:int_message) } if program(:int_message)
91
- trap('INT') { program(:int_block).call } if program(:int_block)
92
- global_option('-h', '--help', 'Display help documentation') do
93
- args = @args - %w(-h --help)
94
- command(:help).run(*args)
95
- return
96
- end
97
- global_option('--version', 'Display version information') do
98
- say version
99
- return
100
- end
101
- global_option('--trace', 'Display backtrace when an error occurs') { trace = true } unless @never_trace || @always_trace
56
+
102
57
  parse_global_options
103
58
  remove_global_options options, @args
104
- if trace
105
- run_active_command
106
- else
107
- begin
108
- run_active_command
109
- rescue InvalidCommandError => e
110
- error_handler&.call(self, e) ||
111
- abort("#{e}. Use --help for more information")
112
- rescue \
113
- OptionParser::InvalidOption,
114
- OptionParser::InvalidArgument,
115
- OptionParser::MissingArgument => e
116
- error_handler&.call(self, e) ||
117
- abort(e.to_s)
118
- rescue => e
119
- error_handler&.call(self, e) ||
120
- if @never_trace || @silent_trace
121
- abort("error: #{e}.")
122
- else
123
- abort("error: #{e}. Use --trace to view backtrace")
124
- end
125
- end
126
- end
59
+
60
+ run_active_command
127
61
  end
128
62
 
129
63
  ##
@@ -134,83 +68,11 @@ module Commander
134
68
  end
135
69
 
136
70
  ##
137
- # Enable tracing on all executions (bypasses --trace)
138
-
139
- def always_trace!
140
- @always_trace = true
141
- @never_trace = false
142
- @silent_trace = false
143
- end
144
-
145
- ##
146
- # Hide the trace option from the help menus and don't add it as a global option
147
-
148
- def never_trace!
149
- @always_trace = false
150
- @never_trace = true
151
- @silent_trace = false
152
- end
153
-
154
- ##
155
- # Includes the trace option in the help but not in the error message
156
-
157
- def silent_trace!
158
- @always_trace = false
159
- @never_trace = false
160
- @silent_trace = true
161
- end
162
-
163
- ##
164
- # Set a handler to be used for advanced exception handling
165
-
166
- def error_handler(&block)
167
- @error_handler = block if block
168
- @error_handler
169
- end
170
-
171
- ##
172
- # Assign program information.
173
- #
174
- # === Examples
175
- #
176
- # # Set data
177
- # program :name, 'Commander'
178
- # program :version, Commander::VERSION
179
- # program :description, 'Commander utility program.'
180
- # program :help, 'Copyright', '2008 TJ Holowaychuk'
181
- # program :help, 'Anything', 'You want'
182
- # program :int_message 'Bye bye!'
183
- # program :help_formatter, :compact
184
- # program :help_formatter, Commander::HelpFormatter::TerminalCompact
185
- #
186
- # # Get data
187
- # program :name # => 'Commander'
71
+ # The hash of program variables
188
72
  #
189
- # === Keys
190
- #
191
- # :version (required) Program version triple, ex: '0.0.1'
192
- # :description (required) Program description
193
- # :name Program name, defaults to basename of executable
194
- # :help_formatter Defaults to Commander::HelpFormatter::Terminal
195
- # :help Allows addition of arbitrary global help blocks
196
- # :help_paging Flag for toggling help paging
197
- # :int_message Message to display when interrupted (CTRL + C)
198
- #
199
-
200
- def program(key, *args, &block)
201
- if key == :help && !args.empty?
202
- @program[:help] ||= {}
203
- @program[:help][args.first] = args.at(1)
204
- elsif key == :help_formatter && !args.empty?
205
- @program[key] = (@help_formatter_aliases[args.first] || args.first)
206
- elsif block
207
- @program[key] = block
208
- else
209
- unless args.empty?
210
- @program[key] = args.count == 1 ? args[0] : args
211
- end
212
- @program[key]
213
- end
73
+ def program(key, default = nil)
74
+ @program[key] ||= default if default
75
+ @program[key]
214
76
  end
215
77
 
216
78
  ##
@@ -227,49 +89,10 @@ module Commander
227
89
  # end
228
90
  #
229
91
 
230
- def command(name, &block)
231
- yield add_command(Commander::Command.new(name)) if block
92
+ def command(name)
232
93
  @commands[name.to_s]
233
94
  end
234
95
 
235
- ##
236
- # Add a global option; follows the same syntax as Command#option
237
- # This would be used for switches such as --version, --trace, etc.
238
-
239
- def global_option(*args, &block)
240
- switches, description = Runner.separate_switches_from_description(*args)
241
- @options << {
242
- args: args,
243
- proc: block,
244
- switches: switches,
245
- description: description,
246
- }
247
- end
248
-
249
- ##
250
- # Alias command _name_ with _alias_name_. Optionally _args_ may be passed
251
- # as if they were being passed straight to the original command via the command-line.
252
-
253
- def alias_command(alias_name, name, *args)
254
- @commands[alias_name.to_s] = command name
255
- @aliases[alias_name.to_s] = args
256
- end
257
-
258
- ##
259
- # Default command _name_ to be used when no other
260
- # command is found in the arguments.
261
-
262
- def default_command(name)
263
- @default_command = name
264
- end
265
-
266
- ##
267
- # Add a command object to this runner.
268
-
269
- def add_command(command)
270
- @commands[command.name] = command
271
- end
272
-
273
96
  ##
274
97
  # Check if command _name_ is an alias.
275
98
 
@@ -336,17 +159,6 @@ module Commander
336
159
  }
337
160
  end
338
161
 
339
- ##
340
- # Returns hash of program defaults.
341
-
342
- def program_defaults
343
- {
344
- help_formatter: HelpFormatter::Terminal,
345
- name: File.basename($PROGRAM_NAME),
346
- help_paging: true,
347
- }
348
- end
349
-
350
162
  ##
351
163
  # Limit commands to those which are subcommands of the one that is active
352
164
  def limit_commands_to_subcommands(command)
@@ -368,39 +180,25 @@ module Commander
368
180
  ##
369
181
  # Creates default commands such as 'help' which is
370
182
  # essentially the same as using the --help switch.
371
-
372
- def create_default_commands
373
- command :help do |c|
374
- c.syntax = "#{program(:name)} help [command]"
375
- c.description = 'Display global or [command] help documentation'
376
- c.example 'Display global help', "#{program(:name)} help"
377
- c.example "Display help for 'foo'", "#{program(:name)} help foo"
378
- c.when_called do |args, _options|
379
- UI.enable_paging if program(:help_paging)
380
- @help_commands = @commands.dup
381
- if args.empty? || args[0] == :error
382
- @help_options = @options.reject {|o| o[:switches].first == '--trace'}
383
- @help_commands.reject! { |k, v| !!v.hidden }
384
- old_wrap = $terminal.wrap_at
385
- $terminal.wrap_at = nil
386
- program(:nobanner, true) if args[0] == :error
387
- say help_formatter.render
388
- $terminal.wrap_at = old_wrap
389
- else
390
- command = command args.join(' ')
391
- begin
392
- require_valid_command command
393
- rescue InvalidCommandError => e
394
- error_handler&.call(self, e) ||
395
- abort("#{e}. Use --help for more information")
396
- end
397
- if command.sub_command_group?
398
- limit_commands_to_subcommands(command)
399
- say help_formatter.render_subcommand(command)
400
- else
401
- say help_formatter.render_command(command)
402
- end
403
- end
183
+ def run_help_command(args)
184
+ UI.enable_paging if program(:help_paging)
185
+ @help_commands = @commands.dup
186
+ if args.empty? || args[0] == :error
187
+ @help_options = @options
188
+ @help_commands.reject! { |k, v| !!v.hidden }
189
+ old_wrap = $terminal.wrap_at
190
+ $terminal.wrap_at = nil
191
+ program(:nobanner, true) if args[0] == :error
192
+ say help_formatter.render
193
+ $terminal.wrap_at = old_wrap
194
+ else
195
+ command = command args.join(' ')
196
+ require_valid_command command
197
+ if command.sub_command_group?
198
+ limit_commands_to_subcommands(command)
199
+ say help_formatter.render_subcommand(command)
200
+ else
201
+ say help_formatter.render_command(command)
404
202
  end
405
203
  end
406
204
  end
@@ -487,7 +285,9 @@ module Commander
487
285
  unless active_command.nil?
488
286
  active_command.proxy_options << [Runner.switch_to_sym(switches.last), value]
489
287
  end
490
- yield value if block && !value.nil?
288
+ if block && !value.nil?
289
+ instance_exec(value, &block)
290
+ end
491
291
  end
492
292
  end
493
293