commander 4.3.0 → 4.3.1

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
  SHA1:
3
- metadata.gz: a71b1e0b6cd4cc5c9155cd54879132e0e8d76446
4
- data.tar.gz: 7cebb2917cfd393a23a1aac0fd4763142709ed01
3
+ metadata.gz: 61e13c07b5343657433d60e4c43e472a2ed3d556
4
+ data.tar.gz: 514acee724f197f3500138992a32dc604b91765c
5
5
  SHA512:
6
- metadata.gz: 0de8b294364f785f0ce045d801fc2bf7c6f64ab3cd505cef40169533461377314098044ad8a88f3b297625cb92fc970f7a8f8c06b056ac75266f32fc40c9155b
7
- data.tar.gz: 6d90f6f512e2856f9aa3779e6bcf54a8d4118c3f9083b544fbe1a4488248dbc548977ace3684cee16bcd2529a7e8e06053f66b3c2f290029f7cf874da9251652
6
+ metadata.gz: cbef7c7332b5399567cbbfffdc3849e49fbeb513814466f0494d32a7326f02c794c0fde96693950287687c84d955b51e23f89dc4c1c9ddf9ab3a7f897a5d6c33
7
+ data.tar.gz: 75e421ef03d886623685b3f0f25460b1d72de46ce37d0034384cf098bab9a77d57ce80587220f0a8fba428031b70a62148219eaf6ad6cd2464666e81cc6e95d5
data/.rubocop.yml CHANGED
@@ -4,7 +4,6 @@ inherit_from: .rubocop_todo.yml
4
4
  Encoding:
5
5
  Enabled: false
6
6
 
7
- # Offense count: 1
8
- LineLength:
9
- Max: 242
10
-
7
+ # Enforce trailing comma after last item of multiline hashes.
8
+ Style/TrailingComma:
9
+ EnforcedStyleForMultiline: comma
data/.rubocop_todo.yml CHANGED
@@ -1,19 +1,10 @@
1
1
  # This configuration was generated by `rubocop --auto-gen-config`
2
- # on 2015-02-07 17:05:05 -0800 using RuboCop version 0.29.0.
2
+ # on 2015-02-16 16:08:54 -0800 using RuboCop version 0.29.0.
3
3
  # The point is for the user to remove these configuration records
4
4
  # one by one as the offenses are removed from the code base.
5
5
  # Note that changes in the inspected code, or installation of new
6
6
  # versions of RuboCop, may require this file to be generated again.
7
7
 
8
- # Offense count: 5
9
- Lint/AmbiguousOperator:
10
- Enabled: false
11
-
12
- # Offense count: 1
13
- # Configuration parameters: AllowSafeAssignment.
14
- Lint/AssignmentInCondition:
15
- Enabled: false
16
-
17
8
  # Offense count: 2
18
9
  Lint/Eval:
19
10
  Enabled: false
@@ -22,19 +13,6 @@ Lint/Eval:
22
13
  Lint/HandleExceptions:
23
14
  Enabled: false
24
15
 
25
- # Offense count: 1
26
- Lint/RescueException:
27
- Enabled: false
28
-
29
- # Offense count: 2
30
- Lint/ShadowingOuterLocalVariable:
31
- Enabled: false
32
-
33
- # Offense count: 1
34
- # Cop supports --auto-correct.
35
- Lint/UnusedBlockArgument:
36
- Enabled: false
37
-
38
16
  # Offense count: 5
39
17
  Metrics/AbcSize:
40
18
  Max: 29
@@ -42,13 +20,13 @@ Metrics/AbcSize:
42
20
  # Offense count: 1
43
21
  # Configuration parameters: CountComments.
44
22
  Metrics/ClassLength:
45
- Max: 221
23
+ Max: 230
46
24
 
47
25
  # Offense count: 4
48
26
  Metrics/CyclomaticComplexity:
49
27
  Max: 13
50
28
 
51
- # Offense count: 2
29
+ # Offense count: 89
52
30
  # Configuration parameters: AllowURI, URISchemes.
53
31
  Metrics/LineLength:
54
32
  Max: 242
@@ -56,7 +34,7 @@ Metrics/LineLength:
56
34
  # Offense count: 7
57
35
  # Configuration parameters: CountComments.
58
36
  Metrics/MethodLength:
59
- Max: 33
37
+ Max: 36
60
38
 
61
39
  # Offense count: 4
62
40
  Metrics/PerceivedComplexity:
@@ -66,147 +44,34 @@ Metrics/PerceivedComplexity:
66
44
  Style/AccessorMethodName:
67
45
  Enabled: false
68
46
 
69
- # Offense count: 5
70
- # Cop supports --auto-correct.
71
- # Configuration parameters: EnforcedStyle, SupportedStyles.
72
- Style/AndOr:
73
- Enabled: false
74
-
75
- # Offense count: 1
76
- # Configuration parameters: EnforcedStyle, SupportedStyles.
77
- Style/ClassAndModuleChildren:
78
- Enabled: false
79
-
80
47
  # Offense count: 18
