mini-cli 0.1.1 → 0.1.2
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/gems.rb +1 -0
- data/lib/mini-cli.rb +1 -0
- data/lib/mini-cli/run.rb +2 -2
- data/lib/mini-cli/version.rb +1 -1
- data/mini-cli.gemspec +1 -1
- data/samples/custom_args.rb +2 -5
- data/samples/simple.rb +1 -3
- data/test/helper.rb +8 -7
- data/test/mini-cli/main_test.rb +22 -41
- metadata +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e6c0c096fa96ac3c5687b159637ae5762c1dfa9d18201b0253476bfb96050ca
|
4
|
+
data.tar.gz: 21eb69f322117c7eb8cc2c810292b1b38a3a3f268356cdd9c5cd2f2d0d876a9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c975c9bff22c0841ac32ac6340d74ed908babb282f5791a7ed0951ad7f59fd0f4e9bcb3226a83f4dd1548ccfe340c2071072a94f4ac27e8937cae234fa584ac
|
7
|
+
data.tar.gz: c8544fba204f56ad6e2359d37ffe9e76ce9997ad34653270d1241d7c82d1153d8826e260f2f40d4840065dc70bd7133139d5cb835fbcee7394696245e825e512
|
data/gems.rb
CHANGED
data/lib/mini-cli.rb
CHANGED
data/lib/mini-cli/run.rb
CHANGED
@@ -4,7 +4,7 @@ require 'open3'
|
|
4
4
|
|
5
5
|
module MiniCli
|
6
6
|
def run(*cmd)
|
7
|
-
opts = Hash === cmd.last ? __run_opt(cmd.last) : [
|
7
|
+
opts = Hash === cmd.last ? __run_opt(cmd.last) : %i[stdout]
|
8
8
|
opts.delete(:stderr) ? __run3(opts, cmd) : __run2(opts, cmd)
|
9
9
|
rescue SystemCallError
|
10
10
|
nil
|
@@ -27,6 +27,6 @@ module MiniCli
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def __run_opt(opts)
|
30
|
-
%i[stdout stderr status].keep_if{ |s| opts.delete(s) }
|
30
|
+
%i[stdout stderr status].keep_if { |s| opts.delete(s) }
|
31
31
|
end
|
32
32
|
end
|
data/lib/mini-cli/version.rb
CHANGED
data/mini-cli.gemspec
CHANGED
@@ -27,5 +27,5 @@ GemSpec = Gem::Specification.new do |gem|
|
|
27
27
|
all_files = %x(git ls-files -z).split(0.chr)
|
28
28
|
gem.test_files = all_files.grep(%r{^(spec|test)/})
|
29
29
|
gem.files = all_files - gem.test_files
|
30
|
-
|
30
|
+
gem.extra_rdoc_files = %w[README.md]
|
31
31
|
end
|
data/samples/custom_args.rb
CHANGED
@@ -11,15 +11,12 @@ help <<~HELP, %w[TARGET [SOURCE]]
|
|
11
11
|
--opt option without any argument
|
12
12
|
HELP
|
13
13
|
|
14
|
-
main
|
15
|
-
cfg.each_pair{ |key, value| puts("#{key}: #{value}") }
|
16
|
-
end
|
14
|
+
main { |cfg| cfg.each_pair { |key, value| puts("#{key}: #{value}") } }
|
17
15
|
|
18
16
|
parse_argv do |args|
|
19
17
|
Struct.new(:target, :sources, :name, :url, :switch, :opt).new.tap do |cfg|
|
20
18
|
cfg.target = args['TARGET']
|
21
|
-
# args['FILES'] is an array containing all surplus arguments
|
22
|
-
cfg.sources = args['FILES']
|
19
|
+
cfg.sources = args['FILES'] # args['FILES'] is an array containing all surplus arguments
|
23
20
|
source = args['SOURCE'] || ENV['SOURCE']
|
24
21
|
cfg.sources.unshift(source) if source
|
25
22
|
cfg.sources << 'STDIN' if cfg.sources.empty?
|
data/samples/simple.rb
CHANGED
data/test/helper.rb
CHANGED
@@ -11,14 +11,15 @@ class Test < Minitest::Test
|
|
11
11
|
attr_reader :subject
|
12
12
|
|
13
13
|
def setup
|
14
|
-
@subject =
|
15
|
-
|
16
|
-
|
14
|
+
@subject =
|
15
|
+
Class.new do
|
16
|
+
include MiniCli
|
17
|
+
attr_reader :exit_args
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
def exit(*args)
|
20
|
+
@exit_args = args
|
21
|
+
end
|
22
|
+
end.new
|
22
23
|
end
|
23
24
|
|
24
25
|
def assert_stop_with_error(code, text, &block)
|
data/test/mini-cli/main_test.rb
CHANGED
@@ -3,21 +3,13 @@ require_relative '../helper'
|
|
3
3
|
class MainTest < Test
|
4
4
|
def test_defaults
|
5
5
|
assert_equal('helper', subject.name)
|
6
|
-
assert_output("Usage: helper\n"){ subject.show_help }
|
6
|
+
assert_output("Usage: helper\n") { subject.show_help }
|
7
7
|
end
|
8
8
|
|
9
9
|
def test_methods
|
10
|
-
subject = Class.new{ include MiniCli }.new
|
11
|
-
|
12
|
-
expected_methods = %i[
|
13
|
-
error
|
14
|
-
help
|
15
|
-
main
|
16
|
-
name
|
17
|
-
parse_argv
|
18
|
-
run
|
19
|
-
show_help
|
20
|
-
].sort!
|
10
|
+
subject = Class.new { include MiniCli }.new
|
11
|
+
|
12
|
+
expected_methods = %i[error help main name parse_argv run show_help].sort!
|
21
13
|
methods = (subject.methods - Object.new.methods).sort!
|
22
14
|
assert_equal(expected_methods, methods)
|
23
15
|
end
|
@@ -27,9 +19,7 @@ class MainTest < Test
|
|
27
19
|
subject.error(42, 'some error text')
|
28
20
|
end
|
29
21
|
|
30
|
-
assert_stop_with_error(21, 'error')
|
31
|
-
subject.error(21, :error)
|
32
|
-
end
|
22
|
+
assert_stop_with_error(21, 'error') { subject.error(21, :error) }
|
33
23
|
end
|
34
24
|
|
35
25
|
def test_help_simple
|
@@ -39,7 +29,7 @@ class MainTest < Test
|
|
39
29
|
Some helptext
|
40
30
|
EXPECTED
|
41
31
|
|
42
|
-
assert_output(expected_text){ subject.show_help }
|
32
|
+
assert_output(expected_text) { subject.show_help }
|
43
33
|
end
|
44
34
|
|
45
35
|
def test_help_with_args
|
@@ -54,7 +44,7 @@ class MainTest < Test
|
|
54
44
|
here
|
55
45
|
EXPECTED
|
56
46
|
|
57
|
-
assert_output(expected_text){ subject.show_help }
|
47
|
+
assert_output(expected_text) { subject.show_help }
|
58
48
|
end
|
59
49
|
|
60
50
|
def test_argument_required
|
@@ -64,10 +54,10 @@ class MainTest < Test
|
|
64
54
|
subject.parse_argv(as_argv(''))
|
65
55
|
end
|
66
56
|
|
67
|
-
expected = {'ARG' => 'arg', 'FILES' => []}
|
57
|
+
expected = { 'ARG' => 'arg', 'FILES' => [] }
|
68
58
|
assert_equal(expected, subject.parse_argv(as_argv('arg')))
|
69
59
|
|
70
|
-
expected = {'ARG' => 'arg1', 'FILES' => %w[arg2 arg3]}
|
60
|
+
expected = { 'ARG' => 'arg1', 'FILES' => %w[arg2 arg3] }
|
71
61
|
assert_equal(expected, subject.parse_argv(as_argv('arg1 arg2 arg3')))
|
72
62
|
end
|
73
63
|
|
@@ -83,10 +73,10 @@ class MainTest < Test
|
|
83
73
|
subject.parse_argv(as_argv(''))
|
84
74
|
end
|
85
75
|
|
86
|
-
expected = {'ARG1' => 'arg1', 'ARG2' => 'arg2', 'FILES' => []}
|
76
|
+
expected = { 'ARG1' => 'arg1', 'ARG2' => 'arg2', 'FILES' => [] }
|
87
77
|
assert_equal(expected, subject.parse_argv(as_argv('arg1 arg2')))
|
88
78
|
|
89
|
-
expected = {'ARG1' => 'arg', 'FILES' => []}
|
79
|
+
expected = { 'ARG1' => 'arg', 'FILES' => [] }
|
90
80
|
assert_equal(expected, subject.parse_argv(as_argv('arg')))
|
91
81
|
end
|
92
82
|
|
@@ -100,21 +90,21 @@ class MainTest < Test
|
|
100
90
|
Some additional explaination can be here
|
101
91
|
HELP
|
102
92
|
|
103
|
-
expected = {'FILES' => []}
|
93
|
+
expected = { 'FILES' => [] }
|
104
94
|
assert_equal(expected, subject.parse_argv(as_argv('')))
|
105
95
|
|
106
|
-
expected = {'NAME' => 'name', 'FILES' => []}
|
96
|
+
expected = { 'NAME' => 'name', 'FILES' => [] }
|
107
97
|
assert_equal(expected, subject.parse_argv(as_argv('--named name')))
|
108
98
|
assert_equal(expected, subject.parse_argv(as_argv('-n name')))
|
109
99
|
|
110
|
-
expected = {'LNAME' => 'long', 'FILES' => []}
|
100
|
+
expected = { 'LNAME' => 'long', 'FILES' => [] }
|
111
101
|
assert_equal(expected, subject.parse_argv(as_argv('--named-long long')))
|
112
102
|
|
113
|
-
expected = {'unnamed' => true, 'FILES' => []}
|
103
|
+
expected = { 'unnamed' => true, 'FILES' => [] }
|
114
104
|
assert_equal(expected, subject.parse_argv(as_argv('--unnamed')))
|
115
105
|
assert_equal(expected, subject.parse_argv(as_argv('-u')))
|
116
106
|
|
117
|
-
expected = {'un-named' => true, 'FILES' => []}
|
107
|
+
expected = { 'un-named' => true, 'FILES' => [] }
|
118
108
|
assert_equal(expected, subject.parse_argv(as_argv('--un-named')))
|
119
109
|
|
120
110
|
expected = {
|
@@ -125,23 +115,14 @@ class MainTest < Test
|
|
125
115
|
'FILES' => %w[FILE1 FILE2]
|
126
116
|
}
|
127
117
|
|
128
|
-
result =
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
--un-named
|
133
|
-
FILE1
|
134
|
-
FILE2
|
135
|
-
])
|
118
|
+
result =
|
119
|
+
subject.parse_argv(
|
120
|
+
%w[--named name --named-long long --unnamed --un-named FILE1 FILE2]
|
121
|
+
)
|
136
122
|
assert_equal(expected, result)
|
137
123
|
|
138
|
-
result =
|
139
|
-
-nu name
|
140
|
-
--named-long long
|
141
|
-
--un-named
|
142
|
-
FILE1
|
143
|
-
FILE2
|
144
|
-
])
|
124
|
+
result =
|
125
|
+
subject.parse_argv(%w[-nu name --named-long long --un-named FILE1 FILE2])
|
145
126
|
assert_equal(expected, result)
|
146
127
|
end
|
147
128
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Blumtritt
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -56,10 +56,11 @@ description: |
|
|
56
56
|
This gem is a lean, easy to use CLI framework with a very small footprint.
|
57
57
|
It provides an easy to use argument parsing, help displaying and
|
58
58
|
minimalistic error handling.
|
59
|
-
email:
|
59
|
+
email:
|
60
60
|
executables: []
|
61
61
|
extensions: []
|
62
|
-
extra_rdoc_files:
|
62
|
+
extra_rdoc_files:
|
63
|
+
- README.md
|
63
64
|
files:
|
64
65
|
- ".gitignore"
|
65
66
|
- README.md
|
@@ -80,7 +81,7 @@ licenses: []
|
|
80
81
|
metadata:
|
81
82
|
source_code_uri: https://github.com/mblumtritt/mini-cli
|
82
83
|
bug_tracker_uri: https://github.com/mblumtritt/mini-cli/issues
|
83
|
-
post_install_message:
|
84
|
+
post_install_message:
|
84
85
|
rdoc_options: []
|
85
86
|
require_paths:
|
86
87
|
- lib
|
@@ -95,8 +96,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
96
|
- !ruby/object:Gem::Version
|
96
97
|
version: '0'
|
97
98
|
requirements: []
|
98
|
-
rubygems_version: 3.1.
|
99
|
-
signing_key:
|
99
|
+
rubygems_version: 3.1.4
|
100
|
+
signing_key:
|
100
101
|
specification_version: 4
|
101
102
|
summary: The lean CLI framework for Ruby
|
102
103
|
test_files:
|