rprogram 0.1.5 → 0.1.6
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.
- data.tar.gz.sig +0 -0
- data/History.txt +14 -0
- data/LICENSE.txt +23 -0
- data/Manifest.txt +17 -4
- data/README.txt +1 -0
- data/Rakefile +6 -5
- data/lib/rprogram/compat.rb +8 -8
- data/lib/rprogram/extensions.rb +0 -2
- data/lib/rprogram/nameable.rb +8 -1
- data/lib/rprogram/non_option.rb +37 -17
- data/lib/rprogram/option.rb +44 -44
- data/lib/rprogram/option_list.rb +4 -6
- data/lib/rprogram/options.rb +5 -5
- data/lib/rprogram/program.rb +13 -14
- data/lib/rprogram/rprogram.rb +2 -2
- data/lib/rprogram/task.rb +37 -33
- data/lib/rprogram/version.rb +1 -1
- data/spec/classes/aliased_program.rb +10 -0
- data/spec/classes/ls_program.rb +8 -0
- data/spec/classes/ls_selinux_task.rb +7 -0
- data/spec/classes/ls_task.rb +12 -0
- data/spec/classes/named_program.rb +9 -0
- data/spec/compat_spec.rb +21 -0
- data/spec/nameable_spec.rb +55 -0
- data/spec/non_option_spec.rb +48 -0
- data/spec/option_examples.rb +17 -0
- data/spec/option_list_spec.rb +25 -0
- data/spec/option_spec.rb +178 -0
- data/spec/program_spec.rb +52 -0
- data/spec/rprogram_spec.rb +18 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/task_spec.rb +85 -0
- metadata +54 -13
- metadata.gz.sig +0 -0
- data/lib/rprogram/extensions/array.rb +0 -7
- data/lib/rprogram/extensions/hash.rb +0 -15
- data/test/test_rprogram.rb +0 -0
data/lib/rprogram/rprogram.rb
CHANGED
@@ -4,7 +4,7 @@ module RProgram
|
|
4
4
|
# +false+ if they are not enabled.
|
5
5
|
#
|
6
6
|
def RProgram.debug
|
7
|
-
@@
|
7
|
+
@@rprogram_debug ||= false
|
8
8
|
end
|
9
9
|
|
10
10
|
#
|
@@ -12,6 +12,6 @@ module RProgram
|
|
12
12
|
# specified _value_.
|
13
13
|
#
|
14
14
|
def RProgram.debug=(value)
|
15
|
-
@@
|
15
|
+
@@rprogram_debug = value
|
16
16
|
end
|
17
17
|
end
|
data/lib/rprogram/task.rb
CHANGED
@@ -49,7 +49,7 @@ module RProgram
|
|
49
49
|
@options.each do |name,value|
|
50
50
|
non_opt = get_non_option(name)
|
51
51
|
|
52
|
-
if (non_opt && non_opt.leading)
|
52
|
+
if (non_opt && non_opt.leading?)
|
53
53
|
args += non_opt.arguments(value)
|
54
54
|
end
|
55
55
|
end
|
@@ -99,7 +99,7 @@ module RProgram
|
|
99
99
|
@options.each do |name,value|
|
100
100
|
non_opt = get_non_option(name)
|
101
101
|
|
102
|
-
if (non_opt && non_opt.tailing)
|
102
|
+
if (non_opt && non_opt.tailing?)
|
103
103
|
args += non_opt.arguments(value)
|
104
104
|
end
|
105
105
|
end
|
@@ -123,6 +123,8 @@ module RProgram
|
|
123
123
|
# subtask :extra, ExtraTask
|
124
124
|
#
|
125
125
|
def self.subtask(name,task)
|
126
|
+
name = name.to_s
|
127
|
+
|
126
128
|
class_eval %{
|
127
129
|
def #{name}(options={},&block)
|
128
130
|
if @subtasks[#{name.dump}]
|
@@ -139,19 +141,19 @@ module RProgram
|
|
139
141
|
end
|
140
142
|
|
141
143
|
#
|
142
|
-
# Defines a non-option with the given
|
144
|
+
# Defines a non-option with the given _options_.
|
143
145
|
#
|
144
146
|
# non_option :name => 'input_file', :tailing => true
|
145
147
|
#
|
146
148
|
# non_option :name => 'file', :tailing => true, :multiple => true
|
147
149
|
#
|
148
|
-
def self.non_option(
|
149
|
-
name =
|
150
|
+
def self.non_option(options={})
|
151
|
+
name = options[:name].to_sym
|
150
152
|
|
151
|
-
self.non_options[name] = NonOption.new(
|
153
|
+
self.non_options[name] = NonOption.new(options)
|
152
154
|
|
153
155
|
class_def(name) do
|
154
|
-
if
|
156
|
+
if options[:multiple]
|
155
157
|
@options[name] ||= []
|
156
158
|
else
|
157
159
|
@options[name]
|
@@ -164,15 +166,15 @@ module RProgram
|
|
164
166
|
end
|
165
167
|
|
166
168
|
#
|
167
|
-
# Defines a long-option with the specified
|
169
|
+
# Defines a long-option with the specified _options_.
|
168
170
|
#
|
169
|
-
#
|
171
|
+
# _options_ must contain the following keys:
|
170
172
|
# <tt>:flag</tt>:: The flag to use for the option.
|
171
173
|
#
|
172
|
-
#
|
174
|
+
# _options_ may also contain the following keys:
|
173
175
|
# <tt>:name</tt>:: The name of the option. Defaults to the
|
174
|
-
# flag_namify'ed form of <tt>
|
175
|
-
# given.
|
176
|
+
# flag_namify'ed form of <tt>options[:flag]</tt>,
|
177
|
+
# if not given.
|
176
178
|
# <tt>:multiply</tt>:: Specifies that the option may appear multiple
|
177
179
|
# times in the arguments.
|
178
180
|
# <tt>:sub_options</tt>:: Specifies that the option contains multiple
|
@@ -182,20 +184,22 @@ module RProgram
|
|
182
184
|
#
|
183
185
|
# long_option :flag => '-f', :name => :file
|
184
186
|
#
|
185
|
-
def self.long_option(
|
186
|
-
|
187
|
+
def self.long_option(options={},&block)
|
188
|
+
if (options[:name].nil? && options[:flag])
|
189
|
+
options[:name] = Task.flag_namify(options[:flag])
|
190
|
+
end
|
187
191
|
|
188
|
-
define_option(
|
192
|
+
return define_option(options,&block)
|
189
193
|
end
|
190
194
|
|
191
195
|
#
|
192
|
-
# Defines a short_option with the specified
|
196
|
+
# Defines a short_option with the specified _options_.
|
193
197
|
#
|
194
|
-
#
|
198
|
+
# _options_ must contain the following keys:
|
195
199
|
# <tt>:name</tt>:: The name of the option.
|
196
200
|
# <tt>:flag</tt>:: The flag to use for the option.
|
197
201
|
#
|
198
|
-
#
|
202
|
+
# _options_ may also contain the following keys:
|
199
203
|
# <tt>:multiply</tt>:: Specifies that the option may appear multiple
|
200
204
|
# times in the arguments.
|
201
205
|
# <tt>:sub_options</tt>:: Specifies that the option contains multiple
|
@@ -203,32 +207,32 @@ module RProgram
|
|
203
207
|
#
|
204
208
|
# short_option :flag => '-c', :name => :count
|
205
209
|
#
|
206
|
-
def self.short_option(
|
207
|
-
define_option(
|
210
|
+
def self.short_option(options,&block)
|
211
|
+
define_option(options,&block)
|
208
212
|
end
|
209
213
|
|
210
214
|
#
|
211
|
-
# Defines an option with the specified
|
215
|
+
# Defines an option with the specified _options_ and the given _block_.
|
212
216
|
#
|
213
|
-
#
|
217
|
+
# _options_ must contain the following keys:
|
214
218
|
# <tt>:name</tt>:: The name of the option.
|
215
219
|
# <tt>:flag</tt>:: The flag to use for the option.
|
216
220
|
#
|
217
|
-
#
|
221
|
+
# _options_ may also contain the following keys:
|
218
222
|
# <tt>:multiply</tt>:: Specifies that the option may appear multiple
|
219
223
|
# times in the arguments.
|
220
224
|
# <tt>:sub_options</tt>:: Specifies that the option contains multiple
|
221
225
|
# sub-options.
|
222
226
|
#
|
223
|
-
def self.define_option(
|
224
|
-
method_name =
|
227
|
+
def self.define_option(options,&block)
|
228
|
+
method_name = options[:name].to_sym
|
225
229
|
|
226
|
-
self.options[method_name] = Option.new(
|
230
|
+
self.options[method_name] = Option.new(options,&block)
|
227
231
|
|
228
232
|
class_def(method_name) do
|
229
|
-
if
|
233
|
+
if options[:sub_options]
|
230
234
|
@options[method_name] ||= OptionList.new
|
231
|
-
elsif
|
235
|
+
elsif options[:multiple]
|
232
236
|
@options[method_name] ||= []
|
233
237
|
else
|
234
238
|
@options[method_name]
|
@@ -236,7 +240,7 @@ module RProgram
|
|
236
240
|
end
|
237
241
|
|
238
242
|
class_def("#{method_name}=") do |value|
|
239
|
-
if
|
243
|
+
if options[:sub_options]
|
240
244
|
@options[method_name] = OptionList.new(value)
|
241
245
|
else
|
242
246
|
@options[method_name] = value
|
@@ -250,19 +254,19 @@ module RProgram
|
|
250
254
|
# Task.flag_namify('--output-file') # => "output_file"
|
251
255
|
#
|
252
256
|
def Task.flag_namify(flag)
|
253
|
-
flag = flag.to_s
|
257
|
+
flag = flag.to_s.downcase
|
254
258
|
|
255
259
|
# remove leading dashes
|
256
|
-
if flag
|
260
|
+
if flag[0..1] == '--'
|
257
261
|
method_name = flag[2..-1]
|
258
|
-
elsif flag
|
262
|
+
elsif flag[0..0] == '-'
|
259
263
|
method_name = flag[1..-1]
|
260
264
|
else
|
261
265
|
method_name = flag
|
262
266
|
end
|
263
267
|
|
264
268
|
# replace remaining dashes with underscores
|
265
|
-
return method_name.gsub(/[
|
269
|
+
return method_name.gsub(/[-_\.\s]+/,'_')
|
266
270
|
end
|
267
271
|
|
268
272
|
end
|
data/lib/rprogram/version.rb
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rprogram/task'
|
2
|
+
|
3
|
+
class LSTask < RProgram::Task
|
4
|
+
|
5
|
+
short_option :flag => '-a', :name => :all
|
6
|
+
long_option :flag => '--author'
|
7
|
+
long_option :flag => '--group-directories-first', :name => :group_dirs_first
|
8
|
+
long_option :flag => '--hide', :multiple => true
|
9
|
+
|
10
|
+
non_option :tailing => true, :multiple => true, :name => :files
|
11
|
+
|
12
|
+
end
|
data/spec/compat_spec.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rprogram/compat'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Compat do
|
6
|
+
it "should have a list of directories that contain programs" do
|
7
|
+
Compat.paths.should_not be_empty
|
8
|
+
|
9
|
+
Compat.paths.any? { |dir|
|
10
|
+
File.directory?(dir)
|
11
|
+
}.should == true
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should be able to find programs" do
|
15
|
+
File.executable?(Compat.find_program('dir')).should == true
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should be able to find programs by multiple names" do
|
19
|
+
File.executable?(Compat.find_program_by_names('ls','dir')).should == true
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'rprogram/nameable'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'classes/named_program'
|
5
|
+
require 'classes/aliased_program'
|
6
|
+
|
7
|
+
describe Nameable do
|
8
|
+
describe "named program" do
|
9
|
+
it "should be able to give a class a program name" do
|
10
|
+
NamedProgram.program_name.should == 'ls'
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should not have any program aliases" do
|
14
|
+
NamedProgram.program_aliases.should be_empty
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should have one program name" do
|
18
|
+
NamedProgram.program_names.should == ['ls']
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should provide an instance method for the program name" do
|
22
|
+
obj = NamedProgram.new
|
23
|
+
|
24
|
+
obj.program_name.should == 'ls'
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should provide an instance method for the program names" do
|
28
|
+
obj = NamedProgram.new
|
29
|
+
|
30
|
+
obj.program_names.should == ['ls']
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "aliased program" do
|
35
|
+
it "should have program aliases" do
|
36
|
+
AliasedProgram.program_aliases.should == ['dir']
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should have one program name" do
|
40
|
+
AliasedProgram.program_names.should == ['ls', 'dir']
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should provide an instance method for the program aliases" do
|
44
|
+
obj = AliasedProgram.new
|
45
|
+
|
46
|
+
obj.program_aliases.should == ['dir']
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should provide an instance method for the program names" do
|
50
|
+
obj = AliasedProgram.new
|
51
|
+
|
52
|
+
obj.program_names.should == ['ls', 'dir']
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'rprogram/non_option'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe NonOption do
|
6
|
+
before(:all) do
|
7
|
+
@non_option = NonOption.new(:name => 'files')
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should keep :leading and :tailing options mutually exclusive" do
|
11
|
+
leading = NonOption.new(:name => 'files', :leading => true)
|
12
|
+
tailing = NonOption.new(:name => 'files', :tailing => true)
|
13
|
+
|
14
|
+
leading.should be_leading
|
15
|
+
leading.should_not be_tailing
|
16
|
+
|
17
|
+
tailing.should_not be_leading
|
18
|
+
tailing.should be_tailing
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return an empty Array when passed nil" do
|
22
|
+
@non_option.arguments(nil).should == []
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should return an empty Array when passed false" do
|
26
|
+
@non_option.arguments(false).should == []
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return an empty Array when passed []" do
|
30
|
+
@non_option.arguments([]).should == []
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return an Array when passed a single value" do
|
34
|
+
@non_option.arguments('foo').should == ['foo']
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should return an Array when passed multiple values" do
|
38
|
+
@non_option.arguments(['foo', 'bar']).should == ['foo', 'bar']
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return an Array when passed a Hash of keys" do
|
42
|
+
@non_option.arguments({:foo => true, :bar => false}).should == ['foo']
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return an Array when passed a Hash of values" do
|
46
|
+
@non_option.arguments({:foo => 'bar'}).should == ['foo=bar']
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rprogram/option'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
shared_examples_for 'Option' do
|
6
|
+
it "should return an empty Array when passed nil" do
|
7
|
+
@option.arguments(nil).should == []
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should return an empty Array when passed false" do
|
11
|
+
@option.arguments(false).should == []
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return a single flag when passed true" do
|
15
|
+
@option.arguments(true).should == ['-f']
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rprogram/option_list'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe OptionList do
|
6
|
+
before(:each) do
|
7
|
+
@options = OptionList.new
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should behave like a Hash" do
|
11
|
+
@options[:bla] = 2
|
12
|
+
@options[:bla].should == 2
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should provide reader and writer methods" do
|
16
|
+
@options.bla = 5
|
17
|
+
@options.bla.should == 5
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should raise a NoMethodError exception when calling other methods" do
|
21
|
+
lambda {
|
22
|
+
@options.bla(5)
|
23
|
+
}.should raise_error(NoMethodError)
|
24
|
+
end
|
25
|
+
end
|
data/spec/option_spec.rb
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
require 'rprogram/option'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'option_examples'
|
5
|
+
|
6
|
+
describe Option do
|
7
|
+
describe "single flag" do
|
8
|
+
before(:all) do
|
9
|
+
@option = Option.new(:flag => '-f')
|
10
|
+
end
|
11
|
+
|
12
|
+
it_should_behave_like 'Option'
|
13
|
+
|
14
|
+
it "should render a single flag with an optional value" do
|
15
|
+
value = 'foo'
|
16
|
+
|
17
|
+
@option.arguments('foo').should == ['-f', 'foo']
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should render a single flag with multiple values" do
|
21
|
+
value = ['foo','bar','baz']
|
22
|
+
|
23
|
+
@option.arguments(value).should == ['-f','foo','bar','baz']
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should render a single flag with a Hash of keys" do
|
27
|
+
value = {:foo => true, :bar => false}
|
28
|
+
|
29
|
+
@option.arguments(value).should == ['-f','foo']
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should render a single flag with a Hash of keys and values" do
|
33
|
+
value = {:foo => 'bar'}
|
34
|
+
|
35
|
+
@option.arguments(value).should == ['-f','foo=bar']
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "equals flag" do
|
40
|
+
before(:all) do
|
41
|
+
@option = Option.new(:equals => true, :flag => '-f')
|
42
|
+
end
|
43
|
+
|
44
|
+
it_should_behave_like 'Option'
|
45
|
+
|
46
|
+
it "should render a single flag with a value" do
|
47
|
+
value = 'foo'
|
48
|
+
|
49
|
+
@option.arguments('foo').should == ['-f=foo']
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should render a single flag with multiple values" do
|
53
|
+
value = ['foo', 'bar', 'baz']
|
54
|
+
|
55
|
+
@option.arguments(value).should == ['-f=foo bar baz']
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should render a single flag with a Hash of keys" do
|
59
|
+
value = {:foo => true, :bar => false}
|
60
|
+
|
61
|
+
@option.arguments(value).should == ['-f=foo']
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "multiple flags" do
|
66
|
+
before(:all) do
|
67
|
+
@option = Option.new(:multiple => true, :flag => '-f')
|
68
|
+
end
|
69
|
+
|
70
|
+
it_should_behave_like 'Option'
|
71
|
+
|
72
|
+
it "should render a single flag with a value" do
|
73
|
+
value = 'foo'
|
74
|
+
|
75
|
+
@option.arguments(value).should == ['-f', 'foo']
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should render multiple flags for multiple values" do
|
79
|
+
value = ['foo','bar','baz']
|
80
|
+
|
81
|
+
@option.arguments(value).should == ['-f', 'foo', '-f', 'bar', '-f', 'baz']
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should render multiple flags for a Hash of keys" do
|
85
|
+
value = {:foo => true, :bar => true, :baz => false}
|
86
|
+
args = @option.arguments(value)
|
87
|
+
|
88
|
+
(args & ['-f', 'foo']).should == ['-f', 'foo']
|
89
|
+
(args & ['-f', 'bar']).should == ['-f', 'bar']
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should render multiple flags for a Hash of values" do
|
93
|
+
value = {:foo => 'bar'}
|
94
|
+
|
95
|
+
@option.arguments(value).should == ['-f', 'foo=bar']
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "multiple equals flags" do
|
100
|
+
before(:all) do
|
101
|
+
@option = Option.new(:multiple => true, :equals => true, :flag => '-f')
|
102
|
+
end
|
103
|
+
|
104
|
+
it_should_behave_like 'Option'
|
105
|
+
|
106
|
+
it "should render a single flag with a value" do
|
107
|
+
value = 'foo'
|
108
|
+
|
109
|
+
@option.arguments(value).should == ['-f=foo']
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should render multiple equal flags for multiple values" do
|
113
|
+
value = ['foo', 'bar']
|
114
|
+
|
115
|
+
@option.arguments(value).should == ['-f=foo', '-f=bar']
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should render multiple equal flags for a Hash of keys" do
|
119
|
+
value = {:foo => true, :bar => true, :baz => false}
|
120
|
+
args = @option.arguments(value)
|
121
|
+
|
122
|
+
args.include?('-f=foo').should == true
|
123
|
+
args.include?('-f=bar').should == true
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should render multiple equal flags for a Hash of values" do
|
127
|
+
value = {:foo => 'bar', :bar => 'baz'}
|
128
|
+
args = @option.arguments(value)
|
129
|
+
|
130
|
+
args.include?('-f=foo=bar').should == true
|
131
|
+
args.include?('-f=bar=baz').should == true
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
describe "separated values" do
|
136
|
+
before(:all) do
|
137
|
+
@option = Option.new(:separator => ',', :flag => '-f')
|
138
|
+
end
|
139
|
+
|
140
|
+
it_should_behave_like 'Option'
|
141
|
+
|
142
|
+
it "should render a single flag with a value" do
|
143
|
+
value = 'foo'
|
144
|
+
|
145
|
+
@option.arguments('foo').should == ['-f', 'foo']
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should render a single flag with multiple values" do
|
149
|
+
value = ['foo', 'bar', 'baz']
|
150
|
+
|
151
|
+
@option.arguments(value).should == ['-f', 'foo,bar,baz']
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should render a single flag with a Hash of keys" do
|
155
|
+
value = {:foo => true, :bar => true, :baz => false}
|
156
|
+
args = @option.arguments(value)
|
157
|
+
|
158
|
+
args[0].should == '-f'
|
159
|
+
|
160
|
+
sub_args = args[1].split(',')
|
161
|
+
|
162
|
+
sub_args.include?('foo').should == true
|
163
|
+
sub_args.include?('bar').should == true
|
164
|
+
end
|
165
|
+
|
166
|
+
it "should render a single flag with a Hash of values" do
|
167
|
+
value = {:foo => 'bar', :bar => 'baz'}
|
168
|
+
args = @option.arguments(value)
|
169
|
+
|
170
|
+
args[0].should == '-f'
|
171
|
+
|
172
|
+
sub_args = args[1].split(',')
|
173
|
+
|
174
|
+
sub_args.include?('foo=bar').should == true
|
175
|
+
sub_args.include?('bar=baz').should == true
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|