81
48
  Style/Documentation:
82
49
  Enabled: false
83
50
 
84
- # Offense count: 2
85
- Style/EachWithObject:
86
- Enabled: false
87
-
88
- # Offense count: 1
89
- # Cop supports --auto-correct.
90
- # Configuration parameters: EnforcedStyle, SupportedStyles.
91
- Style/EmptyLinesAroundClassBody:
92
- Enabled: false
93
-
94
- # Offense count: 1
95
- # Cop supports --auto-correct.
96
- Style/EmptyLinesAroundMethodBody:
97
- Enabled: false
98
-
99
- # Offense count: 5
100
- # Configuration parameters: EnforcedStyle, SupportedStyles.
101
- Style/FormatString:
102
- Enabled: false
103
-
104
51
  # Offense count: 12
105
52
  # Configuration parameters: AllowedVariables.
106
53
  Style/GlobalVars:
107
54
  Enabled: false
108
55
 
109
- # Offense count: 2
110
- # Configuration parameters: MinBodyLength.
111
- Style/GuardClause:
112
- Enabled: false
113
-
114
- # Offense count: 7
115
- # Cop supports --auto-correct.
116
- # Configuration parameters: EnforcedStyle, SupportedStyles.
117
- Style/HashSyntax:
118
- Enabled: false
119
-
120
56
  # Offense count: 1
121
57
  # Configuration parameters: MaxLineLength.
122
58
  Style/IfUnlessModifier:
123
59
  Enabled: false
124
60
 
125
- # Offense count: 2
126
- # Cop supports --auto-correct.
127
- Style/Lambda:
128
- Enabled: false
129
-
130
- # Offense count: 17
131
- # Cop supports --auto-correct.
132
- # Configuration parameters: EnforcedStyle, SupportedStyles.
133
- Style/MethodDefParentheses:
134
- Enabled: false
135
-
136
61
  # Offense count: 1
137
62
  Style/MultilineBlockChain:
138
63
  Enabled: false
139
64
 
140
- # Offense count: 1
141
- # Cop supports --auto-correct.
142
- # Configuration parameters: EnforcedStyle, SupportedStyles.
143
- Style/MultilineOperationIndentation:
144
- Enabled: false
145
-
146
65
  # Offense count: 1
147
66
  Style/MultilineTernaryOperator:
148
67
  Enabled: false
149
68
 
150
- # Offense count: 1
151
- # Cop supports --auto-correct.
152
- Style/Not:
153
- Enabled: false
154
-
155
- # Offense count: 1
156
- # Cop supports --auto-correct.
157
- # Configuration parameters: PreferredDelimiters.
158
- Style/PercentLiteralDelimiters:
159
- Enabled: false
160
-
161
- # Offense count: 3
162
- # Cop supports --auto-correct.
163
- # Configuration parameters: AllowMultipleReturnValues.
164
- Style/RedundantReturn:
165
- Enabled: false
166
-
167
69
  # Offense count: 5
168
70
  Style/RescueModifier:
169
71
  Enabled: false
170
72
 
171
- # Offense count: 3
172
- # Cop supports --auto-correct.
173
- # Configuration parameters: AllowAsExpressionSeparator.
174
- Style/Semicolon:
175
- Enabled: false
176
-
177
- # Offense count: 2
178
- # Cop supports --auto-correct.
179
- # Configuration parameters: EnforcedStyle, SupportedStyles.
180
- Style/SignalException:
181
- Enabled: false
182
-
183
- # Offense count: 1
184
- # Cop supports --auto-correct.
185
- Style/SpecialGlobalVars:
186
- Enabled: false
187
-
188
- # Offense count: 1
189
- # Cop supports --auto-correct.
190
- # Configuration parameters: EnforcedStyleForMultiline, SupportedStyles.
191
- Style/TrailingComma:
192
- Enabled: false
193
-
194
- # Offense count: 74
195
- # Cop supports --auto-correct.
196
- Style/TrailingWhitespace:
197
- Enabled: false
198
-
199
73
  # Offense count: 2
200
74
  # Cop supports --auto-correct.
201
75
  # Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, Whitelist.
202
76
  Style/TrivialAccessors:
203
77
  Enabled: false
204
-
205
- # Offense count: 1
206
- Style/UnlessElse:
207
- Enabled: false
208
-
209
- # Offense count: 1
210
- # Configuration parameters: EnforcedStyle, SupportedStyles.
211
- Style/VariableName:
212
- Enabled: false
data/History.rdoc CHANGED
@@ -1,3 +1,8 @@
1
+ === 4.3.1 / 2015-03-27
2
+
3
+ * Fix various Ruby warnings for circular requires, etc.
4
+ * Update to use highline 1.7 (@SkyTrix)
5
+
1
6
  === 4.3.0 / 2015-02-07
