methodic 1.2 → 1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/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
|