cri 2.7.0 → 2.7.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 +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
|