2
7
 
3
8
  * Drops support for Ruby 1.8. Please use 4.2.1 if you still need Ruby 1.8 compatibility.
data/bin/commander CHANGED
@@ -48,7 +48,7 @@ command :init do |c|
48
48
  end
49
49
  File.chmod 0755, file
50
50
  say "Initialized template in #{file}"
51
- rescue Exception => e
51
+ rescue => e
52
52
  abort e
53
53
  end
54
54
  end
data/commander.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
18
18
  s.require_paths = ['lib']
19
19
 
20
- s.add_runtime_dependency('highline', '~> 1.6.11')
20
+ s.add_runtime_dependency('highline', '~> 1.7.1')
21
21
 
22
22
  s.add_development_dependency('rspec', '~> 2.14')
23
23
  s.add_development_dependency('rake')
@@ -1,4 +1,3 @@
1
-
2
1
  module Blank
3
2
  def self.included(base)
4
3
  base.class_eval do
@@ -1,4 +1,3 @@
1
-
2
1
  require 'optparse'
3
2
 
4
3
  module Commander
@@ -112,7 +111,7 @@ module Commander
112
111
  args: args,
113
112
  proc: proc,
114
113
  switches: switches,
115
- description: description
114
+ description: description,
116
115
  }
117
116
  end
118
117
 
@@ -162,7 +161,7 @@ module Commander
162
161
 
163
162
  def parse_options_and_call_procs(*args)
164
163
  return args if args.empty?
165
- @options.inject OptionParser.new do |opts, option|
164
+ @options.each_with_object(OptionParser.new) do |option, opts|
166
165
  opts.on(*option[:args], &option[:proc])
167
166
  opts
168
167
  end.parse! args
@@ -187,7 +186,7 @@ module Commander
187
186
  # collected by the #option_proc.
188
187
 
189
188
  def proxy_option_struct
190
- proxy_options.inject Options.new do |options, (option, value)|
189
+ proxy_options.each_with_object(Options.new) do |(option, value), options|
191
190
  # options that are present will evaluate to true
192
191
  value = true if value.nil?
193
192
  options.__send__ :"#{option}=", value
@@ -201,7 +200,7 @@ module Commander
201
200
  # and work with option values.
202
201
 
203
202
  def option_proc(switches)
204
- lambda { |value| proxy_options << [Runner.switch_to_sym(switches.last), value] }
203
+ ->(value) { proxy_options << [Runner.switch_to_sym(switches.last), value] }
205
204
  end
206
205
 
207
206
  def inspect
@@ -1,6 +1,3 @@
1
- require 'commander'
2
- require 'commander/methods'
3
-
4
1
  module Commander
5
2
  def configure(*configuration_opts, &configuration_block)
6
3
  configuration_module = Module.new
@@ -1,4 +1,3 @@
1
-
2
1
  class Array
3
2
  ##
4
3
  # Split _string_ into an array. Used in
@@ -1,4 +1,3 @@
1
-
2
1
  class Object
3
2
  ##
4
3
  # Return the current binding.
@@ -1,3 +1,2 @@
1
-
2
1
  require 'commander/core_ext/array'
3
2
  require 'commander/core_ext/object'
@@ -12,8 +12,8 @@ module Commander
12
12
  never_trace!
13
13
  ).each do |meth|
14
14
  eval <<-END, binding, __FILE__, __LINE__
15
- def #{meth} *args, &block
16
- ::Commander::Runner.instance.#{meth} *args, &block
15
+ def #{meth}(*args, &block)
16
+ ::Commander::Runner.instance.#{meth}(*args, &block)
17
17
  end
18
18
  END
19
19
  end
@@ -1,4 +1,3 @@
1
-
2
1
  module Commander
3
2
  ##
4
3
  # = Help Formatter
@@ -1,4 +1,3 @@
1
-
2
1
  require 'erb'
3
2
 
4
3
  module Commander
@@ -1,4 +1,3 @@
1
-
2
1
  require 'erb'
3
2
 
4
3
  module Commander
@@ -1,4 +1,3 @@
1
-
2
1
  module Commander
3
2
  module HelpFormatter
4
3
  autoload :Base, 'commander/help_formatters/base'
@@ -1,6 +1,4 @@
1
-
2
1
  require 'commander'
3
- require 'commander/delegates'
4
2
 
5
3
  include Commander::UI
6
4
  include Commander::UI::AskForClass
@@ -1,10 +1,9 @@
1
- require 'commander'
2
- require 'commander/delegates'
1
+ module Commander
2
+ module Methods
3
+ include Commander::UI
4
+ include Commander::UI::AskForClass
5
+ include Commander::Delegates
3
6
 
