oval 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA512:
3
+ metadata.gz: 122a3c31eab1e09c6a8c974fd7c6ae60ff7406ca9df2f3e992a5c2d0c716142f4fbfbb9916edf39b34011ee9b694e15347be763b72fbcaea48d9ce54a705d734
4
+ data.tar.gz: c0c39ef7355986b3cf9172a0b100684a257dad3ff5276b8a89978e3610705372fb700c85af0bf3881f4360666a2f691044f55089b69ebf6f4289552df8e6365a
5
+ SHA1:
6
+ metadata.gz: 3c13c5f753d31b5e21bd0c551a1ad84b2ab34108
7
+ data.tar.gz: 4d3c5c354ebe8920d852f46aef7a5018454db83c
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ 2014-02-09 Pawel Tomulik <ptomulik@meil.pw.edu.pl>
2
+ * release 0.0.7
3
+ * fixed match_spec.rb to work on 1.8 and 2.0
4
+ * revised examples in README.md and added specs to cover them
5
+ * fixed Oval::Match#validate to handle non-string TypeError
1
6
  2014-02-08 Pawel Tomulik <ptomulik@meil.pw.edu.pl>
2
7
  * release 0.0.6
3
8
  * documented a way for validating arbitrary arguments
data/Modulefile CHANGED
@@ -1,5 +1,5 @@
1
1
  name 'ptomulik-oval'
2
- version '0.0.6'
2
+ version '0.0.7'
3
3
  source 'git://github.com/ptomulik/rubygems-oval.git'
4
4
  author 'ptomulik'
5
5
  license 'Apache License, Version 2.0'
data/README.md CHANGED
@@ -30,16 +30,16 @@ but it appeared early that it's suitable to validate arbitrary parameters
30
30
  (variables).
31
31
 
32
32
  The shape of acceptable data is described by a simple grammar. The validation
