methodic 1.2 → 1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/ChangeLog +3 -1
- data/Gemfile +0 -1
- data/{doc/manual.rdoc → README.md} +26 -16
- data/Rakefile +13 -7
- data/lib/methodic.rb +60 -48
- data/methodic.gemspec +15 -10
- data/spec/methodic_spec.rb +138 -197
- data/spec/spec_helper.rb +0 -1
- metadata +138 -77
- data/Gemfile.lock +0 -37
- data/INSTALL +0 -7
data/methodic.gemspec
CHANGED
@@ -1,18 +1,23 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{methodic}
|
3
3
|
s.author = "Romain GEORGES"
|
4
|
-
s.version = "1.
|
4
|
+
s.version = "1.3"
|
5
5
|
s.date = %q{2013-02-18}
|
6
6
|
s.summary = %q{Methodic : Hash table options specification and validation componant}
|
7
7
|
s.email = %q{romain@ultragreen.net}
|
8
|
-
s.homepage = %q{
|
8
|
+
s.homepage = %q{https://github.com/Ultragreen/methodic}
|
9
9
|
s.description = %q{Methodic : provide Hash table options arguments manager (specifications and validations}
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.
|
13
|
-
s.
|
14
|
-
s.add_development_dependency
|
15
|
-
s.
|
10
|
+
s.files = `git ls-files`.split($/)
|
11
|
+
s.require_paths = ["lib"]
|
12
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
13
|
+
s.add_development_dependency 'rake', '~> 13.0.1'
|
14
|
+
s.add_development_dependency 'rspec', '~> 3.9.0'
|
15
|
+
s.add_development_dependency 'yard', '~> 0.9.24'
|
16
|
+
s.add_development_dependency 'rdoc', '~> 6.2.1'
|
17
|
+
s.add_development_dependency 'roodi', '~> 5.0.0'
|
18
|
+
s.add_development_dependency 'code_statistics', '~> 0.2.13'
|
19
|
+
s.add_development_dependency 'yard-rspec', '~> 0.1'
|
20
|
+
s.rdoc_options << '--title' << 'Methodic : Gem documentation' << '--main' << 'doc/manual.rdoc' << '--line-numbers'
|
16
21
|
# << '--diagram'
|
17
|
-
s.
|
18
|
-
end
|
22
|
+
s.license = "BSD-2-Clause"
|
23
|
+
end
|
data/spec/methodic_spec.rb
CHANGED
@@ -1,203 +1,205 @@
|
|
1
1
|
require'rubygems'
|
2
2
|
require'rspec'
|
3
|
-
require '
|
3
|
+
require 'methodic'
|
4
4
|
|
5
5
|
describe Methodic do
|
6
|
-
|
6
|
+
|
7
7
|
before :all do
|
8
8
|
$test_methodic_options = Methodic::get_options :name => 'Doe', :surname => 'John'
|
9
9
|
$test_methodic_options_with_known_options = Methodic::get_options({:name => 'Doe', :surname => 'John'},true)
|
10
10
|
end
|
11
|
-
before :each do
|
11
|
+
before :each do
|
12
12
|
$test_methodic_options.mandatories.clear
|
13
13
|
$test_methodic_options.formats = {}
|
14
14
|
$test_methodic_options.defaults = {}
|
15
15
|
$test_methodic_options.classes = {}
|
16
16
|
end
|
17
17
|
subject { Methodic }
|
18
|
-
specify { subject.
|
19
|
-
context Methodic::Options do
|
18
|
+
specify { expect(subject).to be_an_instance_of Module}
|
19
|
+
context Methodic::Options do
|
20
20
|
subject { Methodic::Options }
|
21
|
-
specify { subject.
|
21
|
+
specify { expect(subject).to be_an_instance_of Class }
|
22
22
|
it "should respond to all methods of a Hash" do
|
23
23
|
Hash::new.methods.each do |method|
|
24
|
-
$test_methodic_options.
|
24
|
+
expect($test_methodic_options).to respond_to(method)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
context "#new(_options) (initialization)" do
|
28
28
|
context "Exception case" do
|
29
29
|
it "should raise ArgumentError if _options is not a Hash" do
|
30
30
|
[ 'a string', 12 ,Array::new,true,false].each do |item|
|
31
|
-
|
31
|
+
expect { Methodic::Options::new(item) }.to raise_error(ArgumentError)
|
32
|
+
|
32
33
|
end
|
33
34
|
end
|
34
|
-
it "should not raise ArgumentError if no arg is passed to initializer" do
|
35
|
-
lambda{ Methodic::Options::new}.should_not raise_error
|
36
|
-
end
|
37
|
-
it "should not raise ArgumentError if an Hash arg is passed to initializer" do
|
38
|
-
lambda{ Methodic::Options::new :name => 'Doe' }.should_not raise_error
|
39
|
-
end
|
40
35
|
it "should raise ArgumentError if an Hash arg is passed to initializer but with keys different of Symbol" do
|
41
|
-
|
36
|
+
expect { Methodic::Options::new({'titi' => 'tutu'}) }.to raise_error(ArgumentError)
|
42
37
|
end
|
43
|
-
it "should not raise ArgumentError if two arg is passed to initializer, second arg has a boolean value, must be object" do
|
44
|
-
lambda{ Methodic::Options::new({:name => 'Doe'},true) }.should_not raise_error ArgumentError
|
45
|
-
end
|
46
|
-
|
47
38
|
it "should raise ArgumentError if more than two arg is passed to initializer" do
|
48
|
-
|
39
|
+
expect { Methodic::Options::new({:name => 'Doe'},{:surname => 'John'},true) }.to raise_error(ArgumentError)
|
49
40
|
end
|
50
|
-
|
41
|
+
|
51
42
|
end
|
52
43
|
|
53
44
|
end
|
54
45
|
context "Instance Attributs" do
|
55
46
|
context "#classes R/W" do
|
56
|
-
|
57
|
-
|
47
|
+
specify { expect($test_methodic_options).to respond_to("classes") }
|
48
|
+
specify { expect($test_methodic_options).to respond_to("classes=") }
|
58
49
|
|
59
|
-
it "should be true that #classes must return a Hash" do
|
60
|
-
$test_methodic_options.classes.class.
|
50
|
+
it "should be true that #classes must return a Hash" do
|
51
|
+
expect($test_methodic_options.classes.class).to eq(Hash)
|
61
52
|
end
|
62
53
|
it "#classes[] affectation must be possible and #classes must respond this affectation" do
|
63
54
|
$test_methodic_options.classes[:test] = String
|
64
|
-
$test_methodic_options.classes.
|
55
|
+
expect($test_methodic_options.classes).to eq({:test => String})
|
65
56
|
end
|
66
|
-
|
57
|
+
|
67
58
|
end
|
68
59
|
context "#defaults R/W" do
|
69
|
-
|
70
|
-
|
71
|
-
|
60
|
+
|
61
|
+
specify { expect($test_methodic_options).to respond_to("defaults") }
|
62
|
+
specify { expect($test_methodic_options).to respond_to("defaults=") }
|
63
|
+
|
64
|
+
specify { expect($test_methodic_options).to respond_to("toto") }
|
65
|
+
specify { expect($test_methodic_options).to respond_to("toto=") }
|
66
|
+
|
72
67
|
it "should be true that #defaults must return a Hash" do
|
73
|
-
$test_methodic_options.defaults.class.
|
68
|
+
expect($test_methodic_options.defaults.class).to eq(Hash)
|
74
69
|
end
|
75
70
|
it "#defaults[] affectation must be possible and #defaults must respond this affectation" do
|
76
71
|
$test_methodic_options.defaults[:test] = "value"
|
77
|
-
$test_methodic_options.defaults.
|
72
|
+
expect($test_methodic_options.defaults).to eq({ :test => "value"})
|
78
73
|
end
|
79
74
|
end
|
80
75
|
|
81
76
|
context "#formats R/W" do
|
82
|
-
|
83
|
-
|
84
|
-
|
77
|
+
|
78
|
+
specify { expect($test_methodic_options).to respond_to("formats") }
|
79
|
+
specify { expect($test_methodic_options).to respond_to("formats=") }
|
80
|
+
|
81
|
+
|
85
82
|
it "should be true that #formats must return a Hash" do
|
86
|
-
$test_methodic_options.formats.class.
|
83
|
+
expect($test_methodic_options.formats.class).to eq(Hash)
|
87
84
|
end
|
88
85
|
it "#formats[] affectation must be possible and #formats must respond this affectation" do
|
89
|
-
$test_methodic_options.formats[:test] = '.*'
|
90
|
-
$test_methodic_options.formats.
|
86
|
+
$test_methodic_options.formats[:test] = '.*'
|
87
|
+
expect($test_methodic_options.formats).to eq({ :test => '.*' })
|
91
88
|
end
|
92
89
|
end
|
93
90
|
|
94
91
|
context "#conditions R/W" do
|
95
|
-
|
96
|
-
|
97
|
-
|
92
|
+
|
93
|
+
specify { expect($test_methodic_options).to respond_to("conditions") }
|
94
|
+
specify { expect($test_methodic_options).to respond_to("conditions=") }
|
95
|
+
|
96
|
+
|
98
97
|
it "should be true that #conditions must return a Hash" do
|
99
|
-
$test_methodic_options.conditions.class.
|
98
|
+
expect($test_methodic_options.conditions.class).to eq(Hash)
|
100
99
|
end
|
100
|
+
|
101
101
|
it "#formats[] affectation must be possible and #formats must respond this affectation" do
|
102
102
|
aCond = Proc::new do |option| case option
|
103
103
|
when 'Doe' then true
|
104
104
|
else false
|
105
105
|
end
|
106
106
|
end
|
107
|
-
$test_methodic_options.conditions[:name] = aCond
|
108
|
-
$test_methodic_options.conditions.
|
107
|
+
$test_methodic_options.conditions[:name] = aCond
|
108
|
+
expect($test_methodic_options.conditions).to eq({ :name => aCond })
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
112
112
|
context "#mandatories R/W" do
|
113
|
-
|
114
|
-
|
113
|
+
specify { expect($test_methodic_options).to respond_to("mandatories") }
|
114
|
+
specify { expect($test_methodic_options).to respond_to("mandatories=") }
|
115
115
|
|
116
116
|
it "should be true that #mandatories must return a List < Array" do
|
117
|
-
$test_methodic_options.mandatories.class.
|
117
|
+
expect($test_methodic_options.mandatories.class).to eq(List)
|
118
118
|
end
|
119
119
|
it "#mandatories.push affectation must be possible and #mandatories must respond this affectation" do
|
120
120
|
$test_methodic_options.mandatories.push :test
|
121
|
-
$test_methodic_options.mandatories.
|
121
|
+
expect($test_methodic_options.mandatories).to eq([:test])
|
122
122
|
end
|
123
123
|
context "#mandatories.push" do
|
124
124
|
it "should not duplicate entry"do
|
125
125
|
$test_methodic_options.mandatories.push :test
|
126
126
|
$test_methodic_options.mandatories.push :test
|
127
|
-
$test_methodic_options.mandatories.count(:test).
|
127
|
+
expect($test_methodic_options.mandatories.count(:test)).to eq 1
|
128
128
|
end
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
132
132
|
|
133
133
|
context "#known R/W" do
|
134
|
-
|
135
|
-
|
136
|
-
|
134
|
+
specify { expect($test_methodic_options).to respond_to("known") }
|
135
|
+
specify { expect($test_methodic_options).to respond_to("known=") }
|
136
|
+
|
137
137
|
it "should be true that #known must return a List < Array" do
|
138
|
-
$test_methodic_options.known.class.
|
138
|
+
expect($test_methodic_options.known.class).to eq(List)
|
139
139
|
end
|
140
140
|
it "#known.push affectation must be possible and #known must respond this affectation" do
|
141
141
|
$test_methodic_options.known.push :test
|
142
|
-
$test_methodic_options.known.
|
142
|
+
expect($test_methodic_options.known).to include :test
|
143
143
|
end
|
144
144
|
context "#known.push" do
|
145
145
|
it "should not duplicate entry" do
|
146
146
|
$test_methodic_options.known.push :test
|
147
147
|
$test_methodic_options.known.push :test
|
148
|
-
$test_methodic_options.known.count(:test).
|
148
|
+
expect($test_methodic_options.known.count(:test)).to eq 1
|
149
149
|
end
|
150
150
|
end
|
151
151
|
end
|
152
152
|
end
|
153
153
|
context "Instance methods" do
|
154
|
-
|
154
|
+
|
155
155
|
|
156
156
|
|
157
157
|
|
158
158
|
context "#options" do
|
159
|
-
|
159
|
+
specify { expect($test_methodic_options).to respond_to("options") }
|
160
160
|
it "should be true that #options must return a Array" do
|
161
|
-
$test_methodic_options.options.class.
|
161
|
+
expect($test_methodic_options.options.class).to eq(Array)
|
162
162
|
end
|
163
163
|
it "should respond an Array of options keys" do
|
164
164
|
$test_methodic_options.options.each do |item|
|
165
|
-
[:name,:surname].
|
166
|
-
end
|
165
|
+
expect([:name,:surname]).to include item
|
166
|
+
end
|
167
167
|
end
|
168
168
|
end
|
169
|
-
|
169
|
+
|
170
170
|
context "#specify_default_value" do
|
171
|
-
|
172
|
-
|
171
|
+
specify { expect($test_methodic_options).to respond_to("specify_default_value") }
|
172
|
+
specify { expect($test_methodic_options).to respond_to("specify_defaults_values") }
|
173
|
+
|
173
174
|
it "should merge default value hash record in defaults attribut" do
|
174
175
|
|
175
176
|
$test_methodic_options.specify_default_value :test => 'value'
|
176
|
-
$test_methodic_options.defaults[:test].
|
177
|
-
$test_methodic_options.defaults.count.
|
177
|
+
expect($test_methodic_options.defaults[:test]).to eq 'value'
|
178
|
+
expect($test_methodic_options.defaults.count).to eq 1
|
178
179
|
end
|
179
|
-
it "should redefine a new default value for a previous key" do
|
180
|
+
it "should redefine a new default value for a previous key" do
|
180
181
|
$test_methodic_options.specify_default_value :test => 'value'
|
181
|
-
$test_methodic_options.defaults[:test].
|
182
|
+
expect($test_methodic_options.defaults[:test]).to eq 'value'
|
182
183
|
$test_methodic_options.specify_default_value :test => 'newvalue'
|
183
|
-
$test_methodic_options.defaults[:test].
|
184
|
+
expect($test_methodic_options.defaults[:test]).to eq 'newvalue'
|
184
185
|
end
|
185
186
|
end
|
186
|
-
|
187
|
-
context "#specify_class_of" do
|
188
|
-
|
189
|
-
|
187
|
+
|
188
|
+
context "#specify_class_of" do
|
189
|
+
specify { expect($test_methodic_options).to respond_to("specify_class_of") }
|
190
|
+
specify { expect($test_methodic_options).to respond_to("specify_classes_of") }
|
191
|
+
|
190
192
|
it "should merge class hash record in classes attribut" do
|
191
193
|
|
192
194
|
$test_methodic_options.specify_class_of :test => String
|
193
|
-
$test_methodic_options.classes[:test].
|
194
|
-
$test_methodic_options.classes.count.
|
195
|
+
expect($test_methodic_options.classes[:test]).to eq String
|
196
|
+
expect($test_methodic_options.classes.count).to eq 1
|
195
197
|
end
|
196
198
|
it "should redefine a new class value for a previous key" do
|
197
199
|
$test_methodic_options.specify_class_of :test => String
|
198
|
-
$test_methodic_options.classes[:test].
|
200
|
+
expect($test_methodic_options.classes[:test]).to eq String
|
199
201
|
$test_methodic_options.specify_class_of :test => Integer
|
200
|
-
$test_methodic_options.classes[:test].
|
202
|
+
expect($test_methodic_options.classes[:test]).to eq Integer
|
201
203
|
|
202
204
|
end
|
203
205
|
end
|
@@ -207,17 +209,18 @@ describe Methodic do
|
|
207
209
|
|
208
210
|
|
209
211
|
context "#specify_condition_for" do
|
210
|
-
|
211
|
-
|
212
|
+
specify { expect($test_methodic_options).to respond_to("specify_condition_for") }
|
213
|
+
specify { expect($test_methodic_options).to respond_to("specify_conditions_for") }
|
214
|
+
|
212
215
|
it "should merge condition hash record in conditions attribut" do
|
213
216
|
aCond = Proc::new do |option| case option
|
214
217
|
when "Doe" then true
|
215
218
|
else false
|
216
219
|
end
|
217
220
|
end
|
218
|
-
$test_methodic_options.specify_condition_for :name => aCond
|
219
|
-
$test_methodic_options.conditions[:name].
|
220
|
-
$test_methodic_options.conditions.count.
|
221
|
+
$test_methodic_options.specify_condition_for :name => aCond
|
222
|
+
expect($test_methodic_options.conditions[:name]).to eq aCond
|
223
|
+
expect($test_methodic_options.conditions.count).to eq 1
|
221
224
|
end
|
222
225
|
it "should redefine a new class value for a previous key" do
|
223
226
|
aCond = Proc::new do |option| case option
|
@@ -230,41 +233,42 @@ describe Methodic do
|
|
230
233
|
else false
|
231
234
|
end
|
232
235
|
end
|
233
|
-
$test_methodic_options.specify_condition_for :name => aCond
|
234
|
-
$test_methodic_options.conditions[:name].
|
235
|
-
$test_methodic_options.specify_condition_for :name => newCond
|
236
|
-
$test_methodic_options.conditions[:name].
|
236
|
+
$test_methodic_options.specify_condition_for :name => aCond
|
237
|
+
expect($test_methodic_options.conditions[:name]).to eq aCond
|
238
|
+
$test_methodic_options.specify_condition_for :name => newCond
|
239
|
+
expect($test_methodic_options.conditions[:name]).to eq newCond
|
237
240
|
$test_methodic_options.conditions = {}
|
238
241
|
end
|
239
242
|
end
|
240
243
|
|
241
244
|
context "#specify_format_of" do
|
242
|
-
|
243
|
-
|
245
|
+
specify { expect($test_methodic_options).to respond_to("specify_format_of") }
|
246
|
+
specify { expect($test_methodic_options).to respond_to("specify_formats_of") }
|
244
247
|
it "should merge format hash record in formats attribut" do
|
245
248
|
$test_methodic_options.formats = {}
|
246
249
|
$test_methodic_options.specify_format_of :test => '.*'
|
247
|
-
$test_methodic_options.formats[:test].
|
248
|
-
$test_methodic_options.formats.count.
|
250
|
+
expect($test_methodic_options.formats[:test]).to eq '.*'
|
251
|
+
expect($test_methodic_options.formats.count).to eq 1
|
249
252
|
end
|
250
253
|
it "should redefine a new format value for a previous format key" do
|
251
254
|
$test_methodic_options.specify_format_of :test => '.*'
|
252
|
-
$test_methodic_options.formats[:test].
|
255
|
+
expect($test_methodic_options.formats[:test]).to eq '.*'
|
253
256
|
$test_methodic_options.specify_format_of :test => '\d*'
|
254
|
-
$test_methodic_options.formats[:test].
|
257
|
+
expect($test_methodic_options.formats[:test]).to eq '\d*'
|
255
258
|
end
|
256
259
|
end
|
257
260
|
|
258
261
|
context "#specify_presence_of" do
|
259
|
-
|
260
|
-
|
262
|
+
specify { expect($test_methodic_options).to respond_to("specify_presence_of") }
|
263
|
+
specify { expect($test_methodic_options).to respond_to("specify_presences_of") }
|
264
|
+
|
261
265
|
it "should merge presence Array record in mandatories attribut" do
|
262
266
|
$test_methodic_options.specify_presence_of :test
|
263
|
-
$test_methodic_options.mandatories.
|
264
|
-
$test_methodic_options.mandatories.count.
|
267
|
+
expect($test_methodic_options.mandatories).to include(:test)
|
268
|
+
expect($test_methodic_options.mandatories.count).to eq 1
|
265
269
|
$test_methodic_options.specify_presence_of :test
|
266
|
-
$test_methodic_options.mandatories.
|
267
|
-
$test_methodic_options.mandatories.count.
|
270
|
+
expect($test_methodic_options.mandatories).to include(:test)
|
271
|
+
expect($test_methodic_options.mandatories.count).to eq 1
|
268
272
|
end
|
269
273
|
it "should be possible to give arguments list of symbols" do
|
270
274
|
$test_methodic_options.specify_presences_of :test2, :test3, :test4
|
@@ -273,141 +277,87 @@ describe Methodic do
|
|
273
277
|
end
|
274
278
|
|
275
279
|
context "#specify_known_option" do
|
276
|
-
|
277
|
-
|
280
|
+
specify { expect($test_methodic_options).to respond_to("specify_known_option") }
|
281
|
+
specify { expect($test_methodic_options).to respond_to("specify_known_options") }
|
282
|
+
|
278
283
|
it "should merge known Array record in known attribut" do
|
279
284
|
$test_methodic_options.specify_known_option :test
|
280
|
-
$test_methodic_options.known.
|
281
|
-
$test_methodic_options.known.count.
|
285
|
+
expect($test_methodic_options.known).to include(:test)
|
286
|
+
expect($test_methodic_options.known.count).to eq 1
|
282
287
|
$test_methodic_options.specify_known_option :test
|
283
|
-
$test_methodic_options.known.
|
284
|
-
$test_methodic_options.known.count.
|
288
|
+
expect($test_methodic_options.known).to include(:test)
|
289
|
+
expect($test_methodic_options.known.count).to eq 1
|
285
290
|
end
|
286
291
|
it "should be possible to give arguments list of symbols" do
|
287
292
|
$test_methodic_options.specify_known_options :test2, :test3, :test4
|
288
293
|
$test_methodic_options.specify_known_options [ :test5, :test6 ], :test7
|
289
|
-
|
294
|
+
|
290
295
|
end
|
291
296
|
end
|
292
297
|
|
293
298
|
context "#validate" do
|
294
|
-
|
295
|
-
it { $test_methodic_options.should respond_to("validate") }
|
296
|
-
it { $test_methodic_options.should respond_to("validate!") }
|
297
|
-
|
298
|
-
|
299
|
-
context "1/ validate known options" do
|
300
|
-
context "@validate_known_options = false (default)" do
|
301
|
-
it "should not raise ArgumentError if mandatories is not fully include in the known options list" do
|
302
|
-
$test_methodic_options.known = []
|
303
|
-
$test_methodic_options.specify_presences_of [ :name, :surname]
|
304
|
-
$test_methodic_options.specify_known_options [ :surname]
|
305
|
-
lambda{$test_methodic_options.validate!}.should_not raise_error ArgumentError
|
306
|
-
end
|
307
|
-
it "should not raise ArgumentError if an option in options list not in the known options list" do
|
308
|
-
$test_methodic_options.known = []
|
309
|
-
$test_methodic_options.specify_known_options [ :surname ]
|
310
|
-
lambda{$test_methodic_options.validate!}.should_not raise_error ArgumentError
|
311
|
-
end
|
312
|
-
it "should not raise if all given options in options list is in known options " do
|
313
|
-
$test_methodic_options.known = []
|
314
|
-
$test_methodic_options.specify_known_options [ :name, :surname, :optional ]
|
315
|
-
lambda{$test_methodic_options.validate!}.should_not raise_error ArgumentError
|
316
|
-
end
|
317
|
-
it "should not raise ArgumentError if formats made a reference to an unknown options" do
|
318
|
-
$test_methodic_options.known = []
|
319
|
-
$test_methodic_options.specify_format_of :nickname => /.*/
|
320
|
-
$test_methodic_options.specify_known_options [ :surname, :name ]
|
321
|
-
lambda{$test_methodic_options.validate!}.should_not raise_error ArgumentError
|
322
|
-
end
|
323
|
-
it "should not raise ArgumentError if classes made a reference to an unknown options" do
|
324
|
-
$test_methodic_options.known = []
|
325
|
-
$test_methodic_options[:nickname] = 'Jeedoe'
|
326
|
-
$test_methodic_options.specify_class_of :nickname => String
|
327
|
-
$test_methodic_options.specify_known_options [ :surname, :name ]
|
328
|
-
lambda{$test_methodic_options.validate!}.should_not raise_error ArgumentError
|
329
|
-
end
|
330
|
-
it "should not raise ArgumentError if default made a reference to an unknown options" do
|
331
|
-
$test_methodic_options.known = []
|
332
|
-
$test_methodic_options.specify_default_value :nickname => 'Jeedoe'
|
333
|
-
$test_methodic_options.specify_known_options [ :surname, :name ]
|
334
|
-
lambda{$test_methodic_options.validate!}.should_not raise_error ArgumentError
|
335
|
-
end
|
336
299
|
|
337
|
-
|
338
|
-
|
300
|
+
specify { expect($test_methodic_options).to respond_to("validate") }
|
301
|
+
specify { expect($test_methodic_options).to respond_to("validate!") }
|
302
|
+
|
303
|
+
|
304
|
+
context "1/ validate known options" do
|
305
|
+
context "@validate_known_options = true" do
|
339
306
|
it "should raise ArgumentError if mandatories is not fully include in the known options list" do
|
340
307
|
$test_methodic_options_with_known_options.known = []
|
341
308
|
$test_methodic_options_with_known_options.specify_presences_of [ :name, :surname ]
|
342
309
|
$test_methodic_options_with_known_options.specify_known_options [ :surname ]
|
343
|
-
|
310
|
+
expect { $test_methodic_options_with_known_options.validate! }.to raise_error(ArgumentError)
|
344
311
|
end
|
345
312
|
it "should raise ArgumentError if an option in options list not in the known options list" do
|
346
313
|
$test_methodic_options_with_known_options.known = []
|
347
314
|
$test_methodic_options_with_known_options.specify_known_options [ :surname]
|
348
|
-
|
349
|
-
end
|
350
|
-
it "should not raise if all given options in options list is in known options " do
|
351
|
-
$test_methodic_options_with_known_options.known = []
|
352
|
-
$test_methodic_options_with_known_options.specify_known_options [ :name, :surname,:optional]
|
353
|
-
lambda{$test_methodic_options_with_known_options.validate!}.should_not raise_error ArgumentError
|
315
|
+
expect { $test_methodic_options_with_known_options.validate! }.to raise_error(ArgumentError)
|
354
316
|
end
|
355
317
|
it "should raise ArgumentError if formats made a reference to an unknown options" do
|
356
318
|
$test_methodic_options_with_known_options.known = []
|
357
319
|
$test_methodic_options_with_known_options.specify_format_of :nickname => /.*/
|
358
320
|
$test_methodic_options_with_known_options.specify_known_options [ :surname, :name ]
|
359
|
-
|
321
|
+
expect { $test_methodic_options_with_known_options.validate! }.to raise_error(ArgumentError)
|
360
322
|
end
|
361
323
|
it "should raise ArgumentError if classes made a reference to an unknown options" do
|
362
324
|
$test_methodic_options_with_known_options.known = []
|
363
325
|
$test_methodic_options_with_known_options[:nickname] = 'Jeedoe'
|
364
326
|
$test_methodic_options_with_known_options.specify_class_of :nickname => String
|
365
327
|
$test_methodic_options_with_known_options.specify_known_options [ :surname, :name ]
|
366
|
-
|
328
|
+
expect { $test_methodic_options_with_known_options.validate! }.to raise_error(ArgumentError)
|
367
329
|
end
|
368
330
|
it "should raise ArgumentError if default made a reference to an unknown options" do
|
369
331
|
$test_methodic_options_with_known_options.known = []
|
370
332
|
$test_methodic_options_with_known_options.specify_default_value :nickname => 'Jeedoe'
|
371
333
|
$test_methodic_options_with_known_options.specify_known_options [ :surname, :name ]
|
372
|
-
|
334
|
+
expect { $test_methodic_options_with_known_options.validate! }.to raise_error(ArgumentError)
|
373
335
|
end
|
374
|
-
|
336
|
+
|
375
337
|
end
|
376
|
-
|
338
|
+
|
377
339
|
end
|
378
340
|
|
379
341
|
context "2/ validate classes" do
|
380
|
-
it "should raise ArgumentError if an options don't match a class definition" do
|
342
|
+
it "should raise ArgumentError if an options don't match a class definition" do
|
381
343
|
$test_methodic_options.specify_classes_of :name => Integer, :surname => String
|
382
|
-
|
344
|
+
expect { $test_methodic_options.validate! }.to raise_error(ArgumentError)
|
383
345
|
|
384
346
|
end
|
385
|
-
it "should not raise if options match class definition" do
|
386
|
-
$test_methodic_options.specify_classes_of :name => String, :surname => String
|
387
|
-
lambda{$test_methodic_options.validate!}.should_not raise_error ArgumentError
|
388
|
-
end
|
389
347
|
end
|
390
348
|
context "3/ validate mandatories" do
|
391
349
|
it "should raise ArgumentError if a mandatory option not in options list" do
|
392
350
|
$test_methodic_options.specify_presences_of [ :name , :surname, :nickname, :age ]
|
393
|
-
|
351
|
+
expect { $test_methodic_options.validate! }.to raise_error(ArgumentError)
|
394
352
|
|
395
353
|
end
|
396
|
-
it "should not raise if mandatory options and options list match" do
|
397
|
-
$test_methodic_options.specify_presences_of [ :name , :surname ]
|
398
|
-
lambda{$test_methodic_options.validate!}.should_not raise_error ArgumentError
|
399
|
-
end
|
400
354
|
end
|
401
355
|
context "4/ validate formats" do
|
402
356
|
it "should raise ArgumentError if an option in options list not have the good registered formats" do
|
403
357
|
$test_methodic_options.specify_formats_of :name => /.*/, :surname => /toto.*/
|
404
|
-
|
358
|
+
expect { $test_methodic_options.validate! }.to raise_error(ArgumentError)
|
405
359
|
|
406
360
|
end
|
407
|
-
it "should not raise if all options in options list match formats definitions " do
|
408
|
-
$test_methodic_options.specify_formats_of :name => /.*/, :surname => /.*/
|
409
|
-
lambda{$test_methodic_options.validate!}.should_not raise_error ArgumentError
|
410
|
-
end
|
411
361
|
end
|
412
362
|
context "5/ validate conditions" do
|
413
363
|
it "should raise ArgumentError if an option in options list not validate a registered condition" do
|
@@ -418,33 +368,24 @@ describe Methodic do
|
|
418
368
|
end
|
419
369
|
end
|
420
370
|
$test_methodic_options.specify_condition_for :name => aCond
|
421
|
-
|
371
|
+
expect { $test_methodic_options.validate! }.to raise_error(ArgumentError)
|
422
372
|
|
423
373
|
end
|
424
|
-
it "should not raise if all options in options list match formats definitions " do
|
425
|
-
$test_methodic_options.conditions = {}
|
426
|
-
aCond = Proc::new do |option| case option
|
427
|
-
when 'Doe' then true
|
428
|
-
else false
|
429
|
-
end
|
430
|
-
end
|
431
|
-
$test_methodic_options.specify_condition_for :name => aCond
|
432
|
-
lambda{$test_methodic_options.validate!}.should_not raise_error ArgumentError
|
433
|
-
end
|
434
374
|
end
|
435
375
|
|
436
376
|
|
437
377
|
|
438
|
-
end
|
378
|
+
end
|
439
379
|
context "#merge_with_defaults" do
|
440
|
-
|
441
|
-
|
442
|
-
|
380
|
+
specify { expect($test_methodic_options).to respond_to("merge_with_defaults") }
|
381
|
+
specify { expect($test_methodic_options).to respond_to("merge") }
|
382
|
+
|
383
|
+
it "should merge defaults values and don't override with options" do
|
443
384
|
$test_methodic_options.specify_defaults_values :name => 'Smith', :surname => 'Paul', :nickname => 'Jeedoe'
|
444
385
|
$test_methodic_options.merge_with_defaults
|
445
|
-
$test_methodic_options[:name].
|
446
|
-
$test_methodic_options[:surname].
|
447
|
-
$test_methodic_options[:nickname].
|
386
|
+
expect($test_methodic_options[:name]).to eq "Doe"
|
387
|
+
expect($test_methodic_options[:surname]).to eq "John"
|
388
|
+
expect($test_methodic_options[:nickname]).to eq "Jeedoe"
|
448
389
|
|
449
390
|
end
|
450
391
|
end
|
@@ -452,8 +393,8 @@ describe Methodic do
|
|
452
393
|
end
|
453
394
|
context "Methodic::get_options" do
|
454
395
|
it "should return a Methodic::Options Object" do
|
455
|
-
Methodic::get_options({:name => 'Doe', :surname => 'John'}).
|
396
|
+
expect(Methodic::get_options({:name => 'Doe', :surname => 'John'})).to be_an_instance_of Methodic::Options
|
456
397
|
end
|
457
398
|
end
|
458
|
-
|
459
|
-
end
|
399
|
+
|
400
|
+
end
|