4
- module Commander::Methods
5
- include Commander::UI
6
- include Commander::UI::AskForClass
7
- include Commander::Delegates
8
-
9
- $terminal.wrap_at = HighLine::SystemExtensions.terminal_size.first - 5 rescue 80 if $stdin.tty?
7
+ $terminal.wrap_at = HighLine::SystemExtensions.terminal_size.first - 5 rescue 80 if $stdin.tty?
8
+ end
10
9
  end
@@ -1,4 +1,3 @@
1
-
2
1
  module Commander
3
2
  module Platform
4
3
  def self.jruby?
@@ -2,71 +2,77 @@ require 'optparse'
2
2
 
3
3
  module Commander
4
4
  class Runner
5
-
6
5
  #--
7
6
  # Exceptions
8
7
  #++
9
8
 
10
9
  class CommandError < StandardError; end
11
10
  class InvalidCommandError < CommandError; end
12
-
11
+
13
12
  ##
14
13
  # Array of commands.
15
-
14
+
16
15
  attr_reader :commands
17
-
16
+
18
17
  ##
19
18
  # Global options.
20
-
19
+
21
20
  attr_reader :options
22
-
21
+
23
22
  ##
24
23
  # Hash of help formatter aliases.
25
-
24
+
26
25
  attr_reader :help_formatter_aliases
27
26
 
28
27
  ##
29
28
  # Initialize a new command runner. Optionally
30
29
  # supplying _args_ for mocking, or arbitrary usage.
31
-
32
- def initialize args = ARGV
30
+
31
+ def initialize(args = ARGV)
33
32
  @args, @commands, @aliases, @options = args, {}, {}, []
34
33
  @help_formatter_aliases = help_formatter_alias_defaults
35
34
  @program = program_defaults
35
+ @always_trace = false
36
+ @never_trace = false
36
37
  create_default_commands
37
38
  end
38
-
39
+
39
40
  ##
40
41
  # Return singleton Runner instance.
41
-
42
+
42
43
  def self.instance
43
44
  @singleton ||= new
44
45
  end
45
-
46
+
46
47
  ##
47
48
  # Run command parsing and execution process.
48
-
49
+
49
50
  def run!
50
51
  trace = @always_trace || false
51
52
  require_program :version, :description
52
53
  trap('INT') { abort program(:int_message) } if program(:int_message)
53
54
  trap('INT') { program(:int_block).call } if program(:int_block)
54
55
  global_option('-h', '--help', 'Display help documentation') do
55
- args = @args - %w[-h --help]
56
+ args = @args - %w(-h --help)
56
57
  command(:help).run(*args)
57
58
  return
58
59
  end
59
- global_option('-v', '--version', 'Display version information') { say version; return }
60
+ global_option('-v', '--version', 'Display version information') do
61
+ say version
62
+ return
63
+ end
60
64
  global_option('-t', '--trace', 'Display backtrace when an error occurs') { trace = true } unless @never_trace || @always_trace
61
65
  parse_global_options
62
66
  remove_global_options options, @args
63
- unless trace
67
+ if trace
68
+ run_active_command
69
+ else
64
70
  begin
65
71
  run_active_command
66
72
  rescue InvalidCommandError => e
67
73
  abort "#{e}. Use --help for more information"
68
74
  rescue \
69
- OptionParser::InvalidOption,
75
+ OptionParser::InvalidOption,
70
76
  OptionParser::InvalidArgument,
71
77
  OptionParser::MissingArgument => e
72
78
  abort e.to_s
@@ -77,16 +83,14 @@ module Commander
77
83
  abort "error: #{e}. Use --trace to view backtrace"
78
84
  end
79
85
  end
80
- else
81
- run_active_command
82
86
  end
83
87
  end
84
-
88
+
85
89
  ##
86
90
  # Return program version.
87
-
91
+
88
92
  def version
89
- '%s %s' % [program(:name), program(:version)]
93
+ format('%s %s', program(:name), program(:version))
90
94
  end
91
95
 
92
96
  ##
@@ -109,7 +113,7 @@ module Commander
109
113
  # Assign program information.
110
114
  #
111
115
  # === Examples
112
- #
116
+ #
113
117
  # # Set data
114
118
  # program :name, 'Commander'
115
119
  # program :version, Commander::VERSION
@@ -119,7 +123,7 @@ module Commander
119
123
  # program :int_message 'Bye bye!'
120
124
  # program :help_formatter, :compact
121
125
  # program :help_formatter, Commander::HelpFormatter::TerminalCompact
122
- #
126
+ #
123
127
  # # Get data
124
128
  # program :name # => 'Commander'
125
129
  #
@@ -132,9 +136,9 @@ module Commander
132
136
  # :help Allows addition of arbitrary global help blocks
133
137
  # :int_message Message to display when interrupted (CTRL + C)
134
138
  #
