cri 2.7.0 → 2.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -3
- data/Gemfile.lock +15 -13
- data/NEWS.md +7 -0
- data/README.adoc +5 -5
- data/Rakefile +5 -3
- data/cri.gemspec +2 -2
- data/lib/cri.rb +1 -3
- data/lib/cri/argument_array.rb +0 -2
- data/lib/cri/command.rb +17 -19
- data/lib/cri/command_dsl.rb +16 -18
- data/lib/cri/command_runner.rb +1 -3
- data/lib/cri/commands/basic_help.rb +5 -7
- data/lib/cri/commands/basic_root.rb +0 -2
- data/lib/cri/core_ext.rb +0 -2
- data/lib/cri/core_ext/string.rb +0 -2
- data/lib/cri/help_renderer.rb +6 -13
- data/lib/cri/option_parser.rb +10 -12
- data/lib/cri/platform.rb +0 -2
- data/lib/cri/string_formatter.rb +1 -3
- data/lib/cri/version.rb +1 -3
- data/test/helper.rb +3 -5
- data/test/test_argument_array.rb +0 -2
- data/test/test_base.rb +1 -4
- data/test/test_basic_help.rb +0 -2
- data/test/test_basic_root.rb +1 -3
- data/test/test_command.rb +25 -27
- data/test/test_command_dsl.rb +30 -32
- data/test/test_command_runner.rb +2 -4
- data/test/test_option_parser.rb +60 -62
- data/test/test_string_formatter.rb +0 -2
- metadata +6 -7
data/lib/cri/core_ext.rb
CHANGED
data/lib/cri/core_ext/string.rb
CHANGED
data/lib/cri/help_renderer.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module Cri
|
4
2
|
# The {HelpRenderer} class is responsible for generating a string containing
|
5
3
|
# the help for a given command, intended to be printed on the command line.
|
@@ -86,22 +84,21 @@ module Cri
|
|
86
84
|
length = shown_subcommands.map { |c| fmt.format_as_command(c.name, @io).size }.max
|
87
85
|
|
88
86
|
# Command
|
89
|
-
shown_subcommands.sort_by
|
87
|
+
shown_subcommands.sort_by(&:name).each do |cmd|
|
90
88
|
text <<
|
91
89
|
format(
|
92
90
|
" %-#{length + DESC_INDENT}s %s\n",
|
93
91
|
fmt.format_as_command(cmd.name, @io),
|
94
|
-
cmd.summary
|
92
|
+
cmd.summary,
|
93
|
+
)
|
95
94
|
end
|
96
95
|
|
97
96
|
# Hidden notice
|
98
97
|
unless @is_verbose
|
99
98
|
diff = @cmd.subcommands.size - shown_subcommands.size
|
100
|
-
|
101
|
-
when 0
|
102
|
-
when 1
|
99
|
+
if diff == 1
|
103
100
|
text << " (1 hidden command omitted; show it with --verbose)\n"
|
104
|
-
|
101
|
+
elsif diff > 1
|
105
102
|
text << " (#{diff} hidden commands omitted; show them with --verbose)\n"
|
106
103
|
end
|
107
104
|
end
|
@@ -145,7 +142,7 @@ module Cri
|
|
145
142
|
return if defs.empty?
|
146
143
|
|
147
144
|
text << "\n"
|
148
|
-
text << fmt.format_as_title(
|
145
|
+
text << fmt.format_as_title(name.to_s, @io)
|
149
146
|
text << "\n"
|
150
147
|
|
151
148
|
ordered_defs = defs.sort_by { |x| x[:short] || x[:long] }
|
@@ -164,8 +161,6 @@ module Cri
|
|
164
161
|
'<value>'
|
165
162
|
when :optional
|
166
163
|
'[<value>]'
|
167
|
-
else
|
168
|
-
nil
|
169
164
|
end
|
170
165
|
|
171
166
|
if value_postfix
|
@@ -182,8 +177,6 @@ module Cri
|
|
182
177
|
'=<value>'
|
183
178
|
when :optional
|
184
179
|
'[=<value>]'
|
185
|
-
else
|
186
|
-
nil
|
187
180
|
end
|
188
181
|
|
189
182
|
if value_postfix
|
data/lib/cri/option_parser.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module Cri
|
4
|
-
# Cri::OptionParser is used for parsing
|
2
|
+
# Cri::OptionParser is used for parsing command-line options.
|
5
3
|
#
|
6
4
|
# Option definitions are hashes with the keys `:short`, `:long` and
|
7
5
|
# `:argument` (optionally `:description` but this is not used by the
|
@@ -19,7 +17,7 @@ module Cri
|
|
19
17
|
# { :short => 'p', :long => 'port', :argument => :required, :multiple => false },
|
20
18
|
# ]
|
21
19
|
#
|
22
|
-
# For example, the following
|
20
|
+
# For example, the following command-line options (which should not be
|
23
21
|
# passed as a string, but as an array of strings):
|
24
22
|
#
|
25
23
|
# foo -xyz -a hiss -s -m please --level 50 --father=ani -n luke squeak
|
@@ -92,11 +90,11 @@ module Cri
|
|
92
90
|
# @return [Array] The not yet parsed options and arguments.
|
93
91
|
attr_reader :unprocessed_arguments_and_options
|
94
92
|
|
95
|
-
# Parses the
|
93
|
+
# Parses the command-line arguments. See the instance `parse` method for
|
96
94
|
# details.
|
97
95
|
#
|
98
96
|
# @param [Array<String>] arguments_and_options An array containing the
|
99
|
-
#
|
97
|
+
# command-line arguments (will probably be `ARGS` for a root command)
|
100
98
|
#
|
101
99
|
# @param [Array<Hash>] definitions An array of option definitions
|
102
100
|
#
|
@@ -108,7 +106,7 @@ module Cri
|
|
108
106
|
# Creates a new parser with the given options/arguments and definitions.
|
109
107
|
#
|
110
108
|
# @param [Array<String>] arguments_and_options An array containing the
|
111
|
-
#
|
109
|
+
# command-line arguments (will probably be `ARGS` for a root command)
|
112
110
|
#
|
113
111
|
# @param [Array<Hash>] definitions An array of option definitions
|
114
112
|
def initialize(arguments_and_options, definitions)
|
@@ -146,7 +144,7 @@ module Cri
|
|
146
144
|
@running = false
|
147
145
|
end
|
148
146
|
|
149
|
-
# Parses the
|
147
|
+
# Parses the command-line arguments into options and arguments.
|
150
148
|
#
|
151
149
|
# During parsing, two errors can be raised:
|
152
150
|
#
|
@@ -199,7 +197,7 @@ module Cri
|
|
199
197
|
|
200
198
|
# Find definition
|
201
199
|
definition = @definitions.find { |d| d[:long] == option_key }
|
202
|
-
|
200
|
+
raise IllegalOptionError.new(option_key) if definition.nil?
|
203
201
|
|
204
202
|
if [:required, :optional].include?(definition[:argument])
|
205
203
|
# Get option value if necessary
|
@@ -223,11 +221,11 @@ module Cri
|
|
223
221
|
option_keys.each do |option_key|
|
224
222
|
# Find definition
|
225
223
|
definition = @definitions.find { |d| d[:short] == option_key }
|
226
|
-
|
224
|
+
raise IllegalOptionError.new(option_key) if definition.nil?
|
227
225
|
|
228
226
|
if option_keys.length > 1 && definition[:argument] == :required
|
229
227
|
# This is a combined option and it requires an argument, so complain
|
230
|
-
|
228
|
+
raise OptionRequiresAnArgumentError.new(option_key)
|
231
229
|
elsif [:required, :optional].include?(definition[:argument])
|
232
230
|
# Get option value
|
233
231
|
option_value = find_option_value(definition, option_key)
|
@@ -245,7 +243,7 @@ module Cri
|
|
245
243
|
option_value = @unprocessed_arguments_and_options.shift
|
246
244
|
if option_value.nil? || option_value =~ /^-/
|
247
245
|
if definition[:argument] == :required
|
248
|
-
|
246
|
+
raise OptionRequiresAnArgumentError.new(option_key)
|
249
247
|
else
|
250
248
|
@unprocessed_arguments_and_options.unshift(option_value)
|
251
249
|
option_value = true
|
data/lib/cri/platform.rb
CHANGED
data/lib/cri/string_formatter.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'colored'
|
4
2
|
|
5
3
|
module Cri
|
@@ -21,7 +19,7 @@ module Cri
|
|
21
19
|
end
|
22
20
|
end
|
23
21
|
|
24
|
-
paragraphs.reject
|
22
|
+
paragraphs.reject(&:empty?).map { |p| p.join(' ') }
|
25
23
|
end
|
26
24
|
|
27
25
|
# Word-wraps and indents the string.
|
data/lib/cri/version.rb
CHANGED
data/test/helper.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'coveralls'
|
4
2
|
Coveralls.wear!
|
5
3
|
|
@@ -20,16 +18,16 @@ module Cri
|
|
20
18
|
uncapture_io(*@orig_io)
|
21
19
|
end
|
22
20
|
|
23
|
-
def capture_io_while
|
21
|
+
def capture_io_while
|
24
22
|
orig_io = capture_io
|
25
|
-
|
23
|
+
yield
|
26
24
|
[$stdout.string, $stderr.string]
|
27
25
|
ensure
|
28
26
|
uncapture_io(*orig_io)
|
29
27
|
end
|
30
28
|
|
31
29
|
def lines(string)
|
32
|
-
string.scan(/^.*\n/).map
|
30
|
+
string.scan(/^.*\n/).map(&:chomp)
|
33
31
|
end
|
34
32
|
|
35
33
|
private
|
data/test/test_argument_array.rb
CHANGED
data/test/test_base.rb
CHANGED
data/test/test_basic_help.rb
CHANGED
data/test/test_basic_root.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module Cri
|
4
2
|
class BasicRootTestCase < Cri::TestCase
|
5
3
|
def test_run_with_help
|
@@ -7,7 +5,7 @@ module Cri
|
|
7
5
|
|
8
6
|
stdout, _stderr = capture_io_while do
|
9
7
|
assert_raises SystemExit do
|
10
|
-
cmd.run(%w(
|
8
|
+
cmd.run(%w(-h))
|
11
9
|
end
|
12
10
|
end
|
13
11
|
|
data/test/test_command.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module Cri
|
4
2
|
class CommandTestCase < Cri::TestCase
|
5
3
|
def simple_cmd
|
@@ -9,7 +7,7 @@ module Cri
|
|
9
7
|
summary 'does stuff'
|
10
8
|
description 'This command does a lot of stuff.'
|
11
9
|
|
12
|
-
option
|
10
|
+
option :a, :aaa, 'opt a', argument: :optional do |value, cmd|
|
13
11
|
$stdout.puts "#{cmd.name}:#{value}"
|
14
12
|
end
|
15
13
|
required :b, :bbb, 'opt b'
|
@@ -31,7 +29,7 @@ module Cri
|
|
31
29
|
|
32
30
|
def bare_cmd
|
33
31
|
Cri::Command.define do
|
34
|
-
name
|
32
|
+
name 'moo'
|
35
33
|
|
36
34
|
run do |_opts, _args|
|
37
35
|
end
|
@@ -45,7 +43,7 @@ module Cri
|
|
45
43
|
summary 'does super stuff'
|
46
44
|
description 'This command does super stuff.'
|
47
45
|
|
48
|
-
option
|
46
|
+
option :a, :aaa, 'opt a', argument: :optional do |value, cmd|
|
49
47
|
$stdout.puts "#{cmd.name}:#{value}"
|
50
48
|
end
|
51
49
|
required :b, :bbb, 'opt b'
|
@@ -61,7 +59,7 @@ module Cri
|
|
61
59
|
summary 'does subby stuff'
|
62
60
|
description 'This command does subby stuff.'
|
63
61
|
|
64
|
-
option :m, :mmm, 'opt m', :
|
62
|
+
option :m, :mmm, 'opt m', argument: :optional
|
65
63
|
required :n, :nnn, 'opt n'
|
66
64
|
optional :o, :ooo, 'opt o'
|
67
65
|
flag :p, :ppp, 'opt p'
|
@@ -148,7 +146,7 @@ module Cri
|
|
148
146
|
def test_invoke_simple_with_missing_opt_arg
|
149
147
|
out, err = capture_io_while do
|
150
148
|
assert_raises SystemExit do
|
151
|
-
simple_cmd.run(%w(
|
149
|
+
simple_cmd.run(%w(-b))
|
152
150
|
end
|
153
151
|
end
|
154
152
|
|
@@ -159,7 +157,7 @@ module Cri
|
|
159
157
|
def test_invoke_simple_with_illegal_opt
|
160
158
|
out, err = capture_io_while do
|
161
159
|
assert_raises SystemExit do
|
162
|
-
simple_cmd.run(%w(
|
160
|
+
simple_cmd.run(%w(-z))
|
163
161
|
end
|
164
162
|
end
|
165
163
|
|
@@ -169,7 +167,7 @@ module Cri
|
|
169
167
|
|
170
168
|
def test_invoke_simple_with_opt_with_block
|
171
169
|
out, err = capture_io_while do
|
172
|
-
simple_cmd.run(%w(
|
170
|
+
simple_cmd.run(%w(-a 123))
|
173
171
|
end
|
174
172
|
|
175
173
|
assert_equal ['moo:123', 'Awesome moo!', '', 'aaa=123'], lines(out)
|
@@ -189,7 +187,7 @@ module Cri
|
|
189
187
|
|
190
188
|
def test_invoke_nested_with_correct_command_name
|
191
189
|
out, err = capture_io_while do
|
192
|
-
nested_cmd.run(%w(
|
190
|
+
nested_cmd.run(%w(sub))
|
193
191
|
end
|
194
192
|
|
195
193
|
assert_equal ['Sub-awesome!', '', ''], lines(out)
|
@@ -199,7 +197,7 @@ module Cri
|
|
199
197
|
def test_invoke_nested_with_incorrect_command_name
|
200
198
|
out, err = capture_io_while do
|
201
199
|
assert_raises SystemExit do
|
202
|
-
nested_cmd.run(%w(
|
200
|
+
nested_cmd.run(%w(oogabooga))
|
203
201
|
end
|
204
202
|
end
|
205
203
|
|
@@ -210,7 +208,7 @@ module Cri
|
|
210
208
|
def test_invoke_nested_with_ambiguous_command_name
|
211
209
|
out, err = capture_io_while do
|
212
210
|
assert_raises SystemExit do
|
213
|
-
nested_cmd.run(%w(
|
211
|
+
nested_cmd.run(%w(s))
|
214
212
|
end
|
215
213
|
end
|
216
214
|
|
@@ -220,7 +218,7 @@ module Cri
|
|
220
218
|
|
221
219
|
def test_invoke_nested_with_alias
|
222
220
|
out, err = capture_io_while do
|
223
|
-
nested_cmd.run(%w(
|
221
|
+
nested_cmd.run(%w(sup))
|
224
222
|
end
|
225
223
|
|
226
224
|
assert_equal ['Sub-awesome!', '', ''], lines(out)
|
@@ -229,7 +227,7 @@ module Cri
|
|
229
227
|
|
230
228
|
def test_invoke_nested_with_options_before_command
|
231
229
|
out, err = capture_io_while do
|
232
|
-
nested_cmd.run(%w(
|
230
|
+
nested_cmd.run(%w(-a 666 sub))
|
233
231
|
end
|
234
232
|
|
235
233
|
assert_equal ['super:666', 'Sub-awesome!', '', 'aaa=666'], lines(out)
|
@@ -245,7 +243,7 @@ module Cri
|
|
245
243
|
assert_equal [], lines(err)
|
246
244
|
|
247
245
|
out, err = capture_io_while do
|
248
|
-
nested_cmd_with_run_block.run(%w(
|
246
|
+
nested_cmd_with_run_block.run(%w(sub))
|
249
247
|
end
|
250
248
|
|
251
249
|
assert_equal ['sub'], lines(out)
|
@@ -354,7 +352,7 @@ module Cri
|
|
354
352
|
def test_help_with_multiple_groups
|
355
353
|
help = nested_cmd.subcommands.find { |cmd| cmd.name == 'sub' }.help
|
356
354
|
|
357
|
-
assert_match(/OPTIONS.*OPTIONS FOR SUPER/m,
|
355
|
+
assert_match(/OPTIONS.*OPTIONS FOR SUPER/m, help)
|
358
356
|
end
|
359
357
|
|
360
358
|
def test_modify_with_block_argument
|
@@ -377,7 +375,7 @@ module Cri
|
|
377
375
|
|
378
376
|
cmd = Cri::Command.define do
|
379
377
|
name 'build'
|
380
|
-
flag
|
378
|
+
flag nil, :longflag, 'This is an option with a very long description that should be wrapped'
|
381
379
|
end
|
382
380
|
help = cmd.help
|
383
381
|
|
@@ -469,9 +467,9 @@ module Cri
|
|
469
467
|
assert cmd.help.include?('hidden command omitted')
|
470
468
|
refute cmd.help.include?('old-and-deprecated')
|
471
469
|
|
472
|
-
refute cmd.help(:
|
473
|
-
refute cmd.help(:
|
474
|
-
assert cmd.help(:
|
470
|
+
refute cmd.help(verbose: true).include?('hidden commands omitted')
|
471
|
+
refute cmd.help(verbose: true).include?('hidden command omitted')
|
472
|
+
assert cmd.help(verbose: true).include?('old-and-deprecated')
|
475
473
|
end
|
476
474
|
|
477
475
|
def test_hidden_commands_multiple
|
@@ -505,13 +503,13 @@ module Cri
|
|
505
503
|
refute cmd.help.include?('old-and-deprecated')
|
506
504
|
refute cmd.help.include?('ancient-and-deprecated')
|
507
505
|
|
508
|
-
refute cmd.help(:
|
509
|
-
refute cmd.help(:
|
510
|
-
assert cmd.help(:
|
511
|
-
assert cmd.help(:
|
506
|
+
refute cmd.help(verbose: true).include?('hidden commands omitted')
|
507
|
+
refute cmd.help(verbose: true).include?('hidden command omitted')
|
508
|
+
assert cmd.help(verbose: true).include?('old-and-deprecated')
|
509
|
+
assert cmd.help(verbose: true).include?('ancient-and-deprecated')
|
512
510
|
|
513
511
|
pattern = /ancient-and-deprecated.*first.*old-and-deprecated/m
|
514
|
-
assert_match(pattern, cmd.help(:
|
512
|
+
assert_match(pattern, cmd.help(verbose: true))
|
515
513
|
end
|
516
514
|
|
517
515
|
def test_run_with_raw_args
|
@@ -523,7 +521,7 @@ module Cri
|
|
523
521
|
end
|
524
522
|
|
525
523
|
out, _err = capture_io_while do
|
526
|
-
cmd.run(%w(
|
524
|
+
cmd.run(%w(foo -- bar))
|
527
525
|
end
|
528
526
|
assert_equal "args=foo,bar args.raw=foo,--,bar\n", out
|
529
527
|
end
|
@@ -549,7 +547,7 @@ module Cri
|
|
549
547
|
end
|
550
548
|
|
551
549
|
out, _err = capture_io_while do
|
552
|
-
cmd.run(%w(
|
550
|
+
cmd.run(%w(foo -- bar))
|
553
551
|
end
|
554
552
|
assert_equal "args=foo,bar args.raw=foo,--,bar\n", out
|
555
553
|
end
|
data/test/test_command_dsl.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module Cri
|
4
2
|
class CommandDSLTestCase < Cri::TestCase
|
5
3
|
def test_create_command
|
@@ -11,12 +9,12 @@ module Cri
|
|
11
9
|
summary 'does stuff'
|
12
10
|
description 'This command does a lot of stuff.'
|
13
11
|
|
14
|
-
option :a, :aaa, 'opt a', :
|
12
|
+
option :a, :aaa, 'opt a', argument: :optional, multiple: true
|
15
13
|
required :b, :bbb, 'opt b'
|
16
14
|
optional :c, :ccc, 'opt c'
|
17
15
|
flag :d, :ddd, 'opt d'
|
18
16
|
forbidden :e, :eee, 'opt e'
|
19
|
-
flag :f, :fff, 'opt f', :
|
17
|
+
flag :f, :fff, 'opt f', hidden: true
|
20
18
|
|
21
19
|
run do |_opts, _args|
|
22
20
|
$did_it_work = :probably
|
@@ -26,7 +24,7 @@ module Cri
|
|
26
24
|
|
27
25
|
# Run
|
28
26
|
$did_it_work = :sadly_not
|
29
|
-
command.run(%w(
|
27
|
+
command.run(%w(-a x -b y -c -d -e))
|
30
28
|
assert_equal :probably, $did_it_work
|
31
29
|
|
32
30
|
# Check
|
@@ -37,13 +35,13 @@ module Cri
|
|
37
35
|
|
38
36
|
# Check options
|
39
37
|
expected_option_definitions = Set.new([
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
38
|
+
{ short: 'a', long: 'aaa', desc: 'opt a', argument: :optional, multiple: true, hidden: false, block: nil },
|
39
|
+
{ short: 'b', long: 'bbb', desc: 'opt b', argument: :required, multiple: false, hidden: false, block: nil },
|
40
|
+
{ short: 'c', long: 'ccc', desc: 'opt c', argument: :optional, multiple: false, hidden: false, block: nil },
|
41
|
+
{ short: 'd', long: 'ddd', desc: 'opt d', argument: :forbidden, multiple: false, hidden: false, block: nil },
|
42
|
+
{ short: 'e', long: 'eee', desc: 'opt e', argument: :forbidden, multiple: false, hidden: false, block: nil },
|
43
|
+
{ short: 'f', long: 'fff', desc: 'opt f', argument: :forbidden, multiple: false, hidden: true, block: nil },
|
44
|
+
])
|
47
45
|
actual_option_definitions = Set.new(command.option_definitions)
|
48
46
|
assert_equal expected_option_definitions, actual_option_definitions
|
49
47
|
end
|
@@ -68,14 +66,14 @@ module Cri
|
|
68
66
|
|
69
67
|
# Run
|
70
68
|
$did_it_work = :sadly_not
|
71
|
-
command.run(%w(
|
69
|
+
command.run(%w(-s --long))
|
72
70
|
assert_equal :probably, $did_it_work
|
73
71
|
|
74
72
|
# Check options
|
75
73
|
expected_option_definitions = Set.new([
|
76
|
-
|
77
|
-
|
78
|
-
|
74
|
+
{ short: 's', long: nil, desc: 'short', argument: :forbidden, multiple: false, hidden: false, block: nil },
|
75
|
+
{ short: nil, long: 'long', desc: 'long', argument: :forbidden, multiple: false, hidden: false, block: nil },
|
76
|
+
])
|
79
77
|
actual_option_definitions = Set.new(command.option_definitions)
|
80
78
|
assert_equal expected_option_definitions, actual_option_definitions
|
81
79
|
end
|
@@ -84,9 +82,9 @@ module Cri
|
|
84
82
|
# Define
|
85
83
|
dsl = Cri::CommandDSL.new
|
86
84
|
dsl.instance_eval do
|
87
|
-
flag :f, :flag, 'flag', :
|
88
|
-
required :r, :required, 'req', :
|
89
|
-
optional :o, :optional, 'opt', :
|
85
|
+
flag :f, :flag, 'flag', multiple: true
|
86
|
+
required :r, :required, 'req', multiple: true
|
87
|
+
optional :o, :optional, 'opt', multiple: true
|
90
88
|
|
91
89
|
run { |_opts, _args| }
|
92
90
|
end
|
@@ -94,10 +92,10 @@ module Cri
|
|
94
92
|
|
95
93
|
# Check options
|
96
94
|
expected_option_definitions = Set.new([
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
95
|
+
{ short: 'f', long: 'flag', desc: 'flag', argument: :forbidden, multiple: true, hidden: false, block: nil },
|
96
|
+
{ short: 'r', long: 'required', desc: 'req', argument: :required, multiple: true, hidden: false, block: nil },
|
97
|
+
{ short: 'o', long: 'optional', desc: 'opt', argument: :optional, multiple: true, hidden: false, block: nil },
|
98
|
+
])
|
101
99
|
actual_option_definitions = Set.new(command.option_definitions)
|
102
100
|
assert_equal expected_option_definitions, actual_option_definitions
|
103
101
|
end
|
@@ -106,9 +104,9 @@ module Cri
|
|
106
104
|
# Define
|
107
105
|
dsl = Cri::CommandDSL.new
|
108
106
|
dsl.instance_eval do
|
109
|
-
flag :f, :flag, 'flag', :
|
110
|
-
required :r, :required, 'req', :
|
111
|
-
optional :o, :optional, 'opt', :
|
107
|
+
flag :f, :flag, 'flag', hidden: true
|
108
|
+
required :r, :required, 'req', hidden: true
|
109
|
+
optional :o, :optional, 'opt', hidden: true
|
112
110
|
|
113
111
|
run { |_opts, _args| }
|
114
112
|
end
|
@@ -116,10 +114,10 @@ module Cri
|
|
116
114
|
|
117
115
|
# Check options
|
118
116
|
expected_option_definitions = Set.new([
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
117
|
+
{ short: 'f', long: 'flag', desc: 'flag', argument: :forbidden, multiple: false, hidden: true, block: nil },
|
118
|
+
{ short: 'r', long: 'required', desc: 'req', argument: :required, multiple: false, hidden: true, block: nil },
|
119
|
+
{ short: 'o', long: 'optional', desc: 'opt', argument: :optional, multiple: false, hidden: true, block: nil },
|
120
|
+
])
|
123
121
|
actual_option_definitions = Set.new(command.option_definitions)
|
124
122
|
assert_equal expected_option_definitions, actual_option_definitions
|
125
123
|
end
|
@@ -175,7 +173,7 @@ module Cri
|
|
175
173
|
command = dsl.command
|
176
174
|
|
177
175
|
# Check
|
178
|
-
assert_equal %w(
|
176
|
+
assert_equal %w(aah moo), command.aliases.sort
|
179
177
|
end
|
180
178
|
|
181
179
|
def test_run_arity
|
@@ -204,7 +202,7 @@ module Cri
|
|
204
202
|
|
205
203
|
# Check
|
206
204
|
$did_it_work = false
|
207
|
-
command.run(%w(
|
205
|
+
command.run(%w(certainly))
|
208
206
|
assert_equal 'certainly', $did_it_work
|
209
207
|
end
|
210
208
|
end
|