choosy 0.2.5 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +8 -0
- data/LICENSE +2 -0
- data/README.markdown +102 -54
- data/Rakefile +27 -5
- data/TODO.md +5 -0
- data/examples/bar.rb +9 -7
- data/examples/foo.rb +9 -7
- data/examples/superfoo.rb +48 -36
- data/lib/VERSION.yml +6 -0
- data/lib/choosy/argument.rb +5 -0
- data/lib/choosy/base_command.rb +11 -10
- data/lib/choosy/command.rb +17 -1
- data/lib/choosy/converter.rb +5 -1
- data/lib/choosy/dsl/argument_builder.rb +33 -21
- data/lib/choosy/dsl/base_builder.rb +26 -0
- data/lib/choosy/dsl/base_command_builder.rb +23 -30
- data/lib/choosy/dsl/command_builder.rb +8 -12
- data/lib/choosy/dsl/option_builder.rb +14 -45
- data/lib/choosy/dsl/super_command_builder.rb +17 -20
- data/lib/choosy/errors.rb +1 -0
- data/lib/choosy/option.rb +19 -0
- data/lib/choosy/printing/base_printer.rb +231 -0
- data/lib/choosy/printing/color.rb +8 -5
- data/lib/choosy/printing/erb_printer.rb +1 -1
- data/lib/choosy/printing/help_printer.rb +49 -163
- data/lib/choosy/printing/manpage.rb +235 -0
- data/lib/choosy/printing/manpage_printer.rb +95 -0
- data/lib/choosy/printing/terminal.rb +39 -8
- data/lib/choosy/printing.rb +1 -0
- data/lib/choosy/super_command.rb +13 -4
- data/lib/choosy/super_parser.rb +5 -1
- data/lib/choosy/verifier.rb +8 -0
- data/lib/choosy/version.rb +64 -5
- data/spec/choosy/argument_spec.rb +28 -0
- data/spec/choosy/base_command_spec.rb +7 -3
- data/spec/choosy/command_spec.rb +2 -2
- data/spec/choosy/converter_spec.rb +3 -2
- data/spec/choosy/dsl/argument_builder_spec.rb +19 -8
- data/spec/choosy/dsl/base_builder_spec.rb +43 -0
- data/spec/choosy/dsl/base_command_builder_spec.rb +7 -9
- data/spec/choosy/dsl/commmand_builder_spec.rb +9 -1
- data/spec/choosy/dsl/option_builder_spec.rb +1 -65
- data/spec/choosy/dsl/super_command_builder_spec.rb +19 -8
- data/spec/choosy/option_spec.rb +68 -0
- data/spec/choosy/printing/base_printer_spec.rb +155 -0
- data/spec/choosy/printing/color_spec.rb +4 -0
- data/spec/choosy/printing/help_printer_spec.rb +15 -109
- data/spec/choosy/printing/manpage_printer_spec.rb +95 -0
- data/spec/choosy/printing/manpage_spec.rb +206 -0
- data/spec/choosy/super_command_spec.rb +7 -0
- data/spec/choosy/super_parser_spec.rb +9 -0
- data/spec/choosy/verifier_spec.rb +31 -1
- data/spec/choosy/version.yml +5 -0
- data/spec/choosy/version_spec.rb +87 -0
- data/spec/integration/command-C_spec.rb +23 -0
- data/spec/integration/supercommand-C_spec.rb +45 -0
- metadata +81 -78
- data/lib/VERSION +0 -1
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'spec_helpers'
|
2
|
+
require 'choosy/command'
|
3
|
+
require 'choosy/printing/manpage_printer'
|
4
|
+
|
5
|
+
module Choosy::Printing
|
6
|
+
describe ManpagePrinter do
|
7
|
+
before :each do
|
8
|
+
@man = ManpagePrinter.new
|
9
|
+
@cmd = Choosy::Command.new(:manpage)
|
10
|
+
end
|
11
|
+
|
12
|
+
def output
|
13
|
+
@man.manpage.buffer.join("\n")
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "for the name segment" do
|
17
|
+
it "should not print anything if no summary is present" do
|
18
|
+
@man.format_name(@cmd)
|
19
|
+
output.should eql('')
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should print out the summary" do
|
23
|
+
@cmd.alter do
|
24
|
+
summary 'summary goes here'
|
25
|
+
end
|
26
|
+
@man.format_name(@cmd)
|
27
|
+
output.should eql('.SH "NAME"
|
28
|
+
manpage \\- summary goes here')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "for the synopsis" do
|
33
|
+
it "should add the synopsis correctly" do
|
34
|
+
@cmd.alter do
|
35
|
+
boolean :bold, "bold"
|
36
|
+
integer :long_option_goes_here, "long"
|
37
|
+
integer :shorter_option, "short"
|
38
|
+
arguments do
|
39
|
+
metaname '[ARGS+++]'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
@man.columns = 60
|
43
|
+
@man.format_synopsis(@cmd)
|
44
|
+
output.should eql('.SH "SYNOPSIS"
|
45
|
+
.nf
|
46
|
+
manpage [\\-b|\\-\\-bold]
|
47
|
+
[\\-l|\\-\\-long\\-option\\-goes\\-here=LONG_OPTION_GOES_HERE]
|
48
|
+
[\\-s|\\-\\-shorter\\-option=SHORTER_OPTION] [ARGS+++]
|
49
|
+
.fi')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should format an option" do
|
54
|
+
o = @cmd.builder.integer :opt, 'option line here.'
|
55
|
+
@man.format_option(o, @man.regular_option(o), ' ')
|
56
|
+
output.should eql('.TP 8
|
57
|
+
\\fI\\-o\\fP, \\fI\\-\\-opt\\fP OPT
|
58
|
+
option line here&.')
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should format a command" do
|
62
|
+
@cmd.alter do
|
63
|
+
summary 'this is a summary'
|
64
|
+
end
|
65
|
+
@man.format_command(@cmd, 'cmd', ' ')
|
66
|
+
output.should eql('.TP 4
|
67
|
+
cmd
|
68
|
+
this is a summary')
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should format a heading correctly" do
|
72
|
+
@cmd.alter do
|
73
|
+
header 'here'
|
74
|
+
end
|
75
|
+
@man.format_element(@cmd.listing[0])
|
76
|
+
output.should eql('.SH "HERE"')
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should format a regular paragraph" do
|
80
|
+
@cmd.alter do
|
81
|
+
para 'paragraph'
|
82
|
+
end
|
83
|
+
@man.format_element(@cmd.listing[0])
|
84
|
+
output.should eql(".P\nparagraph")
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should format an empty paragraph" do
|
88
|
+
@cmd.alter do
|
89
|
+
para
|
90
|
+
end
|
91
|
+
@man.format_element(@cmd.listing[0])
|
92
|
+
output.should eql('.P')
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,206 @@
|
|
1
|
+
require 'choosy/printing/manpage'
|
2
|
+
require 'spec_helpers'
|
3
|
+
|
4
|
+
module Choosy::Printing
|
5
|
+
describe ManpageFormatter do
|
6
|
+
before :each do
|
7
|
+
@format = ManpageFormatter.new
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should format bold" do
|
11
|
+
@format.bold("this").should eql('\\fBthis\\fP')
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should format simple bold" do
|
15
|
+
@format.bold.should eql('\\fB')
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should format italics" do
|
19
|
+
@format.italics('this').should eql('\\fIthis\\fP')
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should format simple italics" do
|
23
|
+
@format.italics.should eql('\\fI')
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should format roman" do
|
27
|
+
@format.roman('this').should eql('\\fRthis\\fP')
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should format simple roman" do
|
31
|
+
@format.roman.should eql('\\fR')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe Manpage do
|
36
|
+
before :each do
|
37
|
+
@man = Manpage.new
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should format the frame outlines correctly" do
|
41
|
+
@man.name = 'named'
|
42
|
+
@man.date = 'today'
|
43
|
+
@man.version = 'version'
|
44
|
+
@man.manual = 'manual'
|
45
|
+
|
46
|
+
@man.frame_outline.should eql('.TH "named" "1" "today" "version" "manual"')
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should format a section heading correctly" do
|
50
|
+
@man.section_heading("Header:").should eql(%Q{.SH "HEADER"})
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should format a sub-section heading correctly" do
|
54
|
+
@man.subsection_heading('Sub-Section:').should eql(%Q{.SS "SUB\\-SECTION"})
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should add a paragraph break" do
|
58
|
+
@man.paragraph.should eql(".P")
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should attach the line after the paragraph" do
|
62
|
+
@man.paragraph("some text").should eql(".P\nsome text")
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should handle indented paragraphs" do
|
66
|
+
@man.indented_paragraph("this is a", "goes here").should eql(%Q{.IP "this is a"\ngoes here})
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should handle hanging paragraphs" do
|
70
|
+
@man.hanging_paragraph("this is a paragraph").should eql(%Q{.HP\nthis is a paragraph})
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should handle an indented region" do
|
74
|
+
@man.indented_region.should eql('.RE')
|
75
|
+
end
|
76
|
+
|
77
|
+
describe :bold do
|
78
|
+
it "should allow for bolded text" do
|
79
|
+
@man.bold("line").should eql('.B "line"')
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should allow for bold alternating with italics" do
|
83
|
+
@man.bold("line", :italics).should eql('.BI "line"')
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should allow for bold alternating with roman" do
|
87
|
+
@man.bold("line", :roman).should eql('.BR "line"')
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should fail on unrecognized type" do
|
91
|
+
attempting {
|
92
|
+
@man.bold("line", :blah)
|
93
|
+
}.should raise_error(Choosy::ConfigurationError, /bold/)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe :italics do
|
98
|
+
it "should allow for italicized text" do
|
99
|
+
@man.italics("line").should eql('.I "line"')
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should allow for alternating bold" do
|
103
|
+
@man.italics("line", :bold).should eql('.IB "line"')
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should allow for alternating roman" do
|
107
|
+
@man.italics("line", :roman).should eql('.IR "line"')
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should fail on unrecognized type" do
|
111
|
+
attempting {
|
112
|
+
@man.italics("line", :blah)
|
113
|
+
}.should raise_error(Choosy::ConfigurationError, /italics/)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe :roman do
|
118
|
+
it "should allow for alternating bold text" do
|
119
|
+
@man.roman("line", :bold).should eql('.RB "line"')
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'should allow for alternating italics text' do
|
123
|
+
@man.roman("line", :italics).should eql('.RI "line"')
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should fail when the type isn't given" do
|
127
|
+
attempting {
|
128
|
+
@man.roman("line", nil)
|
129
|
+
}.should raise_error(Choosy::ConfigurationError, /roman/)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe :small do
|
134
|
+
it "should allow for small text" do
|
135
|
+
@man.small("this").should eql('.SM "this"')
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should allow for small bold text" do
|
139
|
+
@man.small("this", :bold).should eql('.SB "this"')
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should fail when not bold" do
|
143
|
+
attempting {
|
144
|
+
@man.small("this", :blah)
|
145
|
+
}.should raise_error(Choosy::ConfigurationError, /small/)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should allow for comments" do
|
150
|
+
@man.comment("here").should eql('./" here')
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should allow for line breaks" do
|
154
|
+
@man.line_break.should eql('.br')
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should allow for nofill" do
|
158
|
+
@man.nofill.should eql('.nf')
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should allow for blocks of no-fill" do
|
162
|
+
@man.nofill do |man|
|
163
|
+
man.text 'here'
|
164
|
+
end
|
165
|
+
@man.buffer.join("\n").should eql(".nf\nhere\n.fi")
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should allow for fill" do
|
169
|
+
@man.fill.should eql('.fi')
|
170
|
+
end
|
171
|
+
|
172
|
+
describe :term_paragraph do
|
173
|
+
it "should allow for a default width within the term" do
|
174
|
+
@man.term_paragraph("this", "that").should eql(%Q{.TP 5\nthis\nthat})
|
175
|
+
end
|
176
|
+
|
177
|
+
it "should allow you to set the first column width" do
|
178
|
+
@man.term_paragraph("this", "that", 10).should eql(%Q{.TP 10\nthis\nthat})
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
describe :to_s do
|
183
|
+
it "should write out everything to a string" do
|
184
|
+
@man.name = "blah"
|
185
|
+
@man.date = 'today'
|
186
|
+
|
187
|
+
@man.section_heading('description')
|
188
|
+
@man.paragraph('this is a line of text')
|
189
|
+
|
190
|
+
@man.to_s.should eql(<<EOF
|
191
|
+
.TH "blah" "1" "today" " " " "
|
192
|
+
.ie \\n(.g .ds Aq \\(aq
|
193
|
+
.el .ds Aq '
|
194
|
+
.\\" disable hyphenation
|
195
|
+
.nh
|
196
|
+
.\\" disable justification (adjust text to left margin only)
|
197
|
+
.ad l
|
198
|
+
.SH "DESCRIPTION"
|
199
|
+
.P
|
200
|
+
this is a line of text
|
201
|
+
EOF
|
202
|
+
)
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
@@ -73,6 +73,15 @@ module Choosy
|
|
73
73
|
@p.parse!()
|
74
74
|
}.should raise_error(Choosy::HelpCalled, Choosy::DSL::SuperCommandBuilder::SUPER)
|
75
75
|
end
|
76
|
+
|
77
|
+
it "should push the default command on the stack to parse" do
|
78
|
+
@p.command :bar
|
79
|
+
@p.super.alter do
|
80
|
+
default :bar
|
81
|
+
end
|
82
|
+
|
83
|
+
@p.parse!().subresults.should have(1).item
|
84
|
+
end
|
76
85
|
end
|
77
86
|
|
78
87
|
describe "with subcommands" do
|
@@ -12,7 +12,7 @@ module Choosy
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def v
|
15
|
-
@c.
|
15
|
+
@c.finalize!
|
16
16
|
Verifier.new
|
17
17
|
end
|
18
18
|
|
@@ -233,6 +233,16 @@ module Choosy
|
|
233
233
|
}.should raise_error(RuntimeError, 'Called!')
|
234
234
|
end
|
235
235
|
|
236
|
+
it "should convert the arguments to the requested type" do
|
237
|
+
b.arguments do
|
238
|
+
cast :integer
|
239
|
+
end
|
240
|
+
@res.args.push("1", "2", "3")
|
241
|
+
|
242
|
+
v.verify_arguments!(@res)
|
243
|
+
@res.args.should eql([1, 2, 3])
|
244
|
+
end
|
245
|
+
|
236
246
|
it "should validate that the argument count isn't too few" do
|
237
247
|
b.arguments do
|
238
248
|
count 2
|
@@ -273,6 +283,26 @@ module Choosy
|
|
273
283
|
v.verify_arguments!(@res)
|
274
284
|
}.should raise_error(Choosy::ValidationError, /no arguments allowed/)
|
275
285
|
end
|
286
|
+
|
287
|
+
it "should fail when the the arguments aren't in the list" do
|
288
|
+
b.arguments do
|
289
|
+
only :tomcat, :apache
|
290
|
+
end
|
291
|
+
@res.args << "this"
|
292
|
+
attempting {
|
293
|
+
v.verify_arguments!(@res)
|
294
|
+
}.should raise_error(Choosy::ValidationError, /unrecognized value/)
|
295
|
+
end
|
296
|
+
|
297
|
+
it "should allow multiple of the same command" do
|
298
|
+
b.arguments do
|
299
|
+
only :tomcat, :apache
|
300
|
+
end
|
301
|
+
@res.args.push(:apache, :tomcat, :apache)
|
302
|
+
attempting {
|
303
|
+
v.verify_arguments!(@res)
|
304
|
+
}.should_not raise_error
|
305
|
+
end
|
276
306
|
end
|
277
307
|
end
|
278
308
|
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'spec_helpers'
|
2
|
+
require 'tempfile'
|
3
|
+
require 'choosy/version'
|
4
|
+
|
5
|
+
module Choosy
|
6
|
+
describe Version do
|
7
|
+
before :each do
|
8
|
+
version_file = File.join(File.dirname(__FILE__), 'version.yml')
|
9
|
+
@version = Version.new(version_file)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "should be able to read" do
|
13
|
+
it "the major version" do
|
14
|
+
@version.major.should eql(5)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "the minor version" do
|
18
|
+
@version.minor.should eql(4)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "the tiny verison" do
|
22
|
+
@version.tiny.should eql(3)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "the date" do
|
26
|
+
@version.date.should eql('today')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "while altering the config file" do
|
31
|
+
before :each do
|
32
|
+
@tmp = Tempfile.new('version.yml')
|
33
|
+
@version.version_file = @tmp.path
|
34
|
+
end
|
35
|
+
|
36
|
+
after :each do
|
37
|
+
@tmp.delete
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should bump the major rev" do
|
41
|
+
@version.version!(:major)
|
42
|
+
@version.reload!
|
43
|
+
@version.major.should eql(6)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should bump the minor rev" do
|
47
|
+
@version.version!(:minor)
|
48
|
+
@version.reload!
|
49
|
+
@version.major.should eql(5)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should bump the tiny rev" do
|
53
|
+
@version.version!(:tiny)
|
54
|
+
@version.reload!
|
55
|
+
@version.tiny.should eql(4)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should reset the tiny version when minor is bumped" do
|
59
|
+
@version.version!(:minor)
|
60
|
+
@version.reload!
|
61
|
+
@version.tiny.should eql(0)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should reset the minor version when major is bumped" do
|
65
|
+
@version.version!(:major)
|
66
|
+
@version.reload!
|
67
|
+
@version.minor.should eql(0)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should reset the tiny version when major is bumped" do
|
71
|
+
@version.version!(:major)
|
72
|
+
@version.reload!
|
73
|
+
@version.tiny.should eql(0)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should reset the date" do
|
77
|
+
now = Time.now
|
78
|
+
@version.version!(:major)
|
79
|
+
@version.reload!
|
80
|
+
day, month, year = @version.date.split(/\//).map{|i|i.to_i}
|
81
|
+
now.day.should be(day)
|
82
|
+
now.month.should eql(month)
|
83
|
+
now.year.should eql(year)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'choosy'
|
2
|
+
require 'spec_helpers'
|
3
|
+
|
4
|
+
describe "Command C" do
|
5
|
+
before :each do
|
6
|
+
@cmd = Choosy::Command.new :foo do
|
7
|
+
arguments do
|
8
|
+
only :tomcat, :apache
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should only allow for given arguments" do
|
14
|
+
attempting {
|
15
|
+
@cmd.parse!(['tomcat', 'no-arg'], true)
|
16
|
+
}.should raise_error(Choosy::ValidationError, /unrecognized value/)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should allow a number of arguments" do
|
20
|
+
result = @cmd.parse!(['tomcat', 'apache', 'tomcat'])
|
21
|
+
result.args.should eql([:tomcat, :apache, :tomcat])
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helpers'
|
2
|
+
require 'choosy'
|
3
|
+
|
4
|
+
describe "SuperCommand C" do
|
5
|
+
class SuperCommandC
|
6
|
+
def super_command
|
7
|
+
Choosy::SuperCommand.new :super do
|
8
|
+
|
9
|
+
command subA
|
10
|
+
command subB
|
11
|
+
|
12
|
+
boolean :option, "Option" do
|
13
|
+
desc option_name
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def subA
|
19
|
+
Choosy::Command.new :subA do
|
20
|
+
string :sub_option, "Sub option" do
|
21
|
+
desc option_name
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def subB
|
27
|
+
Choosy::Command.new :subB do
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def option_name
|
32
|
+
"an option name"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should set the option name correctly" do
|
37
|
+
sup = SuperCommandC.new.super_command
|
38
|
+
sup.option_builders[:option].entity.description.should eql("an option name")
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should set the sub-option name correctly" do
|
42
|
+
sup = SuperCommandC.new.super_command
|
43
|
+
sup.command_builders[:subA].entity.option_builders[:sub_option].entity.description.should eql("an option name")
|
44
|
+
end
|
45
|
+
end
|