135
-
136
- def program key, *args, &block
137
- if key == :help and !args.empty?
139
+
140
+ def program(key, *args, &block)
141
+ if key == :help && !args.empty?
138
142
  @program[:help] ||= {}
139
143
  @program[:help][args.first] = args.at(1)
140
144
  elsif key == :help_formatter && !args.empty?
@@ -148,150 +152,154 @@ module Commander
148
152
  @program[key]
149
153
  end
150
154
  end
151
-
155
+
152
156
  ##
153
157
  # Creates and yields a command instance when a block is passed.
154
158
  # Otherwise attempts to return the command, raising InvalidCommandError when
155
159
  # it does not exist.
156
160
  #
157
161
  # === Examples
158
- #
162
+ #
159
163
  # command :my_command do |c|
160
164
  # c.when_called do |args|
161
165
  # # Code
162
166
  # end
163
167
  # end
164
168
  #
165
-
166
- def command name, &block
169
+
170
+ def command(name, &block)
167
171
  yield add_command(Commander::Command.new(name)) if block
168
172
  @commands[name.to_s]
169
173
  end
170
-
174
+
171
175
  ##
172
176
  # Add a global option; follows the same syntax as Command#option
173
177
  # This would be used for switches such as --version, --trace, etc.
174
-
175
- def global_option *args, &block
176
- switches, description = Runner.separate_switches_from_description *args
178
+
179
+ def global_option(*args, &block)
180
+ switches, description = Runner.separate_switches_from_description(*args)
177
181
  @options << {
178
- :args => args,
179
- :proc => block,
180
- :switches => switches,
181
- :description => description,
182
+ args: args,
183
+ proc: block,
184
+ switches: switches,
185
+ description: description,
182
186
  }
183
187
  end
184
-
188
+
185
189
  ##
186
190
  # Alias command _name_ with _alias_name_. Optionally _args_ may be passed
187
191
  # as if they were being passed straight to the original command via the command-line.
188
-
189
- def alias_command alias_name, name, *args
192
+
193
+ def alias_command(alias_name, name, *args)
190
194
  @commands[alias_name.to_s] = command name
191
195
  @aliases[alias_name.to_s] = args
192
196
  end
193
-
197
+
194
198
  ##
195
199
  # Default command _name_ to be used when no other
196
200
  # command is found in the arguments.
197
-
198
- def default_command name
201
+
202
+ def default_command(name)
199
203
  @default_command = name
200
204
  end
201
-
205
+
202
206
  ##
203
207
  # Add a command object to this runner.
204
-
205
- def add_command command
208
+
209
+ def add_command(command)
206
210
  @commands[command.name] = command
207
211
  end
208
-
212
+
209
213
  ##
210
214
  # Check if command _name_ is an alias.
211
-
212
- def alias? name
215
+
216
+ def alias?(name)
213
217
  @aliases.include? name.to_s
214
218
  end
215
-
219
+
216
220
  ##
217
221
  # Check if a command _name_ exists.
218
-
219
- def command_exists? name
222
+
223
+ def command_exists?(name)
220
224
  @commands[name.to_s]
221
225
  end
222
-
226
+
223
227
  #:stopdoc:
224
-
228
+
225
229
  ##
226
230
  # Get active command within arguments passed to this runner.
227
-
231
+
228
232
  def active_command
229
233
  @__active_command ||= command(command_name_from_args)
230
234
  end
231
-
235
+
232
236
  ##
233
237
  # Attempts to locate a command name from within the arguments.
234
238
  # Supports multi-word commands, using the largest possible match.
235
-
239
+
236
240
  def command_name_from_args
237
241
  @__command_name_from_args ||= (valid_command_names_from(*@args.dup).sort.last || @default_command)
238
242
  end
239
-
243
+
240
244
  ##
241
245
  # Returns array of valid command names found within _args_.
242
-
243
- def valid_command_names_from *args
246
+
247
+ def valid_command_names_from(*args)
244
248
  arg_string = args.delete_if { |value| value =~ /^-/ }.join ' '
