ns-options 0.4.1 → 1.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/Gemfile +2 -1
- data/LICENSE +1 -1
- data/README.md +187 -301
- data/Rakefile +1 -1
- data/lib/ns-options/assert_macros.rb +9 -12
- data/lib/ns-options/boolean.rb +2 -0
- data/lib/ns-options/namespace.rb +34 -134
- data/lib/ns-options/namespace_advisor.rb +35 -0
- data/lib/ns-options/namespace_data.rb +166 -0
- data/lib/ns-options/namespaces.rb +23 -12
- data/lib/ns-options/option.rb +50 -24
- data/lib/ns-options/options.rb +23 -49
- data/lib/ns-options/proxy.rb +40 -53
- data/lib/ns-options/proxy_method.rb +54 -0
- data/lib/ns-options/root_methods.rb +77 -0
- data/lib/ns-options/version.rb +1 -1
- data/lib/ns-options.rb +18 -8
- data/ns-options.gemspec +3 -4
- data/test/helper.rb +3 -10
- data/test/support/app.rb +3 -1
- data/test/support/proxy.rb +4 -0
- data/test/support/type_class_proxy.rb +29 -0
- data/test/support/user.rb +5 -5
- data/test/{integration/app_test.rb → system/app_tests.rb} +8 -6
- data/test/{integration/proxy_test.rb → system/proxy_tests.rb} +12 -0
- data/test/system/type_class_proxy_tests.rb +108 -0
- data/test/system/user_tests.rb +146 -0
- data/test/unit/{ns-options/boolean_test.rb → boolean_tests.rb} +5 -4
- data/test/unit/namespace_advisor_tests.rb +69 -0
- data/test/unit/namespace_data_tests.rb +336 -0
- data/test/unit/namespace_tests.rb +205 -0
- data/test/unit/namespaces_tests.rb +99 -0
- data/test/unit/{ns-options/option_test.rb → option_tests.rb} +155 -93
- data/test/unit/options_tests.rb +152 -0
- data/test/unit/proxy_method_tests.rb +87 -0
- data/test/unit/{ns-options/proxy_test.rb → proxy_tests.rb} +52 -0
- data/test/unit/root_methods_tests.rb +126 -0
- metadata +58 -63
- data/lib/ns-options/errors/invalid_name.rb +0 -15
- data/lib/ns-options/has_options.rb +0 -53
- data/lib/ns-options/helper/advisor.rb +0 -88
- data/lib/ns-options/helper.rb +0 -87
- data/test/integration/user_test.rb +0 -94
- data/test/unit/ns-options/has_options_test.rb +0 -90
- data/test/unit/ns-options/helper/advisor_test.rb +0 -148
- data/test/unit/ns-options/helper_test.rb +0 -56
- data/test/unit/ns-options/namespace_test.rb +0 -432
- data/test/unit/ns-options/namespaces_test.rb +0 -55
- data/test/unit/ns-options/options_test.rb +0 -221
- /data/test/unit/{ns-options/assert_macros_test.rb → assert_macros_tests.rb} +0 -0
@@ -1,432 +0,0 @@
|
|
1
|
-
require 'assert'
|
2
|
-
|
3
|
-
class NsOptions::Namespace
|
4
|
-
|
5
|
-
class BaseTest < Assert::Context
|
6
|
-
desc "NsOptions::Namespace"
|
7
|
-
setup do
|
8
|
-
@key = "something"
|
9
|
-
@namespace = NsOptions::Namespace.new(@key)
|
10
|
-
end
|
11
|
-
subject{ @namespace }
|
12
|
-
|
13
|
-
should have_accessors :metaclass, :options
|
14
|
-
should have_instance_methods :option, :opt
|
15
|
-
should have_instance_methods :namespace, :ns
|
16
|
-
should have_instance_methods :required_set?, :valid?
|
17
|
-
should have_instance_methods :define, :apply
|
18
|
-
should have_instance_methods :to_hash, :each
|
19
|
-
|
20
|
-
should "have set it's metaclass accessor" do
|
21
|
-
assert subject.metaclass
|
22
|
-
end
|
23
|
-
|
24
|
-
should "have created a new options collection and set it's options accessor" do
|
25
|
-
assert subject.options
|
26
|
-
assert_kind_of NsOptions::Options, subject.options
|
27
|
-
assert_equal @key, subject.options.key
|
28
|
-
assert_nil subject.options.parent
|
29
|
-
end
|
30
|
-
|
31
|
-
should "contain its options key in its inspect output" do
|
32
|
-
assert_included ":#{subject.options.key}", subject.inspect
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
class OptionTest < BaseTest
|
38
|
-
desc "option method"
|
39
|
-
setup do
|
40
|
-
@name = :something
|
41
|
-
@type = String
|
42
|
-
@rules = { :default => true }
|
43
|
-
@namespace.option(@name, @type, @rules)
|
44
|
-
end
|
45
|
-
teardown do
|
46
|
-
NsOptions::Helper.unstub(:advisor)
|
47
|
-
end
|
48
|
-
subject{ @namespace }
|
49
|
-
|
50
|
-
should "have added the option to the namespace's options collection" do
|
51
|
-
assert(option = subject.options[@name])
|
52
|
-
assert_equal @name.to_s, option.name
|
53
|
-
assert_equal @type, option.type_class
|
54
|
-
assert_equal @rules, option.rules
|
55
|
-
end
|
56
|
-
|
57
|
-
should "check if the option name is ok" do
|
58
|
-
advisor = NsOptions::Helper::Advisor.new(@namespace)
|
59
|
-
NsOptions::Helper.expects(:advisor).with(@namespace).returns(advisor)
|
60
|
-
advisor.expects(:is_this_option_ok?)
|
61
|
-
assert_nothing_raised do
|
62
|
-
@namespace.option(:amazing)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
class OptionWithNoTypeTest < BaseTest
|
68
|
-
desc "option method with no type specified"
|
69
|
-
setup do
|
70
|
-
@name = :something
|
71
|
-
@namespace.option(@name)
|
72
|
-
end
|
73
|
-
subject{ @namespace }
|
74
|
-
|
75
|
-
should "default the type to Object" do
|
76
|
-
assert(option = subject.options[@name])
|
77
|
-
assert_equal Object, option.type_class
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
class OptionMethodsTest < OptionTest
|
83
|
-
desc "defined methods"
|
84
|
-
|
85
|
-
should have_instance_methods :something, :something=
|
86
|
-
|
87
|
-
should "be writable through the defined writer" do
|
88
|
-
assert_nothing_raised{ subject.something = "abc" }
|
89
|
-
assert_equal "abc", subject.something
|
90
|
-
end
|
91
|
-
|
92
|
-
should "be writable through the reader with args" do
|
93
|
-
assert_nothing_raised{ subject.something "123" }
|
94
|
-
assert_equal "123", subject.something
|
95
|
-
end
|
96
|
-
|
97
|
-
end
|
98
|
-
|
99
|
-
class NamespaceTest < BaseTest
|
100
|
-
desc "namespace method"
|
101
|
-
setup do
|
102
|
-
@namespace.namespace(:something) do
|
103
|
-
option :something_else
|
104
|
-
end
|
105
|
-
@namespace.namespace(:another, "special_key")
|
106
|
-
end
|
107
|
-
teardown do
|
108
|
-
NsOptions::Helper.unstub(:advisor)
|
109
|
-
end
|
110
|
-
subject{ @namespace }
|
111
|
-
|
112
|
-
should "have added a namespace to the namespace's options collection" do
|
113
|
-
assert(namespace = subject.options.namespaces[:something])
|
114
|
-
assert_equal "#{subject.options.key}:something", namespace.options.key
|
115
|
-
assert_equal subject, namespace.options.parent
|
116
|
-
assert namespace.options[:something_else]
|
117
|
-
end
|
118
|
-
|
119
|
-
should "allow passing a special key to the namespace" do
|
120
|
-
assert(namespace = subject.options.namespaces[:another])
|
121
|
-
assert_equal "#{subject.options.key}:special_key", namespace.options.key
|
122
|
-
end
|
123
|
-
|
124
|
-
should "check if the namespace name is ok" do
|
125
|
-
advisor = NsOptions::Helper::Advisor.new(@namespace)
|
126
|
-
NsOptions::Helper.expects(:advisor).with(@namespace).returns(advisor)
|
127
|
-
advisor.expects(:is_this_sub_namespace_ok?)
|
128
|
-
assert_nothing_raised do
|
129
|
-
@namespace.namespace(:yet_another)
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
end
|
134
|
-
|
135
|
-
class NamespaceMethodsTest < NamespaceTest
|
136
|
-
desc "defined methods"
|
137
|
-
|
138
|
-
should have_instance_methods :something
|
139
|
-
|
140
|
-
should "be return the namespace using the reader" do
|
141
|
-
assert_equal subject.options.namespaces[:something], subject.something
|
142
|
-
end
|
143
|
-
|
144
|
-
should "define the namespace with the reader and a block" do
|
145
|
-
subject.something do
|
146
|
-
option :another
|
147
|
-
end
|
148
|
-
assert subject.something.options[:another]
|
149
|
-
end
|
150
|
-
|
151
|
-
end
|
152
|
-
|
153
|
-
class DefineTest < BaseTest
|
154
|
-
desc "define method"
|
155
|
-
|
156
|
-
class BlockWithoutArityTest < BaseTest
|
157
|
-
desc "with a block with no arity"
|
158
|
-
|
159
|
-
should "instance eval the block in the scope of the namespace" do
|
160
|
-
scope = nil
|
161
|
-
subject.define do
|
162
|
-
scope = self
|
163
|
-
end
|
164
|
-
assert_equal subject, scope
|
165
|
-
end
|
166
|
-
end
|
167
|
-
class BlockWithArityTest < BaseTest
|
168
|
-
desc "with a block with arity"
|
169
|
-
|
170
|
-
should "yield the namespace to the block" do
|
171
|
-
yielded = nil
|
172
|
-
subject.define do |namespace|
|
173
|
-
yielded = namespace
|
174
|
-
end
|
175
|
-
assert_equal subject, yielded
|
176
|
-
end
|
177
|
-
end
|
178
|
-
class NoBlockTest < BaseTest
|
179
|
-
desc "with no block"
|
180
|
-
|
181
|
-
should "return the namespace" do
|
182
|
-
assert_equal subject, subject.define
|
183
|
-
end
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
class MethodMissingTest < BaseTest
|
188
|
-
desc "method missing"
|
189
|
-
setup do
|
190
|
-
@namespace = NsOptions::Namespace.new("strange")
|
191
|
-
@namespace.options.add(:something)
|
192
|
-
@namespace.options.set(:something, "amazing")
|
193
|
-
end
|
194
|
-
|
195
|
-
class ReaderForAKnownOptionTest < MethodMissingTest
|
196
|
-
desc "as a reader for a known option"
|
197
|
-
setup do
|
198
|
-
@result = @namespace.something
|
199
|
-
end
|
200
|
-
|
201
|
-
should "have defined the option on the namespace" do
|
202
|
-
defined_methods = subject.metaclass.public_instance_methods(false).map(&:to_sym)
|
203
|
-
assert_includes :something, defined_methods
|
204
|
-
assert_includes :something=, defined_methods
|
205
|
-
assert_equal "amazing", @result
|
206
|
-
end
|
207
|
-
end
|
208
|
-
class WriterForAKnownOptionTest < MethodMissingTest
|
209
|
-
desc "as a reader for a known option"
|
210
|
-
setup do
|
211
|
-
@namespace.something = "even more amazing"
|
212
|
-
end
|
213
|
-
|
214
|
-
should "have defined the option on the namespace" do
|
215
|
-
defined_methods = subject.metaclass.public_instance_methods(false).map(&:to_sym)
|
216
|
-
assert_includes :something, defined_methods
|
217
|
-
assert_includes :something=, defined_methods
|
218
|
-
assert_equal "even more amazing", subject.something
|
219
|
-
end
|
220
|
-
end
|
221
|
-
class DynamicWriterTest < MethodMissingTest
|
222
|
-
desc "with a writer for an unknown option"
|
223
|
-
setup do
|
224
|
-
@namespace.something_not_defined = "you know it"
|
225
|
-
@namespace.another_not_defined = true
|
226
|
-
@namespace.even_more_not_defined = 12
|
227
|
-
@namespace.just_one_more_not_defined = nil
|
228
|
-
@namespace.proc_opt_not_defined = Proc.new { "imma proc!" }
|
229
|
-
end
|
230
|
-
|
231
|
-
should "have defined the accessors and added the option" do
|
232
|
-
defined_methods = subject.metaclass.public_instance_methods(false).map(&:to_sym)
|
233
|
-
assert subject.options[:something_not_defined]
|
234
|
-
assert_includes :something_not_defined, defined_methods
|
235
|
-
assert_includes :something_not_defined=, defined_methods
|
236
|
-
assert_equal "you know it", subject.something_not_defined
|
237
|
-
end
|
238
|
-
|
239
|
-
should "use Object for the option's type class, no matter what the value is" do
|
240
|
-
assert_equal Object, subject.options[:something_not_defined].type_class
|
241
|
-
assert_equal Object, subject.options[:another_not_defined].type_class
|
242
|
-
assert_equal Object, subject.options[:even_more_not_defined].type_class
|
243
|
-
assert_equal Object, subject.options[:just_one_more_not_defined].type_class
|
244
|
-
assert_equal Object, subject.options[:proc_opt_not_defined].type_class
|
245
|
-
end
|
246
|
-
|
247
|
-
should "return the Proc return val when an unknow option is set to a Proc" do
|
248
|
-
assert_not_kind_of Proc, subject.options[:proc_opt_not_defined].type_class
|
249
|
-
assert_equal "imma proc!", subject.proc_opt_not_defined
|
250
|
-
end
|
251
|
-
|
252
|
-
end
|
253
|
-
end
|
254
|
-
|
255
|
-
class RespondToTest < BaseTest
|
256
|
-
desc "respond to"
|
257
|
-
setup do
|
258
|
-
@namespace.options.add(:something)
|
259
|
-
end
|
260
|
-
|
261
|
-
should "return true when the reader of an option is requested without the reader defined" do
|
262
|
-
assert_not_includes :something, subject.class.public_instance_methods(false).map(&:to_sym)
|
263
|
-
assert_not_includes :something, subject.metaclass.public_instance_methods(false).map(&:to_sym)
|
264
|
-
assert_equal true, subject.respond_to?(:something)
|
265
|
-
end
|
266
|
-
end
|
267
|
-
|
268
|
-
class WithAParentTest < BaseTest
|
269
|
-
desc "with a parent"
|
270
|
-
setup do
|
271
|
-
@key = "options"
|
272
|
-
@parent = @namespace
|
273
|
-
@namespace = NsOptions::Namespace.new(@key, @parent)
|
274
|
-
end
|
275
|
-
subject{ @namespace }
|
276
|
-
|
277
|
-
should "have set it's options accessor and stored it's parent on it" do
|
278
|
-
assert subject.options
|
279
|
-
assert_equal @parent, subject.options.parent
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
class HandlingTests < BaseTest
|
286
|
-
setup do
|
287
|
-
@namespace.define do
|
288
|
-
option :first
|
289
|
-
option :second
|
290
|
-
option :third
|
291
|
-
namespace(:child_a) do
|
292
|
-
option(:fourth)
|
293
|
-
option(:fifth)
|
294
|
-
namespace(:child_b) do
|
295
|
-
option(:sixth)
|
296
|
-
end
|
297
|
-
end
|
298
|
-
end
|
299
|
-
|
300
|
-
@named_values = {
|
301
|
-
:first => "1", :second => "2", :third => "3", :twenty_one => "21",
|
302
|
-
:child_a => {
|
303
|
-
:fourth => "4", :fifth => "5",
|
304
|
-
:child_b => { :sixth => "6" }
|
305
|
-
},
|
306
|
-
:child_c => { :what => "?" }
|
307
|
-
}
|
308
|
-
end
|
309
|
-
|
310
|
-
end
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
class ApplyTest < HandlingTests
|
315
|
-
desc "apply method"
|
316
|
-
setup do
|
317
|
-
@namespace.apply(@named_values)
|
318
|
-
end
|
319
|
-
|
320
|
-
should "have mass set all the defined options" do
|
321
|
-
assert_equal @named_values[:first], subject.first
|
322
|
-
assert_equal @named_values[:second], subject.second
|
323
|
-
assert_equal @named_values[:third], subject.third
|
324
|
-
assert_equal @named_values[:child_a][:fourth], subject.child_a.fourth
|
325
|
-
assert_equal @named_values[:child_a][:fifth], subject.child_a.fifth
|
326
|
-
assert_equal @named_values[:child_a][:child_b][:sixth], subject.child_a.child_b.sixth
|
327
|
-
end
|
328
|
-
should "have dynamically added options for the undefined keys" do
|
329
|
-
assert_equal @named_values[:twenty_one], subject.twenty_one
|
330
|
-
assert_equal @named_values[:child_c], subject.child_c
|
331
|
-
end
|
332
|
-
|
333
|
-
end
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
class ToHashTests < HandlingTests
|
338
|
-
desc "when to_hash"
|
339
|
-
subject { @namespace.to_hash }
|
340
|
-
|
341
|
-
should "return a Hash representation for the namespace" do
|
342
|
-
assert_equal({
|
343
|
-
:first => nil,
|
344
|
-
:second => nil,
|
345
|
-
:third => nil,
|
346
|
-
:child_a => {
|
347
|
-
:fourth => nil,
|
348
|
-
:fifth => nil,
|
349
|
-
:child_b => {
|
350
|
-
:sixth => nil
|
351
|
-
}
|
352
|
-
}
|
353
|
-
}, subject)
|
354
|
-
|
355
|
-
@namespace.first = "first"
|
356
|
-
assert_equal({
|
357
|
-
:first => "first",
|
358
|
-
:second => nil,
|
359
|
-
:third => nil,
|
360
|
-
:child_a => {
|
361
|
-
:fourth => nil,
|
362
|
-
:fifth => nil,
|
363
|
-
:child_b => {
|
364
|
-
:sixth => nil
|
365
|
-
}
|
366
|
-
}
|
367
|
-
}, subject)
|
368
|
-
|
369
|
-
@namespace.apply(@named_values)
|
370
|
-
assert_equal @named_values, subject
|
371
|
-
end
|
372
|
-
|
373
|
-
should "contain its to_hash representation in its inspect output" do
|
374
|
-
assert_included subject.inspect, @namespace.inspect
|
375
|
-
end
|
376
|
-
|
377
|
-
end
|
378
|
-
|
379
|
-
|
380
|
-
class EachTests < HandlingTests
|
381
|
-
desc "iterated with the each method"
|
382
|
-
setup do
|
383
|
-
@namespace.apply(@named_values)
|
384
|
-
@exp = "".tap do |exp|
|
385
|
-
@namespace.to_hash.each do |k,v|
|
386
|
-
exp << "#{k}=#{v};"
|
387
|
-
end
|
388
|
-
end
|
389
|
-
@act = "".tap do |exp|
|
390
|
-
@namespace.each do |k,v|
|
391
|
-
exp << "#{k}=#{v};"
|
392
|
-
end
|
393
|
-
end
|
394
|
-
end
|
395
|
-
|
396
|
-
should "yield k/v pairs by iterating over the #to_hash" do
|
397
|
-
assert_equal @exp, @act
|
398
|
-
end
|
399
|
-
|
400
|
-
end
|
401
|
-
|
402
|
-
|
403
|
-
class EqualityTests < HandlingTests
|
404
|
-
desc "when compared for equality"
|
405
|
-
setup do
|
406
|
-
@namespace.apply(@named_values)
|
407
|
-
end
|
408
|
-
|
409
|
-
should "be equal to another namespace with the same named values" do
|
410
|
-
other_ns = NsOptions::Namespace.new('other_something')
|
411
|
-
other_ns.apply(@named_values)
|
412
|
-
|
413
|
-
assert_equal other_ns, @namespace
|
414
|
-
end
|
415
|
-
|
416
|
-
should "not be equal to another namespace with different values" do
|
417
|
-
other_ns = NsOptions::Namespace.new('other_something')
|
418
|
-
other_ns.apply({:other => 'data'})
|
419
|
-
|
420
|
-
assert_not_equal other_ns, @namespace
|
421
|
-
end
|
422
|
-
|
423
|
-
should "not be equal to other things" do
|
424
|
-
assert_not_equal 1, @namespace
|
425
|
-
assert_not_equal @named_value, @namespace
|
426
|
-
end
|
427
|
-
|
428
|
-
end
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'assert'
|
2
|
-
|
3
|
-
class NsOptions::Namespaces
|
4
|
-
|
5
|
-
class BaseTest < Assert::Context
|
6
|
-
desc "NsOptions::Namespaces"
|
7
|
-
setup do
|
8
|
-
@namespaces = NsOptions::Namespaces.new
|
9
|
-
end
|
10
|
-
subject{ @namespaces }
|
11
|
-
|
12
|
-
should have_instance_methods :add, :get
|
13
|
-
|
14
|
-
should "be a kind of a hash" do
|
15
|
-
assert_kind_of Hash, subject
|
16
|
-
end
|
17
|
-
should "only use symbols for keys" do
|
18
|
-
subject["string_key"] = true
|
19
|
-
subject[:symbol_key] = true
|
20
|
-
|
21
|
-
assert_includes :string_key, subject.keys
|
22
|
-
assert_includes :symbol_key, subject.keys
|
23
|
-
assert_not_includes "string_key", subject.keys
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class AddTest < BaseTest
|
28
|
-
desc "add method"
|
29
|
-
setup do
|
30
|
-
@parent = NsOptions::Namespace.new(:parent)
|
31
|
-
@namespaces.add(:a_name, "a-key", @parent) do
|
32
|
-
option :an_option
|
33
|
-
end
|
34
|
-
end
|
35
|
-
subject{ @namespaces }
|
36
|
-
|
37
|
-
should "have created a new namespace and added it to itself" do
|
38
|
-
assert(namespace = subject[:a_name])
|
39
|
-
assert_kind_of NsOptions::Namespace, namespace
|
40
|
-
assert_equal "a-key", namespace.options.key
|
41
|
-
assert_equal @parent, namespace.options.parent
|
42
|
-
assert namespace.options[:an_option]
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
class GetTest < AddTest
|
47
|
-
desc "get method"
|
48
|
-
|
49
|
-
should "return the namespace matching the name" do
|
50
|
-
assert(namespace = subject.get("a_name"))
|
51
|
-
assert_equal subject[:a_name], namespace
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
@@ -1,221 +0,0 @@
|
|
1
|
-
require 'assert'
|
2
|
-
|
3
|
-
class NsOptions::Options
|
4
|
-
|
5
|
-
class BaseTest < Assert::Context
|
6
|
-
desc "NsOptions::Options"
|
7
|
-
setup do
|
8
|
-
@options = NsOptions::Options.new(:something)
|
9
|
-
end
|
10
|
-
subject{ @options }
|
11
|
-
|
12
|
-
should have_accessors :key, :parent, :namespaces
|
13
|
-
should have_instance_method :add, :del, :remove, :get, :set, :fetch, :is_defined?,
|
14
|
-
:add_namespace, :get_namespace, :build_from
|
15
|
-
|
16
|
-
should "be a kind of Hash" do
|
17
|
-
assert_kind_of Hash, subject
|
18
|
-
end
|
19
|
-
should "only use symbols for keys" do
|
20
|
-
subject["string_key"] = true
|
21
|
-
subject[:symbol_key] = true
|
22
|
-
|
23
|
-
assert_includes :string_key, subject.keys
|
24
|
-
assert_includes :symbol_key, subject.keys
|
25
|
-
assert_not_includes "string_key", subject.keys
|
26
|
-
end
|
27
|
-
should "have set the key" do
|
28
|
-
assert_equal "something", subject.key
|
29
|
-
end
|
30
|
-
should "have set the parent to nil" do
|
31
|
-
assert_nil subject.parent
|
32
|
-
end
|
33
|
-
should "return a kind of NsOption::Namespaces with a call to #children" do
|
34
|
-
assert_kind_of NsOptions::Namespaces, subject.namespaces
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
class AddTest < BaseTest
|
39
|
-
desc "add method"
|
40
|
-
setup do
|
41
|
-
@options.add(:my_string)
|
42
|
-
@options.add(:my_integer, Integer)
|
43
|
-
@options.add(:my_float, Float, { :default => 1.0 })
|
44
|
-
end
|
45
|
-
subject{ @options }
|
46
|
-
|
47
|
-
should "have added a object option on itself when adding :my_string" do
|
48
|
-
assert(option = subject[:my_string])
|
49
|
-
assert_equal Object, option.type_class
|
50
|
-
assert_equal({ :args => [] }, option.rules)
|
51
|
-
end
|
52
|
-
should "have added an integer option on itself when adding :my_integer" do
|
53
|
-
assert(option = subject[:my_integer])
|
54
|
-
assert_equal Integer, option.type_class
|
55
|
-
assert_equal({ :args => [] }, option.rules)
|
56
|
-
end
|
57
|
-
should "have added a float option on itself when adding :my_float" do
|
58
|
-
assert(option = subject[:my_float])
|
59
|
-
assert_equal Float, option.type_class
|
60
|
-
assert_equal(1.0, option.rules[:default])
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
class DelTest < BaseTest
|
65
|
-
desc "add method"
|
66
|
-
setup do
|
67
|
-
@options.add(:my_string)
|
68
|
-
@options.del(:my_string)
|
69
|
-
end
|
70
|
-
subject{ @options }
|
71
|
-
|
72
|
-
should "remove the option definition from the collection" do
|
73
|
-
assert_nil subject[:my_string]
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
class GetTest < BaseTest
|
78
|
-
desc "get method"
|
79
|
-
setup do
|
80
|
-
option = @options.add(:my_string)
|
81
|
-
option.value = @value = "something"
|
82
|
-
@result = @options.get(:my_string)
|
83
|
-
end
|
84
|
-
subject{ @result }
|
85
|
-
|
86
|
-
should "have returned the option's value" do
|
87
|
-
assert_equal @value, subject
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
class SetTest < BaseTest
|
92
|
-
desc "set method"
|
93
|
-
setup do
|
94
|
-
option = @options.add(:my_string)
|
95
|
-
@options.set(:my_string, "something")
|
96
|
-
end
|
97
|
-
subject{ @options }
|
98
|
-
|
99
|
-
should "have set the option's value" do
|
100
|
-
assert_equal "something", subject.get(:my_string)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
class IsDefinedTest < BaseTest
|
105
|
-
desc "fetch method"
|
106
|
-
setup do
|
107
|
-
option = @options.add(:my_string)
|
108
|
-
end
|
109
|
-
subject{ @options }
|
110
|
-
|
111
|
-
should "return true for a defined option" do
|
112
|
-
assert_equal true, subject.is_defined?(:my_string)
|
113
|
-
end
|
114
|
-
should "return false for an undefined option" do
|
115
|
-
assert_equal false, subject.is_defined?(:undefined)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
class RequiredSetTest < BaseTest
|
120
|
-
desc "required_set? method"
|
121
|
-
setup do
|
122
|
-
@options.add(:first, String, { :require => true })
|
123
|
-
@options.add(:second, String, { :required => true })
|
124
|
-
@options.add(:third, String)
|
125
|
-
end
|
126
|
-
|
127
|
-
should "return true when all required options are set" do
|
128
|
-
@options.set(:first, "first")
|
129
|
-
@options.set(:second, "second")
|
130
|
-
assert_equal true, subject.required_set?
|
131
|
-
end
|
132
|
-
should "return false if one required option is not set" do
|
133
|
-
@options.set(:first, "first")
|
134
|
-
@options.set(:third, "third")
|
135
|
-
assert_equal false, subject.required_set?
|
136
|
-
end
|
137
|
-
should "not change because of options that aren't required" do
|
138
|
-
@options.set(:first, "first")
|
139
|
-
@options.set(:second, "second")
|
140
|
-
@options.set(:third, "third")
|
141
|
-
assert_equal true, subject.required_set?
|
142
|
-
@options.set(:third, nil)
|
143
|
-
assert_equal true, subject.required_set?
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
class WithNamespaceTest < BaseTest
|
148
|
-
setup do
|
149
|
-
@namespace = @options.add_namespace(:something, :something)
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
class AddNamespaceTest < WithNamespaceTest
|
154
|
-
desc "add_namespace method"
|
155
|
-
subject{ @options }
|
156
|
-
|
157
|
-
should "create a new namespace and add it to the options namespaces collection" do
|
158
|
-
assert_instance_of NsOptions::Namespace, @namespace
|
159
|
-
assert_equal @namespace, subject.namespaces[:something]
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
class GetNamespaceTest < WithNamespaceTest
|
164
|
-
desc "get_namespace method"
|
165
|
-
setup do
|
166
|
-
@got_namespace = @options.get_namespace(:something)
|
167
|
-
end
|
168
|
-
subject{ @got_namespace }
|
169
|
-
|
170
|
-
should "allow retrieving a namespace without having to access the namespaces directly" do
|
171
|
-
assert_equal @namespace, subject
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
class IsNamespaceDefinedTest < WithNamespaceTest
|
176
|
-
desc "is_namespace_defined? method"
|
177
|
-
setup do
|
178
|
-
@has_something = @options.is_namespace_defined?(:something)
|
179
|
-
@has_nothing = @options.is_namespace_defined?(:nothing)
|
180
|
-
end
|
181
|
-
|
182
|
-
should "return a boolean of whether or not the namespace is defined" do
|
183
|
-
assert_equal true, @has_something
|
184
|
-
assert_equal false, @has_nothing
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
class BuildFromTest < BaseTest
|
189
|
-
desc "build_from method"
|
190
|
-
setup do
|
191
|
-
@namespace = NsOptions::Namespace.new("something")
|
192
|
-
@from = NsOptions::Options.new(:something)
|
193
|
-
@from.add(:root)
|
194
|
-
@from.add_namespace(:else) do
|
195
|
-
option :stage
|
196
|
-
end
|
197
|
-
@options = @namespace.options
|
198
|
-
@options.build_from(@from, @namespace)
|
199
|
-
end
|
200
|
-
subject{ @options }
|
201
|
-
|
202
|
-
should "have copied the options" do
|
203
|
-
@from.each do |key, from_option|
|
204
|
-
option = subject[key]
|
205
|
-
assert_equal from_option.name, option.name
|
206
|
-
assert_equal from_option.type_class, option.type_class
|
207
|
-
assert_equal from_option.rules, option.rules
|
208
|
-
assert_not_same from_option, option
|
209
|
-
end
|
210
|
-
end
|
211
|
-
should "have copied the namespaces" do
|
212
|
-
@from.namespaces.each do |name, from_namespace|
|
213
|
-
namespace = subject.get_namespace(name)
|
214
|
-
assert_equal from_namespace.options.key, namespace.options.key
|
215
|
-
assert_equal from_namespace.options.parent, namespace.options.parent
|
216
|
-
assert_not_same from_namespace, namespace
|
217
|
-
end
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
end
|
File without changes
|