cri 2.10.1 → 2.11.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 +5 -5
- data/Gemfile +2 -0
- data/Gemfile.lock +24 -23
- data/NEWS.md +6 -0
- data/{README.adoc → README.md} +105 -64
- data/Rakefile +2 -0
- data/cri.gemspec +6 -5
- data/lib/cri.rb +11 -11
- data/lib/cri/command.rb +7 -2
- data/lib/cri/command_dsl.rb +8 -0
- data/lib/cri/command_runner.rb +2 -0
- data/lib/cri/commands/basic_help.rb +8 -6
- data/lib/cri/commands/basic_root.rb +2 -0
- data/lib/cri/help_renderer.rb +9 -7
- data/lib/cri/option_parser.rb +45 -15
- data/lib/cri/platform.rb +6 -0
- data/lib/cri/string_formatter.rb +18 -14
- data/lib/cri/version.rb +3 -1
- data/test/helper.rb +2 -0
- data/test/test_base.rb +2 -0
- data/test/test_basic_help.rb +2 -0
- data/test/test_basic_root.rb +2 -0
- data/test/test_command.rb +30 -6
- data/test/test_command_dsl.rb +18 -16
- data/test/test_command_runner.rb +2 -0
- data/test/test_help_renderer.rb +18 -16
- data/test/test_option_parser.rb +76 -2
- data/test/test_string_formatter.rb +2 -0
- metadata +7 -11
- data/lib/cri/argument_array.rb +0 -21
- data/lib/cri/core_ext.rb +0 -10
- data/lib/cri/core_ext/string.rb +0 -33
- data/test/test_argument_array.rb +0 -11
data/test/test_command_dsl.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'helper'
|
2
4
|
|
3
5
|
module Cri
|
@@ -39,12 +41,12 @@ module Cri
|
|
39
41
|
expected_option_definitions =
|
40
42
|
Set.new(
|
41
43
|
[
|
42
|
-
{ short: 'a', long: 'aaa', desc: 'opt a', argument: :optional, multiple: true,
|
43
|
-
{ short: 'b', long: 'bbb', desc: 'opt b', argument: :required, multiple: false, hidden: false, block: nil, default: nil },
|
44
|
-
{ short: 'c', long: 'ccc', desc: 'opt c', argument: :optional, multiple: false, hidden: false, block: nil, default: nil },
|
45
|
-
{ short: 'd', long: 'ddd', desc: 'opt d', argument: :forbidden, multiple: false, hidden: false, block: nil, default: nil },
|
46
|
-
{ short: 'e', long: 'eee', desc: 'opt e', argument: :forbidden, multiple: false, hidden: false, block: nil, default: nil },
|
47
|
-
{ short: 'f', long: 'fff', desc: 'opt f', argument: :forbidden, multiple: false, hidden: true, block: nil, default: nil },
|
44
|
+
{ short: 'a', long: 'aaa', desc: 'opt a', argument: :optional, multiple: true, hidden: false, block: nil, default: nil, transform: nil },
|
45
|
+
{ short: 'b', long: 'bbb', desc: 'opt b', argument: :required, multiple: false, hidden: false, block: nil, default: nil, transform: nil },
|
46
|
+
{ short: 'c', long: 'ccc', desc: 'opt c', argument: :optional, multiple: false, hidden: false, block: nil, default: nil, transform: nil },
|
47
|
+
{ short: 'd', long: 'ddd', desc: 'opt d', argument: :forbidden, multiple: false, hidden: false, block: nil, default: nil, transform: nil },
|
48
|
+
{ short: 'e', long: 'eee', desc: 'opt e', argument: :forbidden, multiple: false, hidden: false, block: nil, default: nil, transform: nil },
|
49
|
+
{ short: 'f', long: 'fff', desc: 'opt f', argument: :forbidden, multiple: false, hidden: true, block: nil, default: nil, transform: nil },
|
48
50
|
],
|
49
51
|
)
|
50
52
|
actual_option_definitions = Set.new(command.option_definitions)
|
@@ -78,8 +80,8 @@ module Cri
|
|
78
80
|
expected_option_definitions =
|
79
81
|
Set.new(
|
80
82
|
[
|
81
|
-
{ short: 's', long: nil,
|
82
|
-
{ short: nil, long: 'long', desc: 'long',
|
83
|
+
{ short: 's', long: nil, desc: 'short', argument: :forbidden, multiple: false, hidden: false, block: nil, default: nil, transform: nil },
|
84
|
+
{ short: nil, long: 'long', desc: 'long', argument: :forbidden, multiple: false, hidden: false, block: nil, default: nil, transform: nil },
|
83
85
|
],
|
84
86
|
)
|
85
87
|
actual_option_definitions = Set.new(command.option_definitions)
|
@@ -102,9 +104,9 @@ module Cri
|
|
102
104
|
expected_option_definitions =
|
103
105
|
Set.new(
|
104
106
|
[
|
105
|
-
{ short: 'f', long: 'flag', desc: 'flag', argument: :forbidden, multiple: true, hidden: false, block: nil, default: nil },
|
106
|
-
{ short: 'r', long: 'required', desc: 'req', argument: :required, multiple: true, hidden: false, block: nil, default: nil },
|
107
|
-
{ short: 'o', long: 'optional', desc: 'opt', argument: :optional, multiple: true, hidden: false, block: nil, default: nil },
|
107
|
+
{ short: 'f', long: 'flag', desc: 'flag', argument: :forbidden, multiple: true, hidden: false, block: nil, default: nil, transform: nil },
|
108
|
+
{ short: 'r', long: 'required', desc: 'req', argument: :required, multiple: true, hidden: false, block: nil, default: nil, transform: nil },
|
109
|
+
{ short: 'o', long: 'optional', desc: 'opt', argument: :optional, multiple: true, hidden: false, block: nil, default: nil, transform: nil },
|
108
110
|
],
|
109
111
|
)
|
110
112
|
actual_option_definitions = Set.new(command.option_definitions)
|
@@ -127,9 +129,9 @@ module Cri
|
|
127
129
|
expected_option_definitions =
|
128
130
|
Set.new(
|
129
131
|
[
|
130
|
-
{ short: 'f', long: 'flag', desc: 'flag', argument: :forbidden, multiple: false, hidden: true, block: nil, default: nil },
|
131
|
-
{ short: 'r', long: 'required', desc: 'req', argument: :required, multiple: false, hidden: true, block: nil, default: nil },
|
132
|
-
{ short: 'o', long: 'optional', desc: 'opt', argument: :optional, multiple: false, hidden: true, block: nil, default: nil },
|
132
|
+
{ short: 'f', long: 'flag', desc: 'flag', argument: :forbidden, multiple: false, hidden: true, block: nil, default: nil, transform: nil },
|
133
|
+
{ short: 'r', long: 'required', desc: 'req', argument: :required, multiple: false, hidden: true, block: nil, default: nil, transform: nil },
|
134
|
+
{ short: 'o', long: 'optional', desc: 'opt', argument: :optional, multiple: false, hidden: true, block: nil, default: nil, transform: nil },
|
133
135
|
],
|
134
136
|
)
|
135
137
|
actual_option_definitions = Set.new(command.option_definitions)
|
@@ -222,7 +224,7 @@ module Cri
|
|
222
224
|
def test_runner
|
223
225
|
# Define
|
224
226
|
dsl = Cri::CommandDSL.new
|
225
|
-
dsl.instance_eval
|
227
|
+
dsl.instance_eval(<<-CMD, __FILE__, __LINE__ + 1)
|
226
228
|
class Cri::CommandDSLTestCaseCommandRunner < Cri::CommandRunner
|
227
229
|
def run
|
228
230
|
$did_it_work = arguments[0]
|
@@ -230,7 +232,7 @@ module Cri
|
|
230
232
|
end
|
231
233
|
|
232
234
|
runner Cri::CommandDSLTestCaseCommandRunner
|
233
|
-
|
235
|
+
CMD
|
234
236
|
command = dsl.command
|
235
237
|
|
236
238
|
# Check
|
data/test/test_command_runner.rb
CHANGED
data/test/test_help_renderer.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'helper'
|
2
4
|
|
3
5
|
module Cri
|
@@ -10,22 +12,22 @@ module Cri
|
|
10
12
|
end
|
11
13
|
|
12
14
|
def test_simple
|
13
|
-
expected =
|
14
|
-
NAME
|
15
|
-
|
16
|
-
|
17
|
-
USAGE
|
18
|
-
|
19
|
-
|
20
|
-
DESCRIPTION
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
OPTIONS
|
27
|
-
|
28
|
-
|
15
|
+
expected = <<~HELP
|
16
|
+
NAME
|
17
|
+
help - show help
|
18
|
+
|
19
|
+
USAGE
|
20
|
+
help [command_name]
|
21
|
+
|
22
|
+
DESCRIPTION
|
23
|
+
Show help for the given command, or show general help. When no command is
|
24
|
+
given, a list of available commands is displayed, as well as a list of
|
25
|
+
global command-line options. When a command is given, a command
|
26
|
+
description, as well as command-specific command-line options, are shown.
|
27
|
+
|
28
|
+
OPTIONS
|
29
|
+
-v --verbose show more detailed help
|
30
|
+
HELP
|
29
31
|
|
30
32
|
cmd = Cri::Command.new_basic_help
|
31
33
|
assert_equal(expected, help_for(cmd))
|
data/test/test_option_parser.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'helper'
|
2
4
|
|
3
5
|
module Cri
|
@@ -255,8 +257,7 @@ module Cri
|
|
255
257
|
parser = Cri::OptionParser.parse(input, definitions)
|
256
258
|
|
257
259
|
assert_equal({}, parser.options)
|
258
|
-
assert_equal(['foo', 'bar', '-x', '--yyy', '-abc'],
|
259
|
-
assert_equal(['foo', 'bar', '--', '-x', '--yyy', '-abc'], parser.arguments.raw)
|
260
|
+
assert_equal(['foo', 'bar', '-x', '--yyy', '-abc'], parser.arguments)
|
260
261
|
end
|
261
262
|
|
262
263
|
def test_parse_with_end_marker_between_option_key_and_value
|
@@ -406,5 +407,78 @@ module Cri
|
|
406
407
|
assert_equal({ aaa: true, bbb: 'xxx', ccc: 'c default' }, parser.options)
|
407
408
|
assert_equal(%w[foo], parser.arguments)
|
408
409
|
end
|
410
|
+
|
411
|
+
def test_parse_with_transform_proc
|
412
|
+
input = %w[--port 123]
|
413
|
+
definitions = [
|
414
|
+
{ long: 'port', short: 'p', argument: :required, transform: ->(x) { Integer(x) } },
|
415
|
+
]
|
416
|
+
|
417
|
+
parser = Cri::OptionParser.parse(input, definitions)
|
418
|
+
|
419
|
+
assert_equal({ port: 123 }, parser.options)
|
420
|
+
assert_equal([], parser.arguments)
|
421
|
+
end
|
422
|
+
|
423
|
+
def test_parse_with_transform_method
|
424
|
+
input = %w[--port 123]
|
425
|
+
definitions = [
|
426
|
+
{ long: 'port', short: 'p', argument: :required, transform: method(:Integer) },
|
427
|
+
]
|
428
|
+
|
429
|
+
parser = Cri::OptionParser.parse(input, definitions)
|
430
|
+
|
431
|
+
assert_equal({ port: 123 }, parser.options)
|
432
|
+
assert_equal([], parser.arguments)
|
433
|
+
end
|
434
|
+
|
435
|
+
def test_parse_with_transform_object
|
436
|
+
port = Class.new do
|
437
|
+
def call(str)
|
438
|
+
Integer(str)
|
439
|
+
end
|
440
|
+
end.new
|
441
|
+
|
442
|
+
input = %w[--port 123]
|
443
|
+
definitions = [
|
444
|
+
{ long: 'port', short: 'p', argument: :required, transform: port },
|
445
|
+
]
|
446
|
+
|
447
|
+
parser = Cri::OptionParser.parse(input, definitions)
|
448
|
+
|
449
|
+
assert_equal({ port: 123 }, parser.options)
|
450
|
+
assert_equal([], parser.arguments)
|
451
|
+
end
|
452
|
+
|
453
|
+
def test_parse_with_transform_default
|
454
|
+
port = Class.new do
|
455
|
+
def call(str)
|
456
|
+
raise unless str.is_a?(String)
|
457
|
+
Integer(str)
|
458
|
+
end
|
459
|
+
end.new
|
460
|
+
|
461
|
+
input = %w[]
|
462
|
+
definitions = [
|
463
|
+
{ long: 'port', short: 'p', argument: :required, default: 8080, transform: port },
|
464
|
+
]
|
465
|
+
|
466
|
+
parser = Cri::OptionParser.parse(input, definitions)
|
467
|
+
|
468
|
+
assert_equal({ port: 8080 }, parser.options)
|
469
|
+
assert_equal([], parser.arguments)
|
470
|
+
end
|
471
|
+
|
472
|
+
def test_parse_with_transform_exception
|
473
|
+
input = %w[--port one_hundred_and_twenty_three]
|
474
|
+
definitions = [
|
475
|
+
{ long: 'port', short: 'p', argument: :required, transform: method(:Integer) },
|
476
|
+
]
|
477
|
+
|
478
|
+
exception = assert_raises(Cri::OptionParser::IllegalOptionValueError) do
|
479
|
+
Cri::OptionParser.parse(input, definitions)
|
480
|
+
end
|
481
|
+
assert_equal('invalid value "one_hundred_and_twenty_three" for --port option', exception.message)
|
482
|
+
end
|
409
483
|
end
|
410
484
|
end
|
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.11.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:
|
11
|
+
date: 2018-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colored
|
@@ -45,7 +45,7 @@ executables: []
|
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files:
|
47
47
|
- LICENSE
|
48
|
-
- README.
|
48
|
+
- README.md
|
49
49
|
- NEWS.md
|
50
50
|
files:
|
51
51
|
- CODE_OF_CONDUCT.md
|
@@ -53,25 +53,21 @@ files:
|
|
53
53
|
- Gemfile.lock
|
54
54
|
- LICENSE
|
55
55
|
- NEWS.md
|
56
|
-
- README.
|
56
|
+
- README.md
|
57
57
|
- Rakefile
|
58
58
|
- cri.gemspec
|
59
59
|
- lib/cri.rb
|
60
|
-
- lib/cri/argument_array.rb
|
61
60
|
- lib/cri/command.rb
|
62
61
|
- lib/cri/command_dsl.rb
|
63
62
|
- lib/cri/command_runner.rb
|
64
63
|
- lib/cri/commands/basic_help.rb
|
65
64
|
- lib/cri/commands/basic_root.rb
|
66
|
-
- lib/cri/core_ext.rb
|
67
|
-
- lib/cri/core_ext/string.rb
|
68
65
|
- lib/cri/help_renderer.rb
|
69
66
|
- lib/cri/option_parser.rb
|
70
67
|
- lib/cri/platform.rb
|
71
68
|
- lib/cri/string_formatter.rb
|
72
69
|
- lib/cri/version.rb
|
73
70
|
- test/helper.rb
|
74
|
-
- test/test_argument_array.rb
|
75
71
|
- test/test_base.rb
|
76
72
|
- test/test_basic_help.rb
|
77
73
|
- test/test_basic_root.rb
|
@@ -88,14 +84,14 @@ metadata: {}
|
|
88
84
|
post_install_message:
|
89
85
|
rdoc_options:
|
90
86
|
- "--main"
|
91
|
-
- README.
|
87
|
+
- README.md
|
92
88
|
require_paths:
|
93
89
|
- lib
|
94
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
95
91
|
requirements:
|
96
92
|
- - "~>"
|
97
93
|
- !ruby/object:Gem::Version
|
98
|
-
version: '2.
|
94
|
+
version: '2.3'
|
99
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
96
|
requirements:
|
101
97
|
- - ">="
|
@@ -103,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
99
|
version: '0'
|
104
100
|
requirements: []
|
105
101
|
rubyforge_project:
|
106
|
-
rubygems_version: 2.
|
102
|
+
rubygems_version: 2.7.7
|
107
103
|
signing_key:
|
108
104
|
specification_version: 4
|
109
105
|
summary: a library for building easy-to-use command-line tools
|
data/lib/cri/argument_array.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module Cri
|
2
|
-
# Represents an array of arguments. It is an array that strips separator
|
3
|
-
# arguments (`--`) but provides a `#raw` method to get the raw arguments
|
4
|
-
# array, i.e. an array that includes the separator `--` arguments.
|
5
|
-
class ArgumentArray < Array
|
6
|
-
# Initializes the array using the given raw arguments.
|
7
|
-
#
|
8
|
-
# @param [Array<String>] raw_arguments A list of raw arguments, i.e.
|
9
|
-
# including any separator arguments (`--`).
|
10
|
-
def initialize(raw_arguments)
|
11
|
-
super(raw_arguments.reject { |a| a == '--' })
|
12
|
-
@raw_arguments = raw_arguments
|
13
|
-
end
|
14
|
-
|
15
|
-
# @return [Array<String>] The arguments, including any separator arguments
|
16
|
-
# (`--`)
|
17
|
-
def raw
|
18
|
-
@raw_arguments
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
data/lib/cri/core_ext.rb
DELETED
data/lib/cri/core_ext/string.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'colored'
|
2
|
-
|
3
|
-
module Cri
|
4
|
-
module CoreExtensions
|
5
|
-
# @deprecated
|
6
|
-
module String
|
7
|
-
# @see Cri::StringFormatter#to_paragraphs
|
8
|
-
def to_paragraphs
|
9
|
-
Cri::StringFormatter.new.to_paragraphs(self)
|
10
|
-
end
|
11
|
-
|
12
|
-
# @see Cri::StringFormatter#to_paragraphs
|
13
|
-
def wrap_and_indent(width, indentation)
|
14
|
-
Cri::StringFormatter.new.wrap_and_indent(self, width, indentation)
|
15
|
-
end
|
16
|
-
|
17
|
-
# @see Cri::StringFormatter#format_as_title
|
18
|
-
def formatted_as_title
|
19
|
-
Cri::StringFormatter.new.format_as_title(self)
|
20
|
-
end
|
21
|
-
|
22
|
-
# @see Cri::StringFormatter#format_as_command
|
23
|
-
def formatted_as_command
|
24
|
-
Cri::StringFormatter.new.format_as_command(self)
|
25
|
-
end
|
26
|
-
|
27
|
-
# @see Cri::StringFormatter#format_as_option
|
28
|
-
def formatted_as_option
|
29
|
-
Cri::StringFormatter.new.format_as_option(self)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/test/test_argument_array.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
module Cri
|
4
|
-
class ArgumentArrayTestCase < Cri::TestCase
|
5
|
-
def test_initialize
|
6
|
-
arr = Cri::ArgumentArray.new(['foo', 'bar', '--', 'baz'])
|
7
|
-
assert_equal %w[foo bar baz], arr
|
8
|
-
assert_equal ['foo', 'bar', '--', 'baz'], arr.raw
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|