245
249
  commands.keys.find_all { |name| name if /^#{name}\b/.match arg_string }
246
250
  end
247
-
251
+
248
252
  ##
249
253
  # Help formatter instance.
250
-
254
+
251
255
  def help_formatter
252
256
  @__help_formatter ||= program(:help_formatter).new self
253
257
  end
254
-
258
+
255
259
  ##
256
260
  # Return arguments without the command name.
257
-
261
+
258
262
  def args_without_command_name
259
263
  removed = []
260
264
  parts = command_name_from_args.split rescue []
261
265
  @args.dup.delete_if do |arg|
262
- removed << arg if parts.include?(arg) and not removed.include?(arg)
266
+ removed << arg if parts.include?(arg) && !removed.include?(arg)
263
267
  end
264
268
  end
265
-
269
+
266
270
  ##
267
271
  # Returns hash of help formatter alias defaults.
268
-
272
+
269
273
  def help_formatter_alias_defaults
270
- return :compact => HelpFormatter::TerminalCompact
274
+ {
275
+ compact: HelpFormatter::TerminalCompact,
276
+ }
271
277
  end
272
-
278
+
273
279
  ##
274
280
  # Returns hash of program defaults.
275
-
281
+
276
282
  def program_defaults
277
- return :help_formatter => HelpFormatter::Terminal,
278
- :name => File.basename($0)
283
+ {
284
+ help_formatter: HelpFormatter::Terminal,
285
+ name: File.basename($PROGRAM_NAME),
286
+ }
279
287
  end
280
-
288
+
281
289
  ##
282
- # Creates default commands such as 'help' which is
290
+ # Creates default commands such as 'help' which is
283
291
  # essentially the same as using the --help switch.
284
-
292
+
285
293
  def create_default_commands
286
294
  command :help do |c|
287
295
  c.syntax = 'commander help [command]'
288
296
  c.description = 'Display global or [command] help documentation'
289
297
  c.example 'Display global help', 'command help'
290
298
  c.example "Display help for 'foo'", 'command help foo'
291
- c.when_called do |args, options|
299
+ c.when_called do |args, _options|
292
300
  UI.enable_paging
293
301
  if args.empty?
294
- say help_formatter.render
302
+ say help_formatter.render
295
303
  else
296
304
  command = command args.join(' ')
297
305
  begin
@@ -304,33 +312,33 @@ module Commander
304
312
  end
305
313
  end
306
314
  end
307
-
315
+
308
316
  ##
309
317
  # Raises InvalidCommandError when a _command_ is not found.
310
-
311
- def require_valid_command command = active_command
312
- raise InvalidCommandError, 'invalid command', caller if command.nil?
318
+
319
+ def require_valid_command(command = active_command)
320
+ fail InvalidCommandError, 'invalid command', caller if command.nil?
313
321
  end
314
-
322
+
315
323
  ##
316
324
  # Removes global _options_ from _args_. This prevents an invalid
317
325
  # option error from occurring when options are parsed
318
326
  # again for the command.
319
-
320
- def remove_global_options options, args
327
+
328
+ def remove_global_options(options, args)
321
329
  # TODO: refactor with flipflop, please TJ ! have time to refactor me !
322
330
  options.each do |option|
323
331
  switches = option[:switches].dup
324
332
  next if switches.empty?
325
333
 
326
- if switchHasArg = switches.any? { |s| s =~ /[ =]/ }
334
+ if (switch_has_arg = switches.any? { |s| s =~ /[ =]/ })
327
335
  switches.map! { |s| s[0, s.index('=') || s.index(' ') || s.length] }
328
336
  end
329
337
 
330
338
  past_switch, arg_removed = false, false
331
339
  args.delete_if do |arg|
332
340
  if switches.any? { |s| arg[0, s.length] == s }
333
- arg_removed = !switchHasArg
341
+ arg_removed = !switch_has_arg
334
342
  past_switch = true
335
343
  elsif past_switch && !arg_removed && arg !~ /^-/
336
344
  arg_removed = true
@@ -341,14 +349,13 @@ module Commander
341
349
  end
342
350
  end
343
351
  end
344
-
352
+
345
353
  ##
346
354
  # Parse global command options.
347
-
348
- def parse_global_options
349
355
 
356
+ def parse_global_options
350
357
  parser = options.inject(OptionParser.new) do |options, option|
351
- options.on *option[:args], &global_option_proc(option[:switches], &option[:proc])
358
+ options.on(*option[:args], &global_option_proc(option[:switches], &option[:proc]))
352
359
  end
353
360
 
354
361
  options = @args.dup
@@ -360,44 +367,44 @@ module Commander
360
367
  retry
361
368
  end
362
369
  end
363
-
370
+
364
371
  ##
365
372
  # Returns a proc allowing for commands to inherit global options.
366
373
  # This functionality works whether a block is present for the global
367
374
  # option or not, so simple switches such as --verbose can be used
368
375
  # without a block, and used throughout all commands.
369
-
370
- def global_option_proc switches, &block
376
+
377
+ def global_option_proc(switches, &block)
371
378
  lambda do |value|
372
379
  unless active_command.nil?
373
380
  active_command.proxy_options << [Runner.switch_to_sym(switches.last), value]
374
381
  end
375
- yield value if block and !value.nil?
382
+ yield value if block && !value.nil?
376
383
  end
377
384
  end
378
-
385
+
379
386
  ##
380
387
  # Raises a CommandError when the program any of the _keys_ are not present, or empty.
381
-
382
- def require_program *keys
388
+
389
+ def require_program(*keys)
383
390
  keys.each do |key|
384
- raise CommandError, "program #{key} required" if program(key).nil? or program(key).empty?
391
+ fail CommandError, "program #{key} required" if program(key).nil? || program(key).empty?
385
392
  end
386
393
  end
387
-
394
+
388
395
  ##
389
396
  # Return switches and description separated from the _args_ passed.
390
397
 
391
- def self.separate_switches_from_description *args
392
- switches = args.find_all { |arg| arg.to_s =~ /^-/ }
393
- description = args.last unless !args.last.is_a? String or args.last.match(/^-/)
394
- return switches, description
398
+ def self.separate_switches_from_description(*args)
399
+ switches = args.find_all { |arg| arg.to_s =~ /^-/ }
400
+ description = args.last if args.last.is_a?(String) && !args.last.match(/^-/)
401
+ [switches, description]
395
402
  end
396
-
403
+
397
404
  ##
398
405
  # Attempts to generate a method name symbol from +switch+.
399
406
  # For example:
400
- #
407
+ #
401
408
  # -h # => :h
402
409
  # --trace # => :trace
403
410
  # --some-switch # => :some_switch
@@ -405,26 +412,25 @@ module Commander
405
412
  # --file FILE # => :file
406
413
  # --list of,things # => :list
407
414
  #
408
-
409
- def self.switch_to_sym switch
415
+
416
+ def self.switch_to_sym(switch)
410
417
  switch.scan(/[\-\]](\w+)/).join('_').to_sym rescue nil
