cri 2.12.0 → 2.13.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 +4 -4
- data/NEWS.md +6 -0
- data/README.md +24 -0
- data/lib/cri/argument_list.rb +4 -3
- data/lib/cri/command.rb +7 -0
- data/lib/cri/command_dsl.rb +37 -0
- data/lib/cri/option_parser.rb +3 -2
- data/lib/cri/version.rb +1 -1
- data/test/test_argument_list.rb +23 -8
- data/test/test_command.rb +42 -0
- data/test/test_command_dsl.rb +30 -0
- data/test/test_option_parser.rb +43 -43
- metadata +2 -3
- data/Gemfile.lock +0 -64
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2aa633b78bf3bb39d2ddc9c5abc1ce94f27dd57bb1d130336acc58c1ae83ffcf
|
4
|
+
data.tar.gz: 2cc7102d387382bdfe15a0ccdb080d92c989f77716d217c0899a3ec688090886
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82e32293ba6c802449eeb1731742250bb5f5503cfdd1d05d8fd2e1b113ee3704e39a684cf9d87adf02c26becb95209bb34f32bc749e09017fb31b10dc5abde72
|
7
|
+
data.tar.gz: 5a51c230c68d3a4612eaae905605448997133418b12a703a1b154ac6c39a7e67e94305bbd680edfd6332b8fa806d9e3b94eb7d7c54529b0bc868f081f295d246
|
data/NEWS.md
CHANGED
data/README.md
CHANGED
@@ -257,6 +257,30 @@ end
|
|
257
257
|
The command in this example has one parameter named `filename`. This means that
|
258
258
|
the command takes a single argument, named `filename`.
|
259
259
|
|
260
|
+
If no parameters are specified, Cri performs no argument parsing or validation; any number of arguments is allowed. To explicitly specify that a command has no parameters, use `#no_params`:
|
261
|
+
|
262
|
+
```ruby
|
263
|
+
name 'reset'
|
264
|
+
usage 'reset'
|
265
|
+
summary 'resets the site'
|
266
|
+
description '…'
|
267
|
+
no_params
|
268
|
+
|
269
|
+
run do |opts, args, cmd|
|
270
|
+
puts "Resetting…"
|
271
|
+
end
|
272
|
+
```
|
273
|
+
|
274
|
+
```
|
275
|
+
% my-tool reset x
|
276
|
+
reset: incorrect number of arguments given: expected 0, but got 1
|
277
|
+
% my-tool reset
|
278
|
+
Resetting…
|
279
|
+
%
|
280
|
+
```
|
281
|
+
|
282
|
+
A future version of Cri will likely make `#no_params` the default behavior.
|
283
|
+
|
260
284
|
(*Why the distinction between argument and parameter?* A parameter is a name, e.g. `filename`, while an argument is a value for a parameter, e.g. `kitten.jpg`.)
|
261
285
|
|
262
286
|
### The run block
|
data/lib/cri/argument_list.rb
CHANGED
@@ -17,8 +17,9 @@ module Cri
|
|
17
17
|
|
18
18
|
include Enumerable
|
19
19
|
|
20
|
-
def initialize(raw_arguments, param_defns)
|
20
|
+
def initialize(raw_arguments, explicitly_no_params, param_defns)
|
21
21
|
@raw_arguments = raw_arguments
|
22
|
+
@explicitly_no_params = explicitly_no_params
|
22
23
|
@param_defns = param_defns
|
23
24
|
|
24
25
|
load
|
@@ -56,8 +57,8 @@ module Cri
|
|
56
57
|
@arguments_array = @raw_arguments.reject { |a| a == '--' }.freeze
|
57
58
|
@arguments_hash = {}
|
58
59
|
|
59
|
-
if @param_defns.empty?
|
60
|
-
#
|
60
|
+
if !@explicitly_no_params && @param_defns.empty?
|
61
|
+
# No parameters defined; ignore
|
61
62
|
return
|
62
63
|
end
|
63
64
|
|
data/lib/cri/command.rb
CHANGED
@@ -93,6 +93,10 @@ module Cri
|
|
93
93
|
# @return [Array<Hash>] The list of parameter definitions
|
94
94
|
attr_accessor :parameter_definitions
|
95
95
|
|
96
|
+
# @return [Boolean] Whether or not this command has parameters
|
97
|
+
attr_accessor :explicitly_no_params
|
98
|
+
alias explicitly_no_params? explicitly_no_params
|
99
|
+
|
96
100
|
# @return [Proc] The block that should be executed when invoking this
|
97
101
|
# command (ignored for commands with subcommands)
|
98
102
|
attr_accessor :block
|
@@ -151,6 +155,7 @@ module Cri
|
|
151
155
|
@commands = Set.new
|
152
156
|
@option_definitions = Set.new
|
153
157
|
@parameter_definitions = []
|
158
|
+
@explicitly_no_params = false
|
154
159
|
@default_subcommand_name = nil
|
155
160
|
end
|
156
161
|
|
@@ -319,6 +324,7 @@ module Cri
|
|
319
324
|
opts_and_args,
|
320
325
|
global_option_definitions,
|
321
326
|
parameter_definitions,
|
327
|
+
explicitly_no_params?,
|
322
328
|
)
|
323
329
|
handle_errors_while { parser.run }
|
324
330
|
local_opts = parser.options
|
@@ -378,6 +384,7 @@ module Cri
|
|
378
384
|
opts_and_args,
|
379
385
|
global_option_definitions,
|
380
386
|
parameter_definitions,
|
387
|
+
explicitly_no_params?,
|
381
388
|
)
|
382
389
|
parser.delegate = delegate
|
383
390
|
handle_errors_while { parser.run }
|
data/lib/cri/command_dsl.rb
CHANGED
@@ -4,6 +4,31 @@ module Cri
|
|
4
4
|
# The command DSL is a class that is used for building and modifying
|
5
5
|
# commands.
|
6
6
|
class CommandDSL
|
7
|
+
# Error that will be raised when specifying a parameter after the command is
|
8
|
+
# already declared as taken no params.
|
9
|
+
class AlreadySpecifiedAsNoParams < Cri::Error
|
10
|
+
def initialize(param, command)
|
11
|
+
@param = param
|
12
|
+
@command = command
|
13
|
+
end
|
14
|
+
|
15
|
+
def message
|
16
|
+
"Attempted to specify a parameter #{@param.inspect} to the command #{@command.name.inspect}, which is already specified as taking no params. Suggestion: remove the #no_params call."
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Error that will be raised when declaring the command as taking no
|
21
|
+
# parameters, when the command is already declared with parameters.
|
22
|
+
class AlreadySpecifiedWithParams < Cri::Error
|
23
|
+
def initialize(command)
|
24
|
+
@command = command
|
25
|
+
end
|
26
|
+
|
27
|
+
def message
|
28
|
+
"Attempted to declare the command #{@command.name.inspect} as taking no parameters, but some parameters are already declared for this command. Suggestion: remove the #no_params call."
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
7
32
|
# @return [Cri::Command] The built command
|
8
33
|
attr_reader :command
|
9
34
|
|
@@ -146,9 +171,21 @@ module Cri
|
|
146
171
|
#
|
147
172
|
# @param [Symbol] name The name of the parameter
|
148
173
|
def param(name)
|
174
|
+
if @command.explicitly_no_params?
|
175
|
+
raise AlreadySpecifiedAsNoParams.new(name, @command)
|
176
|
+
end
|
177
|
+
|
149
178
|
@command.parameter_definitions << Cri::ParamDefinition.new(name: name)
|
150
179
|
end
|
151
180
|
|
181
|
+
def no_params
|
182
|
+
if @command.parameter_definitions.any?
|
183
|
+
raise AlreadySpecifiedWithParams.new(@command)
|
184
|
+
end
|
185
|
+
|
186
|
+
@command.explicitly_no_params = true
|
187
|
+
end
|
188
|
+
|
152
189
|
# Adds a new option with a required argument to the command. If a block is
|
153
190
|
# given, it will be executed when the option is successfully parsed.
|
154
191
|
#
|
data/lib/cri/option_parser.rb
CHANGED
@@ -114,10 +114,11 @@ module Cri
|
|
114
114
|
#
|
115
115
|
# @param [Array<Cri::ParamDefinition>] param_defns An array of parameter
|
116
116
|
# definitions
|
117
|
-
def initialize(arguments_and_options, option_defns, param_defns)
|
117
|
+
def initialize(arguments_and_options, option_defns, param_defns, explicitly_no_params)
|
118
118
|
@unprocessed_arguments_and_options = arguments_and_options.dup
|
119
119
|
@option_defns = option_defns
|
120
120
|
@param_defns = param_defns
|
121
|
+
@explicitly_no_params = explicitly_no_params
|
121
122
|
|
122
123
|
@options = {}
|
123
124
|
@raw_arguments = []
|
@@ -179,7 +180,7 @@ module Cri
|
|
179
180
|
# @return [Cri::ArgumentList] The list of arguments that have already been
|
180
181
|
# parsed, excluding the -- separator.
|
181
182
|
def arguments
|
182
|
-
ArgumentList.new(@raw_arguments, @param_defns)
|
183
|
+
ArgumentList.new(@raw_arguments, @explicitly_no_params, @param_defns)
|
183
184
|
end
|
184
185
|
|
185
186
|
private
|
data/lib/cri/version.rb
CHANGED
data/test/test_argument_list.rb
CHANGED
@@ -5,7 +5,7 @@ require 'helper'
|
|
5
5
|
module Cri
|
6
6
|
class ArgumentListTestCase < Cri::TestCase
|
7
7
|
def test_empty
|
8
|
-
args = Cri::ArgumentList.new([], [])
|
8
|
+
args = Cri::ArgumentList.new([], false, [])
|
9
9
|
|
10
10
|
assert_equal([], args.to_a)
|
11
11
|
assert(args.empty?)
|
@@ -15,7 +15,7 @@ module Cri
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_no_param_defns
|
18
|
-
args = Cri::ArgumentList.new(%w[a b c], [])
|
18
|
+
args = Cri::ArgumentList.new(%w[a b c], false, [])
|
19
19
|
|
20
20
|
assert_equal(%w[a b c], args.to_a)
|
21
21
|
refute(args.empty?)
|
@@ -28,13 +28,13 @@ module Cri
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_enum
|
31
|
-
args = Cri::ArgumentList.new(%w[a b c], [])
|
31
|
+
args = Cri::ArgumentList.new(%w[a b c], false, [])
|
32
32
|
|
33
33
|
assert_equal(%w[A B C], args.map(&:upcase))
|
34
34
|
end
|
35
35
|
|
36
36
|
def test_no_method_error
|
37
|
-
args = Cri::ArgumentList.new(%w[a b c], [])
|
37
|
+
args = Cri::ArgumentList.new(%w[a b c], false, [])
|
38
38
|
|
39
39
|
refute args.respond_to?(:oink)
|
40
40
|
assert_raises(NoMethodError, 'x') do
|
@@ -43,14 +43,14 @@ module Cri
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_dash_dash
|
46
|
-
args = Cri::ArgumentList.new(%w[a -- b -- c], [])
|
46
|
+
args = Cri::ArgumentList.new(%w[a -- b -- c], false, [])
|
47
47
|
|
48
48
|
assert_equal(%w[a b c], args.to_a)
|
49
49
|
end
|
50
50
|
|
51
51
|
def test_one_param_defn_matched
|
52
52
|
param_defns = [Cri::ParamDefinition.new(name: 'filename')]
|
53
|
-
args = Cri::ArgumentList.new(%w[notbad.jpg], param_defns)
|
53
|
+
args = Cri::ArgumentList.new(%w[notbad.jpg], false, param_defns)
|
54
54
|
|
55
55
|
assert_equal(['notbad.jpg'], args.to_a)
|
56
56
|
assert_equal(1, args.size)
|
@@ -62,7 +62,7 @@ module Cri
|
|
62
62
|
param_defns = [Cri::ParamDefinition.new(name: 'filename')]
|
63
63
|
|
64
64
|
exception = assert_raises(Cri::ArgumentList::ArgumentCountMismatchError) do
|
65
|
-
Cri::ArgumentList.new(%w[notbad.jpg verybad.jpg], param_defns)
|
65
|
+
Cri::ArgumentList.new(%w[notbad.jpg verybad.jpg], false, param_defns)
|
66
66
|
end
|
67
67
|
assert_equal('incorrect number of arguments given: expected 1, but got 2', exception.message)
|
68
68
|
end
|
@@ -71,9 +71,24 @@ module Cri
|
|
71
71
|
param_defns = [Cri::ParamDefinition.new(name: 'filename')]
|
72
72
|
|
73
73
|
exception = assert_raises(Cri::ArgumentList::ArgumentCountMismatchError) do
|
74
|
-
Cri::ArgumentList.new(%w[], param_defns)
|
74
|
+
Cri::ArgumentList.new(%w[], false, param_defns)
|
75
75
|
end
|
76
76
|
assert_equal('incorrect number of arguments given: expected 1, but got 0', exception.message)
|
77
77
|
end
|
78
|
+
|
79
|
+
def test_zero_params_zero_args
|
80
|
+
args = Cri::ArgumentList.new(%w[], false, [])
|
81
|
+
|
82
|
+
assert_equal([], args.to_a)
|
83
|
+
assert args.empty?
|
84
|
+
assert_equal(0, args.size)
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_zero_params_one_arg
|
88
|
+
exception = assert_raises(Cri::ArgumentList::ArgumentCountMismatchError) do
|
89
|
+
Cri::ArgumentList.new(%w[a], true, [])
|
90
|
+
end
|
91
|
+
assert_equal('incorrect number of arguments given: expected 0, but got 1', exception.message)
|
92
|
+
end
|
78
93
|
end
|
79
94
|
end
|
data/test/test_command.rb
CHANGED
@@ -714,5 +714,47 @@ module Cri
|
|
714
714
|
assert_equal [], lines(out)
|
715
715
|
assert_equal ['publish: incorrect number of arguments given: expected 1, but got 0'], lines(err)
|
716
716
|
end
|
717
|
+
|
718
|
+
def test_no_params_zero_args
|
719
|
+
dsl = Cri::CommandDSL.new
|
720
|
+
dsl.instance_eval do
|
721
|
+
name 'moo'
|
722
|
+
usage 'dunno whatever'
|
723
|
+
summary 'does stuff'
|
724
|
+
description 'This command does a lot of stuff.'
|
725
|
+
no_params
|
726
|
+
|
727
|
+
run do |_opts, args|
|
728
|
+
end
|
729
|
+
end
|
730
|
+
command = dsl.command
|
731
|
+
|
732
|
+
command.run([])
|
733
|
+
end
|
734
|
+
|
735
|
+
def test_no_params_one_arg
|
736
|
+
dsl = Cri::CommandDSL.new
|
737
|
+
dsl.instance_eval do
|
738
|
+
name 'moo'
|
739
|
+
usage 'dunno whatever'
|
740
|
+
summary 'does stuff'
|
741
|
+
description 'This command does a lot of stuff.'
|
742
|
+
no_params
|
743
|
+
|
744
|
+
run do |_opts, args|
|
745
|
+
end
|
746
|
+
end
|
747
|
+
command = dsl.command
|
748
|
+
|
749
|
+
out, err = capture_io_while do
|
750
|
+
err = assert_raises SystemExit do
|
751
|
+
command.run(['a'])
|
752
|
+
end
|
753
|
+
assert_equal 1, err.status
|
754
|
+
end
|
755
|
+
|
756
|
+
assert_equal [], lines(out)
|
757
|
+
assert_equal ['moo: incorrect number of arguments given: expected 0, but got 1'], lines(err)
|
758
|
+
end
|
717
759
|
end
|
718
760
|
end
|
data/test/test_command_dsl.rb
CHANGED
@@ -268,5 +268,35 @@ module Cri
|
|
268
268
|
assert_equal({ foo: 'a', bar: 'b', qux: 'c' }, $args_num)
|
269
269
|
assert_equal({ foo: 'a', bar: 'b', qux: 'c' }, $args_sym)
|
270
270
|
end
|
271
|
+
|
272
|
+
def test_no_params_with_one_param_specified
|
273
|
+
dsl = Cri::CommandDSL.new
|
274
|
+
err = assert_raises Cri::CommandDSL::AlreadySpecifiedWithParams do
|
275
|
+
dsl.instance_eval do
|
276
|
+
name 'moo'
|
277
|
+
usage 'dunno whatever'
|
278
|
+
summary 'does stuff'
|
279
|
+
description 'This command does a lot of stuff.'
|
280
|
+
param :oink
|
281
|
+
no_params
|
282
|
+
end
|
283
|
+
end
|
284
|
+
assert_equal('Attempted to declare the command "moo" as taking no parameters, but some parameters are already declared for this command. Suggestion: remove the #no_params call.', err.message)
|
285
|
+
end
|
286
|
+
|
287
|
+
def test_one_param_with_no_params_specified
|
288
|
+
dsl = Cri::CommandDSL.new
|
289
|
+
err = assert_raises Cri::CommandDSL::AlreadySpecifiedAsNoParams do
|
290
|
+
dsl.instance_eval do
|
291
|
+
name 'moo'
|
292
|
+
usage 'dunno whatever'
|
293
|
+
summary 'does stuff'
|
294
|
+
description 'This command does a lot of stuff.'
|
295
|
+
no_params
|
296
|
+
param :oink
|
297
|
+
end
|
298
|
+
end
|
299
|
+
assert_equal('Attempted to specify a parameter :oink to the command "moo", which is already specified as taking no params. Suggestion: remove the #no_params call.', err.message)
|
300
|
+
end
|
271
301
|
end
|
272
302
|
end
|
data/test/test_option_parser.rb
CHANGED
@@ -8,7 +8,7 @@ module Cri
|
|
8
8
|
input = %w[foo bar baz]
|
9
9
|
opt_defns = []
|
10
10
|
|
11
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
11
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
12
12
|
|
13
13
|
assert_equal({}, parser.options)
|
14
14
|
assert_equal(%w[foo bar baz], parser.arguments.to_a)
|
@@ -19,7 +19,7 @@ module Cri
|
|
19
19
|
opt_defns = []
|
20
20
|
|
21
21
|
assert_raises(Cri::OptionParser::IllegalOptionError) do
|
22
|
-
Cri::OptionParser.new(input, opt_defns, []).run
|
22
|
+
Cri::OptionParser.new(input, opt_defns, [], false).run
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -29,7 +29,7 @@ module Cri
|
|
29
29
|
{ long: 'aaa', short: 'a', argument: :forbidden },
|
30
30
|
].map { |hash| make_opt_defn(hash) }
|
31
31
|
|
32
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
32
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
33
33
|
|
34
34
|
assert(!parser.options[:aaa])
|
35
35
|
end
|
@@ -40,7 +40,7 @@ module Cri
|
|
40
40
|
{ long: 'aaa', short: 'a', argument: :forbidden },
|
41
41
|
].map { |hash| make_opt_defn(hash) }
|
42
42
|
|
43
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
43
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
44
44
|
|
45
45
|
assert(parser.options[:aaa])
|
46
46
|
assert_equal(%w[foo bar], parser.arguments.to_a)
|
@@ -52,7 +52,7 @@ module Cri
|
|
52
52
|
{ long: 'aaa', short: 'a', argument: :required },
|
53
53
|
].map { |hash| make_opt_defn(hash) }
|
54
54
|
|
55
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
55
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
56
56
|
|
57
57
|
assert_equal({ aaa: 'xxx' }, parser.options)
|
58
58
|
assert_equal(%w[foo bar], parser.arguments.to_a)
|
@@ -64,7 +64,7 @@ module Cri
|
|
64
64
|
{ long: 'aaa', short: 'a', argument: :required },
|
65
65
|
].map { |hash| make_opt_defn(hash) }
|
66
66
|
|
67
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
67
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
68
68
|
|
69
69
|
assert_equal({ aaa: 'xxx' }, parser.options)
|
70
70
|
assert_equal(%w[foo bar], parser.arguments.to_a)
|
@@ -77,7 +77,7 @@ module Cri
|
|
77
77
|
].map { |hash| make_opt_defn(hash) }
|
78
78
|
|
79
79
|
assert_raises(Cri::OptionParser::OptionRequiresAnArgumentError) do
|
80
|
-
Cri::OptionParser.new(input, opt_defns, []).run
|
80
|
+
Cri::OptionParser.new(input, opt_defns, [], false).run
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
@@ -89,7 +89,7 @@ module Cri
|
|
89
89
|
].map { |hash| make_opt_defn(hash) }
|
90
90
|
|
91
91
|
assert_raises(Cri::OptionParser::OptionRequiresAnArgumentError) do
|
92
|
-
Cri::OptionParser.new(input, opt_defns, []).run
|
92
|
+
Cri::OptionParser.new(input, opt_defns, [], false).run
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
@@ -99,7 +99,7 @@ module Cri
|
|
99
99
|
{ long: 'aaa', short: 'a', argument: :optional },
|
100
100
|
].map { |hash| make_opt_defn(hash) }
|
101
101
|
|
102
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
102
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
103
103
|
|
104
104
|
assert(parser.options[:aaa])
|
105
105
|
assert_equal(['foo'], parser.arguments.to_a)
|
@@ -111,7 +111,7 @@ module Cri
|
|
111
111
|
{ long: 'aaa', short: 'a', argument: :optional },
|
112
112
|
].map { |hash| make_opt_defn(hash) }
|
113
113
|
|
114
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
114
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
115
115
|
|
116
116
|
assert_equal({ aaa: 'xxx' }, parser.options)
|
117
117
|
assert_equal(['foo'], parser.arguments.to_a)
|
@@ -125,7 +125,7 @@ module Cri
|
|
125
125
|
{ long: 'ccc', short: 'c', argument: :forbidden },
|
126
126
|
].map { |hash| make_opt_defn(hash) }
|
127
127
|
|
128
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
128
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
129
129
|
|
130
130
|
assert(parser.options[:aaa])
|
131
131
|
assert(parser.options[:bbb])
|
@@ -139,7 +139,7 @@ module Cri
|
|
139
139
|
{ long: 'aaa', short: 'a', argument: :forbidden },
|
140
140
|
].map { |hash| make_opt_defn(hash) }
|
141
141
|
|
142
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
142
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
143
143
|
|
144
144
|
assert(parser.options[:aaa])
|
145
145
|
assert_equal(%w[foo bar], parser.arguments.to_a)
|
@@ -152,7 +152,7 @@ module Cri
|
|
152
152
|
].map { |hash| make_opt_defn(hash) }
|
153
153
|
|
154
154
|
assert_raises(Cri::OptionParser::OptionRequiresAnArgumentError) do
|
155
|
-
Cri::OptionParser.new(input, opt_defns, []).run
|
155
|
+
Cri::OptionParser.new(input, opt_defns, [], false).run
|
156
156
|
end
|
157
157
|
end
|
158
158
|
|
@@ -164,7 +164,7 @@ module Cri
|
|
164
164
|
{ long: 'ccc', short: 'c', argument: :forbidden },
|
165
165
|
].map { |hash| make_opt_defn(hash) }
|
166
166
|
|
167
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
167
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
168
168
|
|
169
169
|
assert(parser.options[:aaa])
|
170
170
|
assert(parser.options[:bbb])
|
@@ -180,7 +180,7 @@ module Cri
|
|
180
180
|
{ long: 'ccc', short: 'c', argument: :forbidden },
|
181
181
|
].map { |hash| make_opt_defn(hash) }
|
182
182
|
|
183
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
183
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
184
184
|
|
185
185
|
assert_equal('bar', parser.options[:aaa])
|
186
186
|
assert(parser.options[:bbb])
|
@@ -196,7 +196,7 @@ module Cri
|
|
196
196
|
].map { |hash| make_opt_defn(hash) }
|
197
197
|
|
198
198
|
assert_raises(Cri::OptionParser::OptionRequiresAnArgumentError) do
|
199
|
-
Cri::OptionParser.new(input, opt_defns, []).run
|
199
|
+
Cri::OptionParser.new(input, opt_defns, [], false).run
|
200
200
|
end
|
201
201
|
end
|
202
202
|
|
@@ -206,7 +206,7 @@ module Cri
|
|
206
206
|
{ long: 'aaa', short: 'a', argument: :optional },
|
207
207
|
].map { |hash| make_opt_defn(hash) }
|
208
208
|
|
209
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
209
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
210
210
|
|
211
211
|
assert(parser.options[:aaa])
|
212
212
|
assert_equal(['foo'], parser.arguments.to_a)
|
@@ -218,7 +218,7 @@ module Cri
|
|
218
218
|
{ long: 'aaa', short: 'a', argument: :optional },
|
219
219
|
].map { |hash| make_opt_defn(hash) }
|
220
220
|
|
221
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
221
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
222
222
|
|
223
223
|
assert_equal({ aaa: 'xxx' }, parser.options)
|
224
224
|
assert_equal(['foo'], parser.arguments.to_a)
|
@@ -232,7 +232,7 @@ module Cri
|
|
232
232
|
{ long: 'ccc', short: 'c', argument: :forbidden },
|
233
233
|
].map { |hash| make_opt_defn(hash) }
|
234
234
|
|
235
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
235
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
236
236
|
|
237
237
|
assert(parser.options[:aaa])
|
238
238
|
assert(parser.options[:bbb])
|
@@ -244,7 +244,7 @@ module Cri
|
|
244
244
|
input = %w[foo - bar]
|
245
245
|
opt_defns = []
|
246
246
|
|
247
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
247
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
248
248
|
|
249
249
|
assert_equal({}, parser.options)
|
250
250
|
assert_equal(['foo', '-', 'bar'], parser.arguments.to_a)
|
@@ -254,7 +254,7 @@ module Cri
|
|
254
254
|
input = %w[foo bar -- -x --yyy -abc]
|
255
255
|
opt_defns = []
|
256
256
|
|
257
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
257
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
258
258
|
|
259
259
|
assert_equal({}, parser.options)
|
260
260
|
assert_equal(['foo', 'bar', '-x', '--yyy', '-abc'], parser.arguments.to_a)
|
@@ -267,7 +267,7 @@ module Cri
|
|
267
267
|
].map { |hash| make_opt_defn(hash) }
|
268
268
|
|
269
269
|
assert_raises(Cri::OptionParser::OptionRequiresAnArgumentError) do
|
270
|
-
Cri::OptionParser.new(input, opt_defns, []).run
|
270
|
+
Cri::OptionParser.new(input, opt_defns, [], false).run
|
271
271
|
end
|
272
272
|
end
|
273
273
|
|
@@ -278,7 +278,7 @@ module Cri
|
|
278
278
|
{ long: 'verbose', short: 'v', multiple: true },
|
279
279
|
].map { |hash| make_opt_defn(hash) }
|
280
280
|
|
281
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
281
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
282
282
|
|
283
283
|
assert_equal(%w[test test2], parser.options[:long])
|
284
284
|
assert_equal(3, parser.options[:verbose].size)
|
@@ -290,7 +290,7 @@ module Cri
|
|
290
290
|
{ long: 'animal', short: 'a', argument: :required, default: 'donkey' },
|
291
291
|
].map { |hash| make_opt_defn(hash) }
|
292
292
|
|
293
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
293
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
294
294
|
|
295
295
|
assert_equal({ animal: 'donkey' }, parser.options)
|
296
296
|
assert_equal(['foo'], parser.arguments.to_a)
|
@@ -303,7 +303,7 @@ module Cri
|
|
303
303
|
].map { |hash| make_opt_defn(hash) }
|
304
304
|
|
305
305
|
assert_raises(Cri::OptionParser::OptionRequiresAnArgumentError) do
|
306
|
-
Cri::OptionParser.new(input, opt_defns, []).run
|
306
|
+
Cri::OptionParser.new(input, opt_defns, [], false).run
|
307
307
|
end
|
308
308
|
end
|
309
309
|
|
@@ -313,7 +313,7 @@ module Cri
|
|
313
313
|
{ long: 'animal', short: 'a', argument: :required, default: 'donkey' },
|
314
314
|
].map { |hash| make_opt_defn(hash) }
|
315
315
|
|
316
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
316
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
317
317
|
|
318
318
|
assert_equal({ animal: 'giraffe' }, parser.options)
|
319
319
|
assert_equal(['foo'], parser.arguments.to_a)
|
@@ -325,7 +325,7 @@ module Cri
|
|
325
325
|
{ long: 'animal', short: 'a', argument: :optional, default: 'donkey' },
|
326
326
|
].map { |hash| make_opt_defn(hash) }
|
327
327
|
|
328
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
328
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
329
329
|
|
330
330
|
assert_equal({ animal: 'donkey' }, parser.options)
|
331
331
|
assert_equal(['foo'], parser.arguments.to_a)
|
@@ -337,7 +337,7 @@ module Cri
|
|
337
337
|
{ long: 'animal', short: 'a', argument: :optional, default: 'donkey' },
|
338
338
|
].map { |hash| make_opt_defn(hash) }
|
339
339
|
|
340
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
340
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
341
341
|
|
342
342
|
assert_equal({ animal: 'donkey' }, parser.options)
|
343
343
|
assert_equal(['foo'], parser.arguments.to_a)
|
@@ -349,7 +349,7 @@ module Cri
|
|
349
349
|
{ long: 'animal', short: 'a', argument: :optional, default: 'donkey' },
|
350
350
|
].map { |hash| make_opt_defn(hash) }
|
351
351
|
|
352
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
352
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
353
353
|
|
354
354
|
assert_equal({ animal: 'giraffe' }, parser.options)
|
355
355
|
assert_equal(['foo'], parser.arguments.to_a)
|
@@ -361,7 +361,7 @@ module Cri
|
|
361
361
|
{ long: 'animal', short: 'a', argument: :optional, default: 'donkey' },
|
362
362
|
].map { |hash| make_opt_defn(hash) }
|
363
363
|
|
364
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
364
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
365
365
|
|
366
366
|
assert_equal({ animal: 'gi' }, parser.options)
|
367
367
|
assert_equal(%w[foo raffe], parser.arguments.to_a)
|
@@ -375,7 +375,7 @@ module Cri
|
|
375
375
|
{ long: 'ccc', short: 'c', argument: :required },
|
376
376
|
].map { |hash| make_opt_defn(hash) }
|
377
377
|
|
378
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
378
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
379
379
|
|
380
380
|
assert_equal({ aaa: true, bbb: 'xxx', ccc: 'yyy' }, parser.options)
|
381
381
|
assert_equal(%w[foo zzz], parser.arguments.to_a)
|
@@ -389,7 +389,7 @@ module Cri
|
|
389
389
|
{ long: 'ccc', short: 'c', argument: :required },
|
390
390
|
].map { |hash| make_opt_defn(hash) }
|
391
391
|
|
392
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
392
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
393
393
|
|
394
394
|
assert_equal({ aaa: true, bbb: 'xxx', ccc: 'yyy' }, parser.options)
|
395
395
|
assert_equal(%w[foo zzz], parser.arguments.to_a)
|
@@ -403,7 +403,7 @@ module Cri
|
|
403
403
|
{ long: 'ccc', short: 'c', argument: :optional, default: 'c default' },
|
404
404
|
].map { |hash| make_opt_defn(hash) }
|
405
405
|
|
406
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
406
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
407
407
|
|
408
408
|
assert_equal({ aaa: true, bbb: 'xxx', ccc: 'c default' }, parser.options)
|
409
409
|
assert_equal(%w[foo], parser.arguments.to_a)
|
@@ -415,7 +415,7 @@ module Cri
|
|
415
415
|
{ long: 'port', short: 'p', argument: :required, transform: ->(x) { Integer(x) } },
|
416
416
|
].map { |hash| make_opt_defn(hash) }
|
417
417
|
|
418
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
418
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
419
419
|
|
420
420
|
assert_equal({ port: 123 }, parser.options)
|
421
421
|
assert_equal([], parser.arguments.to_a)
|
@@ -427,7 +427,7 @@ module Cri
|
|
427
427
|
{ long: 'port', short: 'p', argument: :required, transform: method(:Integer) },
|
428
428
|
].map { |hash| make_opt_defn(hash) }
|
429
429
|
|
430
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
430
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
431
431
|
|
432
432
|
assert_equal({ port: 123 }, parser.options)
|
433
433
|
assert_equal([], parser.arguments.to_a)
|
@@ -445,7 +445,7 @@ module Cri
|
|
445
445
|
{ long: 'port', short: 'p', argument: :required, transform: port },
|
446
446
|
].map { |hash| make_opt_defn(hash) }
|
447
447
|
|
448
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
448
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
449
449
|
|
450
450
|
assert_equal({ port: 123 }, parser.options)
|
451
451
|
assert_equal([], parser.arguments.to_a)
|
@@ -464,7 +464,7 @@ module Cri
|
|
464
464
|
{ long: 'port', short: 'p', argument: :required, default: 8080, transform: port },
|
465
465
|
].map { |hash| make_opt_defn(hash) }
|
466
466
|
|
467
|
-
parser = Cri::OptionParser.new(input, opt_defns, []).run
|
467
|
+
parser = Cri::OptionParser.new(input, opt_defns, [], false).run
|
468
468
|
|
469
469
|
assert_equal({ port: 8080 }, parser.options)
|
470
470
|
assert_equal([], parser.arguments.to_a)
|
@@ -477,7 +477,7 @@ module Cri
|
|
477
477
|
].map { |hash| make_opt_defn(hash) }
|
478
478
|
|
479
479
|
exception = assert_raises(Cri::OptionParser::IllegalOptionValueError) do
|
480
|
-
Cri::OptionParser.new(input, opt_defns, []).run
|
480
|
+
Cri::OptionParser.new(input, opt_defns, [], false).run
|
481
481
|
end
|
482
482
|
assert_equal('invalid value "one_hundred_and_twenty_three" for --port option', exception.message)
|
483
483
|
end
|
@@ -488,7 +488,7 @@ module Cri
|
|
488
488
|
{ name: 'host' },
|
489
489
|
].map { |hash| Cri::ParamDefinition.new(hash) }
|
490
490
|
|
491
|
-
parser = Cri::OptionParser.new(input, [], param_defns).run
|
491
|
+
parser = Cri::OptionParser.new(input, [], param_defns, false).run
|
492
492
|
assert_equal({}, parser.options)
|
493
493
|
assert_equal('localhost', parser.arguments[0])
|
494
494
|
assert_equal('localhost', parser.arguments[:host])
|
@@ -500,7 +500,7 @@ module Cri
|
|
500
500
|
{ name: 'host' },
|
501
501
|
].map { |hash| Cri::ParamDefinition.new(hash) }
|
502
502
|
|
503
|
-
parser = Cri::OptionParser.new(input, [], param_defns).run
|
503
|
+
parser = Cri::OptionParser.new(input, [], param_defns, false).run
|
504
504
|
exception = assert_raises(Cri::ArgumentList::ArgumentCountMismatchError) do
|
505
505
|
parser.arguments
|
506
506
|
end
|
@@ -513,7 +513,7 @@ module Cri
|
|
513
513
|
{ name: 'host' },
|
514
514
|
].map { |hash| Cri::ParamDefinition.new(hash) }
|
515
515
|
|
516
|
-
parser = Cri::OptionParser.new(input, [], param_defns).run
|
516
|
+
parser = Cri::OptionParser.new(input, [], param_defns, false).run
|
517
517
|
exception = assert_raises(Cri::ArgumentList::ArgumentCountMismatchError) do
|
518
518
|
parser.arguments
|
519
519
|
end
|
@@ -526,7 +526,7 @@ module Cri
|
|
526
526
|
{ name: 'host' },
|
527
527
|
].map { |hash| Cri::ParamDefinition.new(hash) }
|
528
528
|
|
529
|
-
parser = Cri::OptionParser.new(input, [], param_defns).run
|
529
|
+
parser = Cri::OptionParser.new(input, [], param_defns, false).run
|
530
530
|
|
531
531
|
exception = assert_raises(ArgumentError) do
|
532
532
|
parser.arguments['oink']
|
@@ -541,7 +541,7 @@ module Cri
|
|
541
541
|
{ name: 'target' },
|
542
542
|
].map { |hash| Cri::ParamDefinition.new(hash) }
|
543
543
|
|
544
|
-
parser = Cri::OptionParser.new(input, [], param_defns).run
|
544
|
+
parser = Cri::OptionParser.new(input, [], param_defns, false).run
|
545
545
|
assert_equal({}, parser.options)
|
546
546
|
assert_equal('localhost', parser.arguments[0])
|
547
547
|
assert_equal('localhost', parser.arguments[:source])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cri
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Defreyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colored
|
@@ -50,7 +50,6 @@ extra_rdoc_files:
|
|
50
50
|
files:
|
51
51
|
- CODE_OF_CONDUCT.md
|
52
52
|
- Gemfile
|
53
|
-
- Gemfile.lock
|
54
53
|
- LICENSE
|
55
54
|
- NEWS.md
|
56
55
|
- README.md
|
data/Gemfile.lock
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
cri (2.12.0)
|
5
|
-
colored (~> 1.2)
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: https://rubygems.org/
|
9
|
-
specs:
|
10
|
-
asciidoctor (1.5.7.1)
|
11
|
-
ast (2.4.0)
|
12
|
-
colored (1.2)
|
13
|
-
coveralls (0.8.22)
|
14
|
-
json (>= 1.8, < 3)
|
15
|
-
simplecov (~> 0.16.1)
|
16
|
-
term-ansicolor (~> 1.3)
|
17
|
-
thor (~> 0.19.4)
|
18
|
-
tins (~> 1.6)
|
19
|
-
docile (1.3.1)
|
20
|
-
jaro_winkler (1.5.1)
|
21
|
-
json (2.1.0)
|
22
|
-
minitest (5.11.3)
|
23
|
-
parallel (1.12.1)
|
24
|
-
parser (2.5.1.2)
|
25
|
-
ast (~> 2.4.0)
|
26
|
-
powerpack (0.1.2)
|
27
|
-
rainbow (3.0.0)
|
28
|
-
rake (12.3.1)
|
29
|
-
rubocop (0.58.2)
|
30
|
-
jaro_winkler (~> 1.5.1)
|
31
|
-
parallel (~> 1.10)
|
32
|
-
parser (>= 2.5, != 2.5.1.1)
|
33
|
-
powerpack (~> 0.1)
|
34
|
-
rainbow (>= 2.2.2, < 4.0)
|
35
|
-
ruby-progressbar (~> 1.7)
|
36
|
-
unicode-display_width (~> 1.0, >= 1.0.1)
|
37
|
-
ruby-progressbar (1.10.0)
|
38
|
-
simplecov (0.16.1)
|
39
|
-
docile (~> 1.1)
|
40
|
-
json (>= 1.8, < 3)
|
41
|
-
simplecov-html (~> 0.10.0)
|
42
|
-
simplecov-html (0.10.2)
|
43
|
-
term-ansicolor (1.6.0)
|
44
|
-
tins (~> 1.0)
|
45
|
-
thor (0.19.4)
|
46
|
-
tins (1.16.3)
|
47
|
-
unicode-display_width (1.4.0)
|
48
|
-
yard (0.9.16)
|
49
|
-
|
50
|
-
PLATFORMS
|
51
|
-
ruby
|
52
|
-
|
53
|
-
DEPENDENCIES
|
54
|
-
asciidoctor
|
55
|
-
bundler (~> 1.6)
|
56
|
-
coveralls
|
57
|
-
cri!
|
58
|
-
minitest
|
59
|
-
rake
|
60
|
-
rubocop
|
61
|
-
yard
|
62
|
-
|
63
|
-
BUNDLED WITH
|
64
|
-
1.16.3
|