commander 4.5.0 → 4.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.rdoc +4 -0
- data/README.md +6 -6
- data/commander.gemspec +7 -0
- data/lib/commander/command.rb +3 -1
- data/lib/commander/runner.rb +1 -1
- data/lib/commander/version.rb +1 -1
- data/spec/command_spec.rb +27 -0
- data/spec/runner_spec.rb +42 -8
- data/spec/spec_helper.rb +10 -1
- metadata +9 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81b7ddc3a162a5470bc710c813ae0c774bc120154029d1a4fcbc3dbe5ffc13b9
|
4
|
+
data.tar.gz: 1375cade2955ac64e702c982572406a7b4f5e3e6e983bc4d52e5a19521c19e05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf813e48a0d891a9998d96bf92a82d4e771d69a147fd1a45cb9af96f1bf1237050d9a7ba552f35cb27c78e48086fd93f3ea696d4d8207a2b9d025f084c91cf88
|
7
|
+
data.tar.gz: ab019b9db4e5dfe26fedea6bc611c8ac7162827fdb402c025b1e68b80b05d19c1ad0563b90b303c64820ed136b9259ce9fcda6b38f35254fe6ce4cee86b23349
|
data/History.rdoc
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
[<img src="https://api.travis-ci.org/commander-rb/commander.svg" alt="Build Status" />](
|
2
|
-
[![Inline docs](
|
1
|
+
[<img src="https://api.travis-ci.org/commander-rb/commander.svg" alt="Build Status" />](https://travis-ci.org/commander-rb/commander)
|
2
|
+
[![Inline docs](https://inch-ci.org/github/commander-rb/commander.svg)](https://inch-ci.org/github/commander-rb/commander)
|
3
3
|
|
4
4
|
# Commander
|
5
5
|
|
@@ -243,8 +243,8 @@ end
|
|
243
243
|
## Growl Notifications
|
244
244
|
|
245
245
|
Commander provides methods for displaying Growl notifications. To use these
|
246
|
-
methods you need to install
|
247
|
-
the [growlnotify](
|
246
|
+
methods you need to install https://github.com/tj/growl which utilizes
|
247
|
+
the [growlnotify](https://growl.info/extras.php#growlnotify) executable. Note that
|
248
248
|
growl is auto-imported by Commander when available, no need to require.
|
249
249
|
|
250
250
|
```ruby
|
@@ -449,7 +449,7 @@ global_option '--config FILE'
|
|
449
449
|
|
450
450
|
## ASCII Tables
|
451
451
|
|
452
|
-
For feature rich ASCII tables for your terminal app check out the terminal-table gem at
|
452
|
+
For feature rich ASCII tables for your terminal app check out the terminal-table gem at https://github.com/tj/terminal-table
|
453
453
|
|
454
454
|
+----------+-------+----+--------+-----------------------+
|
455
455
|
| Terminal | Table | Is | Wicked | Awesome |
|
@@ -468,7 +468,7 @@ OR
|
|
468
468
|
## Contrib
|
469
469
|
|
470
470
|
Feel free to fork and request a pull, or submit a ticket
|
471
|
-
|
471
|
+
https://github.com/commander-rb/commander/issues
|
472
472
|
|
473
473
|
## License
|
474
474
|
|
data/commander.gemspec
CHANGED
@@ -12,6 +12,13 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.homepage = 'https://github.com/commander-rb/commander'
|
13
13
|
s.summary = 'The complete solution for Ruby command-line executables'
|
14
14
|
s.description = 'The complete solution for Ruby command-line executables. Commander bridges the gap between other terminal related libraries you know and love (OptionParser, HighLine), while providing many new features, and an elegant API.'
|
15
|
+
s.metadata = {
|
16
|
+
'bug_tracker_uri' => "#{s.homepage}/issues",
|
17
|
+
'changelog_uri' => "#{s.homepage}/blob/master/History.rdoc",
|
18
|
+
'documentation_uri' => "https://www.rubydoc.info/gems/commander/#{s.version}",
|
19
|
+
'homepage_uri' => s.homepage,
|
20
|
+
'source_code_uri' => "#{s.homepage}/tree/v#{s.version}",
|
21
|
+
}
|
15
22
|
|
16
23
|
s.files = `git ls-files`.split("\n")
|
17
24
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/commander/command.rb
CHANGED
@@ -4,6 +4,7 @@ module Commander
|
|
4
4
|
class Command
|
5
5
|
attr_accessor :name, :examples, :syntax, :description
|
6
6
|
attr_accessor :summary, :proxy_options, :options
|
7
|
+
attr_reader :global_options
|
7
8
|
|
8
9
|
##
|
9
10
|
# Options struct.
|
@@ -38,6 +39,7 @@ module Commander
|
|
38
39
|
def initialize(name)
|
39
40
|
@name, @examples, @when_called = name.to_s, [], []
|
40
41
|
@options, @proxy_options = [], []
|
42
|
+
@global_options = []
|
41
43
|
end
|
42
44
|
|
43
45
|
##
|
@@ -190,7 +192,7 @@ module Commander
|
|
190
192
|
# collected by the #option_proc.
|
191
193
|
|
192
194
|
def proxy_option_struct
|
193
|
-
proxy_options.each_with_object(Options.new) do |(option, value), options|
|
195
|
+
(global_options + proxy_options).each_with_object(Options.new) do |(option, value), options|
|
194
196
|
# options that are present will evaluate to true
|
195
197
|
value = true if value.nil?
|
196
198
|
options.__send__ :"#{option}=", value
|
data/lib/commander/runner.rb
CHANGED
@@ -395,7 +395,7 @@ module Commander
|
|
395
395
|
def global_option_proc(switches, &block)
|
396
396
|
lambda do |value|
|
397
397
|
unless active_command.nil?
|
398
|
-
active_command.
|
398
|
+
active_command.global_options << [Runner.switch_to_sym(switches.last), value]
|
399
399
|
end
|
400
400
|
yield value if block && !value.nil?
|
401
401
|
end
|
data/lib/commander/version.rb
CHANGED
data/spec/command_spec.rb
CHANGED
@@ -164,6 +164,33 @@ describe Commander::Command do
|
|
164
164
|
end
|
165
165
|
@command.run '--interval', '15'
|
166
166
|
end
|
167
|
+
|
168
|
+
describe 'given a global option' do
|
169
|
+
before do
|
170
|
+
@command.global_options << [:global_option, 'gvalue']
|
171
|
+
end
|
172
|
+
|
173
|
+
describe 'and no command specific arguments' do
|
174
|
+
it 'provides the global option to the command action' do
|
175
|
+
@command.when_called { |_, options| expect(options.global_option).to eq('gvalue') }
|
176
|
+
@command.run
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
describe 'and a command specific option' do
|
181
|
+
it 'provides the global option to the command action' do
|
182
|
+
@command.when_called { |_, options| expect(options.global_option).to eq('gvalue') }
|
183
|
+
@command.run '--verbose'
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
describe 'and a command specific argument' do
|
188
|
+
it 'provides the global option to the command action' do
|
189
|
+
@command.when_called { |_, options| expect(options.global_option).to eq('gvalue') }
|
190
|
+
@command.run 'argument'
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
167
194
|
end
|
168
195
|
end
|
169
196
|
end
|
data/spec/runner_spec.rb
CHANGED
@@ -132,6 +132,40 @@ describe Commander do
|
|
132
132
|
end.run!
|
133
133
|
expect(quiet).to be false
|
134
134
|
end
|
135
|
+
|
136
|
+
it 'should allow command arguments before the global option' do
|
137
|
+
config = nil
|
138
|
+
args = nil
|
139
|
+
new_command_runner 'foo', '--config', 'config-value', 'arg1', 'arg2' do
|
140
|
+
global_option('-c', '--config CONFIG', String)
|
141
|
+
command :foo do |c|
|
142
|
+
c.when_called do |arguments, options|
|
143
|
+
options.default(config: 'default')
|
144
|
+
args = arguments
|
145
|
+
config = options.config
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end.run!
|
149
|
+
expect(config).to eq('config-value')
|
150
|
+
expect(args).to eq(%w(arg1 arg2))
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'should allow command arguments after the global option' do
|
154
|
+
config = nil
|
155
|
+
args = nil
|
156
|
+
new_command_runner 'foo', 'arg1', 'arg2', '--config', 'config-value' do
|
157
|
+
global_option('-c', '--config CONFIG', String)
|
158
|
+
command :foo do |c|
|
159
|
+
c.when_called do |arguments, options|
|
160
|
+
options.default(config: 'default')
|
161
|
+
args = arguments
|
162
|
+
config = options.config
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end.run!
|
166
|
+
expect(config).to eq('config-value')
|
167
|
+
expect(args).to eq(%w(arg1 arg2))
|
168
|
+
end
|
135
169
|
end
|
136
170
|
|
137
171
|
describe '#parse_global_options' do
|
@@ -334,7 +368,7 @@ describe Commander do
|
|
334
368
|
new_command_runner 'foo' do
|
335
369
|
command(:foo) { |c| c.when_called { fail 'cookies!' } }
|
336
370
|
end.run!
|
337
|
-
end.to raise_error(
|
371
|
+
end.to raise_error(TestSystemExit, /error: cookies!. Use --trace/)
|
338
372
|
end
|
339
373
|
|
340
374
|
it 'should display callstack when using this switch' do
|
@@ -363,7 +397,7 @@ describe Commander do
|
|
363
397
|
new_command_runner 'help', '--trace' do
|
364
398
|
never_trace!
|
365
399
|
end.run!
|
366
|
-
end.to raise_error(
|
400
|
+
end.to raise_error(TestSystemExit, /invalid option: --trace/)
|
367
401
|
end
|
368
402
|
|
369
403
|
it 'should not prompt to use --trace switch on errors' do
|
@@ -373,7 +407,7 @@ describe Commander do
|
|
373
407
|
never_trace!
|
374
408
|
command(:foo) { |c| c.when_called { fail 'cookies!' } }
|
375
409
|
end.run!
|
376
|
-
rescue
|
410
|
+
rescue TestSystemExit => e
|
377
411
|
msg = e.message
|
378
412
|
end
|
379
413
|
expect(msg).to match(/error: cookies!/)
|
@@ -430,7 +464,7 @@ describe Commander do
|
|
430
464
|
it 'should output an invalid option message' do
|
431
465
|
expect do
|
432
466
|
run('test', '--invalid-option')
|
433
|
-
end.to raise_error(
|
467
|
+
end.to raise_error(TestSystemExit, /invalid option: --invalid-option/)
|
434
468
|
end
|
435
469
|
end
|
436
470
|
|
@@ -438,7 +472,7 @@ describe Commander do
|
|
438
472
|
it 'should output an invalid command message' do
|
439
473
|
expect do
|
440
474
|
run('foo')
|
441
|
-
end.to raise_error(
|
475
|
+
end.to raise_error(TestSystemExit, /invalid command. Use --help for more information/)
|
442
476
|
end
|
443
477
|
end
|
444
478
|
|
@@ -446,7 +480,7 @@ describe Commander do
|
|
446
480
|
it 'should output an invalid command message' do
|
447
481
|
expect do
|
448
482
|
run('help', 'does_not_exist')
|
449
|
-
end.to raise_error(
|
483
|
+
end.to raise_error(TestSystemExit, /invalid command. Use --help for more information/)
|
450
484
|
end
|
451
485
|
end
|
452
486
|
|
@@ -454,7 +488,7 @@ describe Commander do
|
|
454
488
|
it 'should output an invalid command message' do
|
455
489
|
expect do
|
456
490
|
run('--help', 'does_not_exist')
|
457
|
-
end.to raise_error(
|
491
|
+
end.to raise_error(TestSystemExit, /invalid command. Use --help for more information/)
|
458
492
|
end
|
459
493
|
end
|
460
494
|
|
@@ -462,7 +496,7 @@ describe Commander do
|
|
462
496
|
it 'should output an invalid option message' do
|
463
497
|
expect do
|
464
498
|
run('--help', 'test', '--invalid-option')
|
465
|
-
end.to raise_error(
|
499
|
+
end.to raise_error(TestSystemExit, /invalid option: --invalid-option/)
|
466
500
|
end
|
467
501
|
end
|
468
502
|
|
data/spec/spec_helper.rb
CHANGED
@@ -14,13 +14,22 @@ require 'commander'
|
|
14
14
|
require 'commander/methods'
|
15
15
|
|
16
16
|
# Mock terminal IO streams so we can spec against them
|
17
|
-
|
18
17
|
def mock_terminal
|
19
18
|
@input = StringIO.new
|
20
19
|
@output = StringIO.new
|
21
20
|
HighLine.default_instance = HighLine.new(@input, @output)
|
22
21
|
end
|
23
22
|
|
23
|
+
# Stub Kernel.abort
|
24
|
+
TestSystemExit = Class.new(RuntimeError)
|
25
|
+
module Commander
|
26
|
+
class Runner
|
27
|
+
def abort(message)
|
28
|
+
fail TestSystemExit, message
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
24
33
|
# Create test command for usage within several specs
|
25
34
|
|
26
35
|
def create_test_command
|
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.5.
|
4
|
+
version: 4.5.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: 2020-
|
12
|
+
date: 2020-03-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: highline
|
@@ -140,7 +140,12 @@ files:
|
|
140
140
|
homepage: https://github.com/commander-rb/commander
|
141
141
|
licenses:
|
142
142
|
- MIT
|
143
|
-
metadata:
|
143
|
+
metadata:
|
144
|
+
bug_tracker_uri: https://github.com/commander-rb/commander/issues
|
145
|
+
changelog_uri: https://github.com/commander-rb/commander/blob/master/History.rdoc
|
146
|
+
documentation_uri: https://www.rubydoc.info/gems/commander/4.5.1
|
147
|
+
homepage_uri: https://github.com/commander-rb/commander
|
148
|
+
source_code_uri: https://github.com/commander-rb/commander/tree/v4.5.1
|
144
149
|
post_install_message:
|
145
150
|
rdoc_options: []
|
146
151
|
require_paths:
|
@@ -156,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
161
|
- !ruby/object:Gem::Version
|
157
162
|
version: '0'
|
158
163
|
requirements: []
|
159
|
-
rubygems_version: 3.0.
|
164
|
+
rubygems_version: 3.0.6
|
160
165
|
signing_key:
|
161
166
|
specification_version: 4
|
162
167
|
summary: The complete solution for Ruby command-line executables
|