411
418
  end
412
-
419
+
413
420
  ##
414
421
  # Run the active command.
415
-
422
+
416
423
  def run_active_command
417
424
  require_valid_command
418
425
  if alias? command_name_from_args
419
- active_command.run *(@aliases[command_name_from_args.to_s] + args_without_command_name)
426
+ active_command.run(*(@aliases[command_name_from_args.to_s] + args_without_command_name))
420
427
  else
421
- active_command.run *args_without_command_name
422
- end
423
- end
424
-
425
- def say *args #:nodoc:
426
- $terminal.say *args
428
+ active_command.run(*args_without_command_name)
429
+ end
427
430
  end
428
431
 
432
+ def say(*args) #:nodoc:
433
+ $terminal.say(*args)
434
+ end
429
435
  end
430
436
  end
@@ -53,7 +53,7 @@ module Commander
53
53
  #
54
54
 
55
55
  def log(action, *args)
56
- say '%15s %s' % [action, args.join(' ')]
56
+ say format('%15s %s', action, args.join(' '))
57
57
  end
58
58
 
59
59
  ##
@@ -165,18 +165,24 @@ module Commander
165
165
 
166
166
  def converse(prompt, responses = {})
167
167
  i, commands = 0, responses.map { |_key, value| value.inspect }.join(',')
168
- statement = responses.inject '' do |statement, (key, value)|
169
- statement << (((i += 1) == 1 ?
170
- %(if response is "#{value}" then\n) : %(else if response is "#{value}" then\n))) <<
171
- %(do shell script "echo '#{key}'"\n)
168
+ statement = responses.inject '' do |inner_statement, (key, value)|
169
+ inner_statement <<
170
+ (
171
+ (i += 1) == 1 ?
172
+ %(if response is "#{value}" then\n) :
173
+ %(else if response is "#{value}" then\n)
174
+ ) <<
175
+ %(do shell script "echo '#{key}'"\n)
172
176
  end
