benry-cmdapp 0.1.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 +7 -0
- data/CHANGES.md +8 -0
- data/MIT-LICENSE +21 -0
- data/README.md +2475 -0
- data/benry-cmdapp.gemspec +38 -0
- data/doc/benry-cmdapp.html +2314 -0
- data/doc/css/style.css +168 -0
- data/lib/benry/cmdapp.rb +1376 -0
- data/test/action_test.rb +1038 -0
- data/test/app_test.rb +1371 -0
- data/test/func_test.rb +137 -0
- data/test/help_test.rb +755 -0
- data/test/index_test.rb +185 -0
- data/test/run_all.rb +7 -0
- data/test/shared.rb +75 -0
- data/test/util_test.rb +189 -0
- metadata +98 -0
data/test/index_test.rb
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'oktest'
|
4
|
+
|
5
|
+
require 'benry/cmdapp'
|
6
|
+
require_relative './shared'
|
7
|
+
|
8
|
+
|
9
|
+
Oktest.scope do
|
10
|
+
|
11
|
+
|
12
|
+
topic Benry::CmdApp::ActionIndex do
|
13
|
+
include CommonTestingHelper
|
14
|
+
|
15
|
+
class IndexTestAction < Benry::CmdApp::ActionScope
|
16
|
+
@action.("lookup test #1")
|
17
|
+
@option.(:repeat, "-r <N>", "repeat", type: Integer)
|
18
|
+
def lookup1(user="world", repeat: nil); end
|
19
|
+
#
|
20
|
+
@action.("lookup test #2")
|
21
|
+
def lookup2(); end
|
22
|
+
#
|
23
|
+
private
|
24
|
+
@action.("lookup test #3") # hidden
|
25
|
+
def lookup3(); end
|
26
|
+
end
|
27
|
+
|
28
|
+
Benry::CmdApp.action_alias("findxx", "lookup2")
|
29
|
+
|
30
|
+
|
31
|
+
topic '.lookup_action()' do
|
32
|
+
|
33
|
+
spec "[!vivoa] returns action metadata object." do
|
34
|
+
x = Benry::CmdApp::INDEX.lookup_action("lookup1")
|
35
|
+
ok {x} != nil
|
36
|
+
ok {x}.is_a?(Benry::CmdApp::ActionMetadata)
|
37
|
+
ok {x.name} == "lookup1"
|
38
|
+
ok {x.klass} == IndexTestAction
|
39
|
+
ok {x.method} == :lookup1
|
40
|
+
end
|
41
|
+
|
42
|
+
spec "[!tnwq0] supports alias name." do
|
43
|
+
x = Benry::CmdApp::INDEX.lookup_action("findxx")
|
44
|
+
ok {x} != nil
|
45
|
+
ok {x}.is_a?(Benry::CmdApp::ActionMetadata)
|
46
|
+
ok {x.name} == "lookup2"
|
47
|
+
ok {x.klass} == IndexTestAction
|
48
|
+
ok {x.method} == :lookup2
|
49
|
+
end
|
50
|
+
|
51
|
+
spec "[!z15vu] returns ActionWithArgs object if alias has args and/or kwargs." do
|
52
|
+
Benry::CmdApp.action_alias("findyy1", "lookup1", "Alice", "-r3")
|
53
|
+
x = Benry::CmdApp::INDEX.lookup_action("findyy1")
|
54
|
+
ok {x} != nil
|
55
|
+
ok {x}.is_a?(Benry::CmdApp::ActionWithArgs)
|
56
|
+
ok {x.args} == ["Alice"]
|
57
|
+
ok {x.kwargs} == {repeat: 3}
|
58
|
+
ok {x.name} == "lookup1"
|
59
|
+
ok {x.klass} == IndexTestAction
|
60
|
+
ok {x.method} == :lookup1
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
topic '.each_action_name_and_desc()' do
|
67
|
+
|
68
|
+
before do
|
69
|
+
clear_index_except(IndexTestAction)
|
70
|
+
end
|
71
|
+
|
72
|
+
after do
|
73
|
+
restore_index()
|
74
|
+
end
|
75
|
+
|
76
|
+
spec "[!5lahm] yields action name, description, and important flag." do
|
77
|
+
arr = []
|
78
|
+
Benry::CmdApp::INDEX.each_action_name_and_desc(false) {|a| arr << a }
|
79
|
+
ok {arr} == [
|
80
|
+
["lookup1", "lookup test #1", nil],
|
81
|
+
["lookup2", "lookup test #2", nil],
|
82
|
+
]
|
83
|
+
#
|
84
|
+
with_important("lookup1"=>true, "lookup2"=>false) do
|
85
|
+
arr = []
|
86
|
+
Benry::CmdApp::INDEX.each_action_name_and_desc(false) {|a| arr << a }
|
87
|
+
ok {arr} == [
|
88
|
+
["lookup1", "lookup test #1", true],
|
89
|
+
["lookup2", "lookup test #2", false],
|
90
|
+
]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
spec "[!27j8b] includes alias names when the first arg is true." do
|
95
|
+
arr = []
|
96
|
+
Benry::CmdApp::INDEX.each_action_name_and_desc(true) {|a| arr << a }
|
97
|
+
ok {arr} == [
|
98
|
+
["findxx", "alias of 'lookup2' action", nil],
|
99
|
+
["findyy1", "alias of 'lookup1 Alice -r3'", nil],
|
100
|
+
["lookup1", "lookup test #1", nil],
|
101
|
+
["lookup2", "lookup test #2", nil],
|
102
|
+
]
|
103
|
+
end
|
104
|
+
|
105
|
+
spec "[!8xt8s] rejects hidden actions if 'all: false' kwarg specified." do
|
106
|
+
arr = []
|
107
|
+
Benry::CmdApp::INDEX.each_action_name_and_desc(false, all: false) {|a| arr << a }
|
108
|
+
ok {arr} == [
|
109
|
+
["lookup1", "lookup test #1", nil],
|
110
|
+
["lookup2", "lookup test #2", nil],
|
111
|
+
]
|
112
|
+
end
|
113
|
+
|
114
|
+
spec "[!5h7s5] includes hidden actions if 'all: true' kwarg specified." do
|
115
|
+
arr = []
|
116
|
+
Benry::CmdApp::INDEX.each_action_name_and_desc(false, all: true) {|a| arr << a }
|
117
|
+
ok {arr} == [
|
118
|
+
["lookup1", "lookup test #1", nil],
|
119
|
+
["lookup2", "lookup test #2", nil],
|
120
|
+
["lookup3", "lookup test #3", false], # hidden action
|
121
|
+
]
|
122
|
+
end
|
123
|
+
|
124
|
+
spec "[!arcia] action names are sorted." do
|
125
|
+
arr = []
|
126
|
+
Benry::CmdApp::INDEX.each_action_name_and_desc(true) {|a| arr << a }
|
127
|
+
ok {arr} == arr.sort_by(&:first)
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
topic '#delete_action()' do
|
134
|
+
|
135
|
+
spec "[!08e1s] unregisters action." do
|
136
|
+
class DeleteActionTest < Benry::CmdApp::ActionScope
|
137
|
+
@action.("test")
|
138
|
+
def delaction1(); end
|
139
|
+
end
|
140
|
+
name = "delaction1"
|
141
|
+
ok {Benry::CmdApp::INDEX.action_exist?(name)} == true
|
142
|
+
Benry::CmdApp::INDEX.delete_action(name)
|
143
|
+
ok {Benry::CmdApp::INDEX.action_exist?(name)} == false
|
144
|
+
end
|
145
|
+
|
146
|
+
spec "[!zjpq0] raises error if action not registered." do
|
147
|
+
name = "delaction99"
|
148
|
+
ok {Benry::CmdApp::INDEX.action_exist?(name)} == false
|
149
|
+
pr = proc { Benry::CmdApp::INDEX.delete_action(name) }
|
150
|
+
ok {pr}.raise?(Benry::CmdApp::ActionNotFoundError,
|
151
|
+
"delete_action(\"delaction99\"): Action not found.")
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
|
157
|
+
topic '#delete_alias()' do
|
158
|
+
|
159
|
+
spec "[!8ls45] unregisters alias." do
|
160
|
+
class DeleteAliasTest < Benry::CmdApp::ActionScope
|
161
|
+
@action.("test")
|
162
|
+
def delalias1(); end
|
163
|
+
end
|
164
|
+
Benry::CmdApp.action_alias("delali1", "delalias1")
|
165
|
+
name = "delali1"
|
166
|
+
ok {Benry::CmdApp::INDEX.alias_exist?(name)} == true
|
167
|
+
Benry::CmdApp::INDEX.delete_alias(name)
|
168
|
+
ok {Benry::CmdApp::INDEX.alias_exist?(name)} == false
|
169
|
+
end
|
170
|
+
|
171
|
+
spec "[!fdfyq] raises error if alias not registered." do
|
172
|
+
name = "delalias99"
|
173
|
+
ok {Benry::CmdApp::INDEX.alias_exist?(name)} == false
|
174
|
+
pr = proc { Benry::CmdApp::INDEX.delete_alias(name) }
|
175
|
+
ok {pr}.raise?(Benry::CmdApp::ActionNotFoundError,
|
176
|
+
"delete_alias(\"delalias99\"): Alias not found.")
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
180
|
+
|
181
|
+
|
182
|
+
end
|
183
|
+
|
184
|
+
|
185
|
+
end
|
data/test/run_all.rb
ADDED
data/test/shared.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
module CommonTestingHelper
|
5
|
+
|
6
|
+
def uncolorize(str)
|
7
|
+
return str.gsub(/\e\[.*?m/, '')
|
8
|
+
end
|
9
|
+
|
10
|
+
def without_tty(&block)
|
11
|
+
result = nil
|
12
|
+
capture_sio(tty: false) { result = yield }
|
13
|
+
return result
|
14
|
+
end
|
15
|
+
|
16
|
+
def with_tty(&block)
|
17
|
+
result = nil
|
18
|
+
capture_sio(tty: true) { result = yield }
|
19
|
+
return result
|
20
|
+
end
|
21
|
+
|
22
|
+
def with_important(keyval={}, &block)
|
23
|
+
bkup = {}
|
24
|
+
keyval.each do |name, val|
|
25
|
+
action = Benry::CmdApp::INDEX.get_action(name)
|
26
|
+
bkup[name] = action.important
|
27
|
+
action.instance_variable_set('@important', val)
|
28
|
+
end
|
29
|
+
begin
|
30
|
+
yield
|
31
|
+
ensure
|
32
|
+
bkup.each do |name, val|
|
33
|
+
action = Benry::CmdApp::INDEX.get_action(name)
|
34
|
+
action.instance_variable_set('@important', val)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
module_function
|
40
|
+
|
41
|
+
def clear_index_except(klass)
|
42
|
+
actions = Benry::CmdApp::INDEX.instance_variable_get('@actions')
|
43
|
+
aliases = Benry::CmdApp::INDEX.instance_variable_get('@aliases')
|
44
|
+
@_bkup_actions = actions.dup()
|
45
|
+
actions.delete_if {|_, x| x.klass != klass }
|
46
|
+
anames = actions.keys()
|
47
|
+
@_bkup_aliases = aliases.dup()
|
48
|
+
aliases.delete_if {|_, x| ! anames.include?(x.action_name) }
|
49
|
+
end
|
50
|
+
|
51
|
+
def restore_index()
|
52
|
+
actions = Benry::CmdApp::INDEX.instance_variable_get('@actions')
|
53
|
+
aliases = Benry::CmdApp::INDEX.instance_variable_get('@aliases')
|
54
|
+
actions.update(@_bkup_actions)
|
55
|
+
aliases.update(@_bkup_aliases)
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
module ActionMetadataTestingHelper
|
62
|
+
include CommonTestingHelper
|
63
|
+
|
64
|
+
def new_schema(lang: true)
|
65
|
+
schema = Benry::Cmdopt::Schema.new
|
66
|
+
schema.add(:lang, "-l, --lang=<en|fr|it>", "language") if lang
|
67
|
+
return schema
|
68
|
+
end
|
69
|
+
|
70
|
+
def new_metadata(schema, meth=:halo1, **kwargs)
|
71
|
+
metadata = Benry::CmdApp::ActionMetadata.new(meth.to_s, MetadataTestAction, meth, "greeting", schema, **kwargs)
|
72
|
+
return metadata
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
data/test/util_test.rb
ADDED
@@ -0,0 +1,189 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'oktest'
|
4
|
+
|
5
|
+
require 'benry/cmdapp'
|
6
|
+
require_relative './shared'
|
7
|
+
|
8
|
+
|
9
|
+
Oktest.scope do
|
10
|
+
|
11
|
+
|
12
|
+
topic Benry::CmdApp::Util do
|
13
|
+
|
14
|
+
|
15
|
+
topic '.hidden_name?()' do
|
16
|
+
|
17
|
+
spec "[!fcfic] returns true if name is '_foo'." do
|
18
|
+
ok {Benry::CmdApp::Util.hidden_name?("_foo")} == true
|
19
|
+
end
|
20
|
+
|
21
|
+
spec "[!po5co] returns true if name is '_foo:bar'." do
|
22
|
+
ok {Benry::CmdApp::Util.hidden_name?("_foo:bar")} == true
|
23
|
+
end
|
24
|
+
|
25
|
+
spec "[!9iqz3] returns true if name is 'foo:_bar'." do
|
26
|
+
ok {Benry::CmdApp::Util.hidden_name?("foo:_bar")} == true
|
27
|
+
end
|
28
|
+
|
29
|
+
spec "[!mjjbg] returns false if else." do
|
30
|
+
ok {Benry::CmdApp::Util.hidden_name?("foo")} == false
|
31
|
+
ok {Benry::CmdApp::Util.hidden_name?("foo_")} == false
|
32
|
+
ok {Benry::CmdApp::Util.hidden_name?("foo_:bar")} == false
|
33
|
+
ok {Benry::CmdApp::Util.hidden_name?("foo:bar_")} == false
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
topic '.schema_empty?()' do
|
40
|
+
|
41
|
+
spec "[!8t5ju] returns true if schema empty." do
|
42
|
+
sc = Benry::CmdOpt::Schema.new
|
43
|
+
ok {Benry::CmdApp::Util.schema_empty?(sc)} == true
|
44
|
+
sc.add(:help, "-h", "help")
|
45
|
+
ok {Benry::CmdApp::Util.schema_empty?(sc)} == false
|
46
|
+
end
|
47
|
+
|
48
|
+
spec "[!c4ljy] returns true if schema contains only private (hidden) options." do
|
49
|
+
sc = Benry::CmdOpt::Schema.new
|
50
|
+
sc.add(:_help, "-h", "help")
|
51
|
+
ok {Benry::CmdApp::Util.schema_empty?(sc)} == true
|
52
|
+
sc.add(:version, "-V", "version")
|
53
|
+
ok {Benry::CmdApp::Util.schema_empty?(sc)} == false
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
topic '.method2action()' do
|
60
|
+
|
61
|
+
spec "[!801f9] converts action name 'aa_bb_cc_' into 'aa_bb_cc'." do
|
62
|
+
ok {Benry::CmdApp::Util.method2action("aa_")} == "aa"
|
63
|
+
ok {Benry::CmdApp::Util.method2action("_aa_")} == "_aa"
|
64
|
+
end
|
65
|
+
|
66
|
+
spec "[!9pahu] converts action name 'aa__bb__cc' into 'aa:bb:cc'." do
|
67
|
+
ok {Benry::CmdApp::Util.method2action("aa__bb__cc")} == "aa:bb:cc"
|
68
|
+
end
|
69
|
+
|
70
|
+
spec "[!7a1s7] converts action name 'aa_bb:_cc_dd' into 'aa-bb:_cc-dd'." do
|
71
|
+
ok {Benry::CmdApp::Util.method2action("aa_bb:cc_dd")} == "aa-bb:cc-dd"
|
72
|
+
ok {Benry::CmdApp::Util.method2action("aa_bb:_cc_dd")} == "aa-bb:_cc-dd"
|
73
|
+
ok {Benry::CmdApp::Util.method2action("aa___bb")} == "aa:_bb"
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
topic '.colorize?()' do
|
80
|
+
|
81
|
+
spec "[!801y1] returns $COLOR_MODE value if it is not nil." do
|
82
|
+
bkup = $COLOR_MODE
|
83
|
+
begin
|
84
|
+
$COLOR_MODE = true
|
85
|
+
ok {Benry::CmdApp::Util.colorize?()} == true
|
86
|
+
$COLOR_MODE = false
|
87
|
+
ok {Benry::CmdApp::Util.colorize?()} == false
|
88
|
+
ensure
|
89
|
+
$COLOR_MODE = bkup
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
spec "[!0harg] returns true if stdout is a tty." do
|
94
|
+
capture_sio(tty: true) {
|
95
|
+
ok {Benry::CmdApp::Util.colorize?()} == true
|
96
|
+
}
|
97
|
+
end
|
98
|
+
|
99
|
+
spec "[!u1j1x] returns false if stdout is not a tty." do
|
100
|
+
capture_sio(tty: false) {
|
101
|
+
ok {Benry::CmdApp::Util.colorize?()} == false
|
102
|
+
}
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
topic '.del_escape_seq()' do
|
109
|
+
|
110
|
+
spec "[!wgp2b] deletes escape sequence." do
|
111
|
+
s = " \e[1m%-18s\e[0m : %s"
|
112
|
+
ok {Benry::CmdApp::Util.del_escape_seq(s)} == " %-18s : %s"
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
topic '._important?()' do
|
119
|
+
|
120
|
+
spec "[!0yz2h] returns nil if tag == nil." do
|
121
|
+
ok {Benry::CmdApp::Util._important?(nil)} == nil
|
122
|
+
end
|
123
|
+
|
124
|
+
spec "[!h5pid] returns true if tag == :important." do
|
125
|
+
ok {Benry::CmdApp::Util._important?(:important)} == true
|
126
|
+
ok {Benry::CmdApp::Util._important?("important")} == true
|
127
|
+
end
|
128
|
+
|
129
|
+
spec "[!7zval] returns false if tag == :unimportant." do
|
130
|
+
ok {Benry::CmdApp::Util._important?(:unimportant)} == false
|
131
|
+
ok {Benry::CmdApp::Util._important?("unimportant")} == false
|
132
|
+
end
|
133
|
+
|
134
|
+
spec "[!z1ygi] supports nested tag." do
|
135
|
+
ok {Benry::CmdApp::Util._important?([:important, :foo])} == true
|
136
|
+
ok {Benry::CmdApp::Util._important?([:bar, :unimportant])} == false
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
|
142
|
+
topic '.format_help_line()' do
|
143
|
+
|
144
|
+
fixture :format do
|
145
|
+
" [[%-10s]] : %s"
|
146
|
+
end
|
147
|
+
|
148
|
+
spec "[!xx1vj] if `important == nil` then format help line with no decoration." do
|
149
|
+
|format|
|
150
|
+
s = Benry::CmdApp::Util.format_help_line(format, "<action>", "<desc>", nil)
|
151
|
+
ok {s} == " [[<action> ]] : <desc>"
|
152
|
+
end
|
153
|
+
|
154
|
+
spec "[!oaxp1] if `important == true` then format help line with strong decoration." do
|
155
|
+
|format|
|
156
|
+
s = Benry::CmdApp::Util.format_help_line(format, "<action>", "<desc>", true)
|
157
|
+
ok {s} == " [[\e[4m<action>\e[0m ]] : <desc>"
|
158
|
+
end
|
159
|
+
|
160
|
+
spec "[!bdhh6] if `important == false` then format help line with weak decoration." do
|
161
|
+
|format|
|
162
|
+
s = Benry::CmdApp::Util.format_help_line(format, "<action>", "<desc>", false)
|
163
|
+
ok {s} == " [[\e[2m<action>\e[0m ]] : <desc>"
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
|
169
|
+
topic '.fill_with_decoration()' do
|
170
|
+
|
171
|
+
spec "[!udrbj] returns decorated string with padding by white spaces." do
|
172
|
+
format = " [[%-10s]] : %s"
|
173
|
+
s = Benry::CmdApp::Util.fill_with_decoration(format, "<action>") {|s| "\e[1m#{s}\e[0m" }
|
174
|
+
ok {s} == "\e[1m<action>\e[0m "
|
175
|
+
end
|
176
|
+
|
177
|
+
spec "[!7bl2b] considers minus sign in format." do
|
178
|
+
format = " [[%10s]] : %s"
|
179
|
+
s = Benry::CmdApp::Util.fill_with_decoration(format, "<action>") {|s| "\e[1m#{s}\e[0m" }
|
180
|
+
ok {s} == " \e[1m<action>\e[0m"
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
184
|
+
|
185
|
+
|
186
|
+
end
|
187
|
+
|
188
|
+
|
189
|
+
end
|
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: benry-cmdapp
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- kwatch
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-10-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: benry-cmdopt
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: oktest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1'
|
41
|
+
description: |
|
42
|
+
Benry-CmdApp is a framework to create command-line application
|
43
|
+
like `git`, `docker`, or `npm` commands.
|
44
|
+
|
45
|
+
If you want create a command-line application which takes sub-commands,
|
46
|
+
Benry-CmdApp is the solution.
|
47
|
+
|
48
|
+
See https://kwatch.github.io/benry-ruby/benry-cmdapp.html for details.
|
49
|
+
email: kwatch@gmail.com
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- CHANGES.md
|
55
|
+
- MIT-LICENSE
|
56
|
+
- README.md
|
57
|
+
- benry-cmdapp.gemspec
|
58
|
+
- doc/benry-cmdapp.html
|
59
|
+
- doc/css/style.css
|
60
|
+
- lib/benry/cmdapp.rb
|
61
|
+
- test/action_test.rb
|
62
|
+
- test/app_test.rb
|
63
|
+
- test/func_test.rb
|
64
|
+
- test/help_test.rb
|
65
|
+
- test/index_test.rb
|
66
|
+
- test/run_all.rb
|
67
|
+
- test/shared.rb
|
68
|
+
- test/util_test.rb
|
69
|
+
homepage: https://kwatch.github.io/benry-ruby/benry-cmdapp.html
|
70
|
+
licenses:
|
71
|
+
- MIT
|
72
|
+
metadata: {}
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '2.3'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubygems_version: 3.4.10
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: Command-line application framework`
|
92
|
+
test_files:
|
93
|
+
- test/action_test.rb
|
94
|
+
- test/app_test.rb
|
95
|
+
- test/func_test.rb
|
96
|
+
- test/help_test.rb
|
97
|
+
- test/index_test.rb
|
98
|
+
- test/util_test.rb
|