cri 2.10.1 → 2.11.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|