173
- applescript(%(
177
+ applescript(
178
+ %(
174
179
  tell application "SpeechRecognitionServer"
175
180
  set response to listen for {#{commands}} with prompt "#{prompt}"
176
181
  #{statement}
177
182
  end if
178
183
  end tell
179
- )).strip.to_sym
184
+ ),
185
+ ).strip.to_sym
180
186
  end
181
187
 
182
188
  ##
@@ -214,10 +220,9 @@ module Commander
214
220
  def io(input = nil, output = nil, &block)
215
221
  $stdin = File.new(input) if input
216
222
  $stdout = File.new(output, 'r+') if output
217
- if block
218
- yield
219
- reset_io
220
- end
223
+ return unless block
224
+ yield
225
+ reset_io
221
226
  end
222
227
 
223
228
  ##
@@ -279,7 +284,8 @@ module Commander
279
284
 
280
285
  if Kernel.fork
281
286
  $stdin.reopen read
282
- write.close; read.close
287
+ write.close
288
+ read.close
283
289
  Kernel.select [$stdin]
284
290
  ENV['LESS'] = 'FSRX' unless ENV.key? 'LESS'
285
291
  pager = ENV['PAGER'] || 'less'
@@ -288,7 +294,8 @@ module Commander
288
294
  # subprocess
289
295
  $stdout.reopen write
290
296
  $stderr.reopen write if $stderr.tty?
291
- write.close; read.close
297
+ write.close
298
+ read.close
292
299
  end
293
300
  rescue NotImplementedError
294
301
  ensure
@@ -318,15 +325,17 @@ module Commander
318
325
 
319
326
  module AskForClass
320
327
  # All special cases in HighLine::Question#convert, except those that implement #parse
321
- ([Float, Integer, String, Symbol, Regexp, Array, File, Pathname] +
322
- # All Classes that respond to #parse
323
- Object.constants.map do |const|
324
- # const_get(:Config) issues a deprecation warning on ruby 1.8.7
325
- # TODO: clean up now that we're not supporting Ruby 1.8
326
- Object.const_get(const) unless const == :Config
327
- end.select do |const|
328
- const.class == Class && const.respond_to?(:parse)
329
- end).each do |klass|
328
+ (
329
+ [Float, Integer, String, Symbol, Regexp, Array, File, Pathname] +
330
+ # All Classes that respond to #parse
331
+ Object.constants.map do |const|
332
+ # const_get(:Config) issues a deprecation warning on ruby 1.8.7
333
+ # TODO: clean up now that we're not supporting Ruby 1.8
334
+ Object.const_get(const) unless const == :Config
335
+ end.select do |const|
336
+ const.class == Class && const.respond_to?(:parse)
337
+ end
338
+ ).each do |klass|
330
339
  define_method "ask_for_#{klass.to_s.downcase}" do |prompt|
331
340
  $terminal.ask(prompt, klass)
332
341
  end
@@ -337,8 +346,8 @@ module Commander
337
346
  # Substitute _hash_'s keys with their associated values in _str_.
338
347
 
339
348
  def replace_tokens(str, hash) #:nodoc:
340
- hash.inject str do |str, (key, value)|
341
- str.gsub ":#{key}", value.to_s
349
+ hash.inject(str) do |string, (key, value)|
350
+ string.gsub ":#{key}", value.to_s
342
351
  end
343
352
  end
344
353
 
@@ -465,8 +474,8 @@ module Commander
465
474
  step: @step,
466
475
  steps_remaining: steps_remaining,
467
476
  total_steps: @total_steps,
468
- time_elapsed: '%0.2fs' % time_elapsed,
469
- time_remaining: @step > 0 ? '%0.2fs' % time_remaining : ''
477
+ time_elapsed: format('%0.2fs', time_elapsed),
478
+ time_remaining: @step > 0 ? format('%0.2fs', time_remaining) : '',
470
479
  }.merge! @tokens
471
480
  end
472
481
 
@@ -474,13 +483,12 @@ module Commander
474
483
  # Output the progress bar.
475
484
 
476
485
  def show
477
- unless finished?
478
- erase_line
479
- if completed?
480
- $terminal.say UI.replace_tokens(@complete_message, generate_tokens) if @complete_message.is_a? String
481
- else
482
- $terminal.say UI.replace_tokens(@format, generate_tokens) << ' '
483
- end
486
+ return if finished?
487
+ erase_line
488
+ if completed?
489
+ $terminal.say UI.replace_tokens(@complete_message, generate_tokens) if @complete_message.is_a? String
490
+ else
491
+ $terminal.say UI.replace_tokens(@format, generate_tokens) << ' '
484
492
  end
485
493
  end
486
494
 
@@ -1,3 +1,3 @@
1
1
  module Commander
2
- VERSION = '4.3.0'
2
+ VERSION = '4.3.1'
3
3
  end
data/lib/commander.rb CHANGED
@@ -30,5 +30,6 @@ require 'commander/runner'
30
30
  require 'commander/command'
31
31
  require 'commander/help_formatters'
32
32
  require 'commander/platform'
33
+ require 'commander/delegates'
33
34
  require 'commander/methods'
34
35
  require 'commander/configure'
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Object do
4
4
  describe '#get_binding' do
5
5
  it 'should return the objects binding' do
6
- expect(lambda {}.get_binding).to be_instance_of(Binding)
6
+ expect(-> {}.get_binding).to be_instance_of(Binding)
7
7
  end
8
8
  end
9
9
 
data/spec/spec_helper.rb CHANGED
@@ -31,7 +31,7 @@ def create_test_command
31
31
  c.example 'description 2', 'command 2'
32
32
  c.option '-v', '--verbose', 'verbose description'
33
33
  c.when_called do |args, _options|
34
- 'test %s' % args.join
34
+ format('test %s', args.join)
35
35
  end
36
36
  end
37
37
  @command = command :test
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: commander
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.0
4
+ version: 4.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - TJ Holowaychuk
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-02-08 00:00:00.000000000 Z
12
+ date: 2015-03-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: highline
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 1.6.11
20
+ version: 1.7.1
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 1.6.11
27
+ version: 1.7.1
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rspec
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -156,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
156
  version: '0'
157
157
  requirements: []
158
158
  rubyforge_project:
159
- rubygems_version: 2.4.3
159
+ rubygems_version: 2.2.2
160
160
  signing_key:
161
161
  specification_version: 4
162
162
  summary: The complete solution for Ruby command-line executables