33
- is then carried out by a recursive-descent parser that matches the actual
34
- values provided by caller against [declarators](#declarators) that comprise the
35
- hash declaration.
33
+ is then carried out by a recursive-descent parser which matches actual values
34
+ provided by caller to [declarators](#declarators) that comprise the declaration
35
+ of acceptable values.
36
36
 
37
- A declaration consists of terminal and non-terminal declarators. Non-terminal
38
- declarators are created by methods of `Oval` module which have names starting
39
- with `ov_` prefix. All other values (such as `:symbol`, `'string'`, `nil`, or
40
- `Class`) are terminals. Terminals use `==` operator to match the values
41
- provided by caller. Non-terminal use its own logic introducing more elaborate
42
- matching criteria (see for example [ov\_collection](#ov_collection)).
37
+ A declaration consists of terminal and non-terminal declarators. Most *Oval*
38
+ methods with **ov_xxx** names are non-terminal declarators. All other values
39
+ (such as `:symbol`, `'string'`, `nil`, or `Class`) are terminals. Terminals use
40
+ `==` operator to match the values provided by caller. Non-terminal use its own
41
+ logic introducing more elaborate matching criteria (see for example
42
+ [ov\_collection](#ov_collection)).
43
43
 
44
44
  **Oval** raises **Oval::DeclError** if the declaration is not well-formed. This
45
45
  is raised from the point of declaration. Other, more common exception is the
@@ -167,10 +167,21 @@ In what follows, we'll document all the core declarators implemented in
167
167
  - Example
168
168
 
169
169
  ```ruby
170
- ov = ov_options[ :bar => ov_anything ]
171
- def foo(ops = {})
172
- Oval.validate(ops, ov, 'ops')
170
+ require 'oval'
171
+ class C
172
+ extend Oval
173
+ def self.ov
174
+ @oc = ov_options[ :bar => ov_anything ]
175
+ end
176
+ def self.foo(ops = {})
177
+ Oval.validate(ops, ov, 'ops')
178
+ end
173
179
  end
180
+ C.foo() # should pass
181
+ C.foo :bar => 10 # should pass
182
+ C.foo :bar => nil # should pass
183
+ C.foo :bar => 'bar' # should pass
184
+ C.foo :foo => 10, :bar => 20 # Oval::ValueError "Invalid option :foo for ops. Allowed options are :bar"
174
185
  ```
175
186
 
176
187
  [[Table of Contents](#table-of-contents)|[Index of Declarators](#index-of-declarators)]
@@ -198,13 +209,26 @@ In what follows, we'll document all the core declarators implemented in
198
209
  - Example
199
210
 
200
211
  ```ruby
201
- ov = ov_options[
202
- :bar => ov_collection[ Hash, { instance_of[Symbol] => anything } ],
203
- :geez => ov_collection [ Array, instance_of[String] ]
204
- ]
205
- def foo(ops = {})
206
- Oval.validate(ops, ov, 'ops')
212
+ require 'oval'
213
+ class C
214
+ extend Oval
215
+ def self.ov_h
216
+ ov_collection[ Hash, { ov_instance_of[Symbol] => ov_anything } ]
217
+ end
218
+ def self.ov_a
219
+ ov_collection[ Array, ov_instance_of[String] ]
220
+ end
221
+ def self.foo(h, a)
222
+ Oval.validate(h, ov_h, 'h')
223
+ Oval.validate(a, ov_a, 'a')
224
+ end
207
225
  end
226
+ C.foo({:x => 10}, ['xxx']) # Should bass
227
+ C.foo({:x => 10, :y => nil}, ['xxx', 'zzz']) # Should pass
228
+ C.foo(10,['xxx']) # Oval::ValueError, "Invalid value Fixnum for h.class. Should be equal Hash"
229
+ C.foo({:x => 10, 'y' => 20}, [ 'xxx' ]) # Oval::ValueError, 'Invalid object "y" of type String for h key. Should be an instance of Symbol'
230
+ C.foo({:x => 10}, 20) # Invalid value Fixnum for a.class. Should be equal Array
231
+ C.coo({:x => 10}, [ 'ten', 20 ]) # Oval::ValueError, "Invalid object 20 of type Fixnum for a[1]. Should be an instance of String"
208
232
  ```
209
233
 
210
234
  [[Table of Contents](#table-of-contents)|[Index of Declarators](#index-of-declarators)]
@@ -222,10 +246,18 @@ In what follows, we'll document all the core declarators implemented in
222
246
  - Example
223
247
 
224
248
  ```ruby
225
- ov = ov_options[ :bar => ov_instance_of[String] ]
226
- def foo(ops = {})
227
- Oval.validate(ops, ov, 'ops')
249
+ require 'oval'
250
+ class C
251
+ extend Oval
252
+ def self.ov
253
+ ov_instance_of[String]
254
+ end
255
+ def self.foo(s)
256
+ Oval.validate(s, ov, 's')
257
+ end
228
258
  end
259
+ C.foo('bar') # Should pass
260
+ C.foo(10) # Oval::ValueError, "Invalid object 10 for s. Should be an instance of String"
229
261
  ```
230
262
 
231
263
  [[Table of Contents](#table-of-contents)|[Index of Declarators](#index-of-declarators)]
@@ -243,10 +275,19 @@ In what follows, we'll document all the core declarators implemented in
243
275
  - Example
244
276
 
245
277
  ```ruby
246
- ov = ov_options[ :bar => ov_kind_of[Numeric] ]
247
- def foo(ops = {})
248
- Oval.validate(ops, ov, 'ops')
278
+ require 'oval'
279
+ class C
280
+ extend Oval
281
+ def self.ov
282
+ ov_kind_of[Numeric]
283
+ end
284
+ def self.foo(n)
285
+ Oval.validate(n, ov, 'n')
286
+ end
249
287
  end
288
+ C.foo(10) # Should pass
289
+ C.foo(10.0) # Should pass
290
+ C.foo('10') # Oval::ValueError, 'Invalid object "10" of type String for n. Should be a kind of Numeric'
250
291
  ```
251
292
 
252
293
  [[Table of Contents](#table-of-contents)|[Index of Declarators](#index-of-declarators)]
@@ -264,11 +305,20 @@ In what follows, we'll document all the core declarators implemented in
264
305
  - Example
265
306
 
266
307
  ```ruby
267
- # Only valid identifiers are allowed as :bar option
268
- ov = ov_options[ :bar => ov_match[/^[a-z_]\w+$/] ]
269
- def foo(ops = {})
270
- Oval.validate(ops, ov, 'ops')
308
+ require 'oval'
309
+ class C
310
+ extend Oval
311
+ def self.ov
312
+ # Only valid identifiers are allowed as :bar option
313
+ ov_match[/^[a-z_]\w+$/]
314
+ end
315
+ def self.foo(name)
316
+ Oval.validate(name, ov, 'name')
317
+ end
271
318
  end
319
+ C.foo('var_23') # Should pass
320
+ C.foo(10) # Oval::ValueError, "Invalid value 10 for name. Should match /^[a-z_]\\w+$/ but it's not even convertible to String"
321
+ C.foo('10abc_') # Oval::ValueError, 'Invalid value "10abc_" for name. Should match /^[a-z_]\\w+$/'
272
322
  ```
273
323
 
274
324
  [[Table of Contents](#table-of-contents)|[Index of Declarators](#index-of-declarators)]
@@ -285,12 +335,21 @@ In what follows, we'll document all the core declarators implemented in
285
335
  - Example
286
336
 
287
337
  ```ruby
288
- ov = ov_options[
289
- :bar => ov_one_of[ ov_instance_of[String], ov_kind_of[Numeric], nil ]
290
- ]
291
- def foo(ops = {})
292
- Oval.validate(ops, ov, 'ops')
338
+ require 'oval'
339
+ class C
340
+ extend Oval
341
+ def self.ov
342
+ ov_one_of[ ov_instance_of[String], ov_kind_of[Numeric], nil ]
343
+ end
344
+ def self.foo(x)
345
+ Oval.validate(x, ov, 'x')
346
+ end
293
347
  end
348
+ C.foo('str') # Should pass
349
+ C.foo(10) # Should pass
350
+ C.foo(10.0) # Should pass
351
+ C.foo(nil) # Should pass
352
+ C.foo([]) # Oval::ValueError, "Invalid value [] for x. Should be an instance of String, be a kind of Numeric or be equal nil"
294
353
  ```
295
354
 
296
355
  [[Table of Contents](#table-of-contents)|[Index of Declarators](#index-of-declarators)]
@@ -334,10 +393,21 @@ In what follows, we'll document all the core declarators implemented in
334
393
  - Example
335
394
 
336
395
  ```ruby
337
- ov = ov_options[ :bar => ov_subclass_of[Numeric] ]
338
- def foo(ops = {})
339
- Oval.validate(ops, ov, 'ops')
396
+ require 'oval'
397
+ class C
398
+ extend Oval
399
+ def self.ov
400
+ ov_options[ :bar => ov_subclass_of[Numeric] ]
401
+ end
402
+ def self.foo(ops = {})
403
+ Oval.validate(ops, ov, 'ops')
404
+ end
340
405
  end
406
+ C.foo :bar => Integer # Should pass
407
+ C.foo :bar => Fixnum # Should pass
408
+ C.foo([]) # Oval::ValueError, "Invalid options [] of type Array. Should be a Hash
409
+ C.foo :foo => Fixnum # Oval::ValueError, "Invalid option :foo for ops. Allowed options are :bar"
410
+ C.foo :bar => 10 # Oval::ValueError, "Invalid class 10 for ops[:bar]. Should be subclass of Numeric"
341
411
  ```
342
412
 
343
413
  ###<a id="api-reference"></a>API Reference
@@ -3,10 +3,21 @@ require 'oval/base'
3
3
  class Oval::Match < Oval::Base
4
4
 
5
5
  def validate(thing, subject = nil)
6
- unless re.match(thing)
7
- raise Oval::ValueError,
8
- "Invalid value #{thing.inspect}#{for_subject(subject)}. " +
9
- "Should #{it_should}"
6
+ begin
7
+ unless re.match(thing)
8
+ raise Oval::ValueError,
9
+ "Invalid value #{thing.inspect}#{for_subject(subject)}. " +
10
+ "Should #{it_should}"
11
+ end
12
+ rescue TypeError => err
13
+ ere = /(?:can't convert|no implicit conversion of) \S+ (?:in)?to String/
14
+ if ere.match(err.message)
15
+ raise Oval::ValueError,
16
+ "Invalid value #{thing.inspect}#{for_subject(subject)}. " +
17
+ "Should #{it_should} but it's not even convertible to String"
18
+ else
19
+ raise
20
+ end
10
21
  end
11
22
  end
12
23
 
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = 'oval'
6
- gem.version = '0.0.6'
6
+ gem.version = '0.0.7'
7
7
  gem.authors = ["Pawel Tomulik"]
8
8
  gem.email = ["ptomulik@meil.pw.edu.pl"]
9
9
  gem.description = %q{Validate options when passed to methods}
@@ -82,7 +82,8 @@ describe Oval::Match do
82
82
  [
83
83
  [ /^[a-z_][a-z0-9_]+/, ['5643'], "Invalid value \"5643\". Should match #{(/^[a-z_][a-z0-9_]+/).inspect}" ],
84
84
  [ /^[a-z_][a-z0-9_]+/, ['5643','subj'], "Invalid value \"5643\" for subj. Should match #{(/^[a-z_][a-z0-9_]+/).inspect}" ],
85
- [ /^[a-z_][a-z0-9_]+/, [nil,'subj'], "Invalid value nil for subj. Should match #{(/^[a-z_][a-z0-9_]+/).inspect}" ]
85
+ [ /^[a-z_][a-z0-9_]+/, [nil,'subj'], "Invalid value nil for subj. Should match #{(/^[a-z_][a-z0-9_]+/).inspect}" ],
86
+ [ /^[a-z_][a-z0-9_]+/, [10,'subj'], "Invalid value 10 for subj. Should match #{(/^[a-z_][a-z0-9_]+/).inspect} but it's not even convertible to String" ]
86
87
  ].each do |re,args,msg|
87
88
  context "#{described_class.name}[#{re.inspect}].validate(#{args.map{|x| x.inspect}.join(', ')})" do
88
89
  let(:re) { re }
@@ -63,6 +63,7 @@ describe Oval do
63
63
  it { expect { subject.foo :foo => 10, :bar => 20 }.to raise_error Oval::ValueError, msg}
64
64
  end
65
65
  end
66
+
66
67
  describe "Example 2" do
67
68
  let(:subject) do
68
69
  Class.new do
@@ -89,4 +90,218 @@ describe Oval do
89
90
  it { expect { subject.foo :foo => 10, :bar => 20 }.to raise_error Oval::ValueError, msg}
90
91
  end
91
92
  end
93
+
94
+ describe "ov_anything example" do
95
+ let(:subject) do
96
+ Class.new do
97
+ extend Oval
98
+ def self.ov
99
+ @oc = ov_options[ :bar => ov_anything ]
100
+ end
101
+ def self.foo(ops = {})
102
+ Oval.validate(ops, ov, 'ops')
103
+ end
104
+ end
105
+ end
106
+ it("should compile"){ subject }
107
+ context "foo" do
108
+ it { expect { subject.foo }.to_not raise_error }
109
+ end
110
+ [ 10, nil, "bar" ].each do |val|
111
+ context "foo :bar => #{val.inspect}" do
112
+ let(:val) { val }
113
+ it { expect { subject.foo :bar => val }.to_not raise_error }
114
+ end
115
+ end
116
+ context "foo :foo => 10, :bar => 20" do
117
+ let(:msg) { "Invalid option :foo for ops. Allowed options are :bar" }
118
+ it { expect { subject.foo :foo => 10, :bar => 20 }.to raise_error Oval::ValueError, msg}
119
+ end
120
+ end
121
+
122
+ describe "ov_collection example" do
123
+ let(:subject) do
124
+ Class.new do
125
+ extend Oval
126
+ def self.ov_h
127
+ ov_collection[ Hash, { ov_instance_of[Symbol] => ov_anything } ]
128
+ end
129
+ def self.ov_a
130
+ ov_collection[ Array, ov_instance_of[String] ]
131
+ end
132
+ def self.foo(h, a)
133
+ Oval.validate(h, ov_h, 'h')
134
+ Oval.validate(a, ov_a, 'a')
135
+ end
136
+ end
137
+ end
138
+ it("should compile"){ subject }
139
+ [
140
+ [ {:x => 10}, [ 'xxx' ] ],
141
+ [ {:x => 10, :y => nil}, [ 'xxx', 'zzz' ] ]
142
+ ].each do |args|
143
+ context "foo(#{args.map{|x| x.inspect}.join(', ')})" do
144
+ let(:args) { args}
145
+ it { expect { subject.foo(*args) }.to_not raise_error }
146
+ end
147
+ end
148
+ context "foo(10,['xxx'])" do
149
+ let(:msg) { "Invalid value Fixnum for h.class. Should be equal Hash" }
150
+ it { expect { subject.foo(10,['xxx']) }.to raise_error Oval::ValueError, msg}
151
+ end
152
+ context "foo({:x => 10, 'y' => 20},['xxx'])" do
153
+ let(:msg) { 'Invalid object "y" of type String for h key. Should be an instance of Symbol' }
154
+ it { expect { subject.foo({:x => 10, 'y' => 20},['xxx']) }.to raise_error Oval::ValueError, msg}
155
+ end
156
+ context "foo({:x => 10},20)" do
157
+ let(:msg) { "Invalid value Fixnum for a.class. Should be equal Array" }
158
+ it { expect { subject.foo({:x => 10}, 20) }.to raise_error Oval::ValueError, msg}
159
+ end
160
+ context "foo({:x => 10},['ten', 20])" do
161
+ let(:msg) { "Invalid object 20 of type Fixnum for a[1]. Should be an instance of String" }
162
+ it { expect { subject.foo({:x => 10}, ['ten', 20]) }.to raise_error Oval::ValueError, msg}
163
+ end
164
+ end
165
+
166
+ describe "ov_instance_of example" do
167
+ let(:subject) do
168
+ Class.new do
169
+ extend Oval
170
+ def self.ov
171
+ ov_instance_of[String]
172
+ end
173
+ def self.foo(s)
174
+ Oval.validate(s, ov, 's')
175
+ end
176
+ end
177
+ end
178
+ it("should compile"){ subject }
179
+ context "foo('bar')" do
180
+ it { expect { subject.foo('bar') }.to_not raise_error }
181
+ end
182
+ context "foo(10)" do
183
+ let(:msg) { "Invalid object 10 for s. Should be an instance of String" }
184
+ it { expect { subject.foo('bar') }.to_not raise_error }
185
+ end
186
+ end
187
+
188
+ describe "ov_kind_of example" do
189
+ let(:subject) do
190
+ Class.new do
191
+ extend Oval
192
+ def self.ov
193
+ ov_kind_of[Numeric]
194
+ end
195
+ def self.foo(n)
196
+ Oval.validate(n, ov, 'n')
197
+ end
198
+ end
199
+ end
200
+ it("should compile"){ subject }
201
+ context "foo(10)" do
202
+ it { expect { subject.foo(10) }.to_not raise_error }
203
+ end
204
+ context "foo(10.0)" do
205
+ it { expect { subject.foo(10.0) }.to_not raise_error }
206
+ end
207
+ context "foo('10')" do
208
+ let(:msg) { 'Invalid object "10" of type String for n. Should be a kind of Numeric' }
209
+ it { expect { subject.foo('10') }.to raise_error Oval::ValueError, msg}
210
+ end
211
+ end
212
+
213
+ describe "ov_match example" do
214
+ let(:subject) do
215
+ Class.new do
216
+ extend Oval
217
+ def self.ov
218
+ # Only valid identifiers are allowed as :bar option
219
+ ov_match[/^[a-z_]\w+$/]
220
+ end
221
+ def self.foo(name)
222
+ Oval.validate(name, ov, 'name')
223
+ end
224
+ end
225
+ end
226
+ it("should compile"){ subject }
227
+ context "foo('var_23')" do
228
+ it { expect { subject.foo('var_23') }.to_not raise_error }
229
+ end
230
+ context "foo(10)" do
231
+ let(:msg) { "Invalid value 10 for name. Should match /^[a-z_]\\w+$/ but it's not even convertible to String" }
232
+ it { expect { subject.foo(10) }.to raise_error Oval::ValueError, msg}
233
+ end
234
+ context "foo('10abc_')" do
235
+ let(:msg) { 'Invalid value "10abc_" for name. Should match /^[a-z_]\\w+$/' }
236
+ it { expect { subject.foo('10abc_') }.to raise_error Oval::ValueError, msg}
237
+ end
238
+ end
239
+
240
+ describe "ov_one_of example" do
241
+ let(:subject) do
242
+ Class.new do
243
+ extend Oval
244
+ def self.ov
245
+ ov_one_of[ ov_instance_of[String], ov_kind_of[Numeric], nil ]
246
+ end
247
+ def self.foo(x)
248
+ Oval.validate(x, ov, 'x')
249
+ end
250
+ end
251
+ end
252
+ it("should compile"){ subject }
253
+ context "foo('str')" do
254
+ it { expect { subject.foo('str') }.to_not raise_error }
255
+ end
256
+ context "foo(10)" do
257
+ it { expect { subject.foo(10) }.to_not raise_error }
258
+ end
259
+ context "foo(10.0)" do
260
+ it { expect { subject.foo(10.0) }.to_not raise_error }
261
+ end
262
+ context "foo(nil)" do
263
+ it { expect { subject.foo(nil) }.to_not raise_error }
264
+ end
265
+ context "foo([])" do
266
+ let(:msg) { 'Invalid value [] for x. Should be an instance of String, be a kind of Numeric or be equal nil' }
267
+ it { expect { subject.foo([]) }.to raise_error Oval::ValueError, msg}
268
+ end
269
+ end
270
+
271
+ describe "ov_options example" do
272
+ let(:subject) do
273
+ Class.new do
274
+ extend Oval
275
+ def self.ov
276
+ ov_options[ :bar => ov_subclass_of[Numeric] ]
277
+ end
278
+ def self.foo(ops = {})
279
+ Oval.validate(ops, ov, 'ops')
280
+ end
281
+ end
282
+ end
283
+ it("should compile"){ subject }
284
+ context "foo" do
285
+ it { expect { subject.foo }.to_not raise_error }
286
+ end
287
+ context "foo :bar => Integer" do
288
+ it { expect { subject.foo :bar => Integer }.to_not raise_error }
289
+ end
290
+ context "foo :bar => Fixnum" do
291
+ it { expect { subject.foo :bar => Fixnum }.to_not raise_error }
292
+ end
293
+ context "foo([])" do
294
+ let(:msg) { 'Invalid options [] of type Array. Should be a Hash' }
295
+ it { expect { subject.foo([]) }.to raise_error Oval::ValueError, msg}
296
+ end
297
+ context "foo :foo => Fixnum" do
298
+ let(:msg) { 'Invalid option :foo for ops. Allowed options are :bar' }
299
+ it { expect { subject.foo :foo => Fixnum }.to raise_error Oval::ValueError, msg}
300
+ end
301
+ context "foo :bar => 10" do
302
+ let(:msg) { 'Invalid class 10 for ops[:bar]. Should be subclass of Numeric' }
303
+ it { expect { subject.foo :bar => 10 }.to raise_error Oval::ValueError, msg}
304
+ end
305
+ end
306
+
92
307
  end
metadata CHANGED
@@ -1,151 +1,61 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: oval
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.6
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.7
6
5
  platform: ruby
7
- authors:
6
+ authors:
8
7
  - Pawel Tomulik
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-02-08 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
11
+
12
+ date: 2014-02-09 00:00:00 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :development
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: rspec-core
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: rspec-expectations
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :development
55
16
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: mocha
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: coveralls
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - &id002
20
+ - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
86
23
  type: :development
24
+ version_requirements: *id001
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec-core
87
27
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
94
- - !ruby/object:Gem::Dependency
95
- name: yard
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
28
+ requirement: &id003 !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - *id002
102
31
  type: :development
32
+ version_requirements: *id003
33
+ - !ruby/object:Gem::Dependency
34
+ name: rspec-expectations
103
35
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: redcarpet
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
36
+ requirement: &id004 !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - *id002
118
39
  type: :development
40
+ version_requirements: *id004
41
+ - !ruby/object:Gem::Dependency
42
+ name: mocha
119
43
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
- - !ruby/object:Gem::Dependency
127
- name: github-markup
128
- requirement: !ruby/object:Gem::Requirement
129
- none: false
130
- requirements:
131
- - - ! '>='
132
- - !ruby/object:Gem::Version
133
- version: '0'
44
+ requirement: &id005 !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - *id002
134
47
  type: :development
135
- prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ! '>='
140
- - !ruby/object:Gem::Version
141
- version: '0'
48
+ version_requirements: *id005
142
49
  description: Validate options when passed to methods
143
- email:
50
+ email:
144
51
  - ptomulik@meil.pw.edu.pl
145
52
  executables: []
53
+
146
54
  extensions: []
55
+
147
56
  extra_rdoc_files: []
148
- files:
57
+
58
+ files:
149
59
  - .fixtures.yml
150
60
  - .gitignore
151
61
  - .rspec
@@ -188,39 +98,29 @@ files:
188
98
  - spec/unit/oval/subclass_of_spec.rb
189
99
  - spec/unit/oval_spec.rb
190
100
  homepage: https://github.com/ptomulik/rubygems-oval
191
- licenses:
101
+ licenses:
192
102
  - Apache 2.0
103
+ metadata: {}
104
+
193
105
  post_install_message:
194
106
  rdoc_options: []
195
- require_paths:
107
+
108
+ require_paths:
196
109
  - lib
197
- required_ruby_version: !ruby/object:Gem::Requirement
198
- none: false
199
- requirements:
200
- - - ! '>='
201
- - !ruby/object:Gem::Version
202
- version: '0'
203
- segments:
204
- - 0
205
- hash: 3909914024463358041
206
- required_rubygems_version: !ruby/object:Gem::Requirement
207
- none: false
208
- requirements:
209
- - - ! '>='
210
- - !ruby/object:Gem::Version
211
- version: '0'
212
- segments:
213
- - 0
214
- hash: 3909914024463358041
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - *id002
113
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - *id002
215
116
  requirements: []
117
+
216
118
  rubyforge_project:
217
- rubygems_version: 1.8.23
119
+ rubygems_version: 2.0.14
218
120
  signing_key:
219
- specification_version: 3
220
- summary: Using hashes to pass options to methods is a very common ruby practice. With
221
- **Oval** method authors may restrict callers to pass only declared options that
222
- meet requirements described in a hash declaration.
223
- test_files:
121
+ specification_version: 4
122
+ summary: Using hashes to pass options to methods is a very common ruby practice. With **Oval** method authors may restrict callers to pass only declared options that meet requirements described in a hash declaration.
123
+ test_files:
224
124
  - spec/spec_helper.rb
225
125
  - spec/unit/oval/anything_spec.rb
226
126
  - spec/unit/oval/array_item_spec.rb
@@ -235,4 +135,3 @@ test_files:
235
135
  - spec/unit/oval/options_spec.rb
236
136
  - spec/unit/oval/subclass_of_spec.rb
237
137
  - spec/unit/oval_spec.rb
238
- has_rdoc: