compel 0.3.4 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/lib/compel/builder/hash.rb +20 -2
- data/lib/compel/coercion/types/type.rb +1 -1
- data/lib/compel/validators/hash_validator.rb +4 -1
- data/lib/compel/version.rb +1 -1
- data/spec/compel/builder_spec.rb +190 -38
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e6cfd90b9d392c7d5bf4f81be726f0e5b0f1444
|
4
|
+
data.tar.gz: 9ad55dcf253ce805dc407889fcc94fe659106329
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35e2a1ff640dd63f43b9826a79fa4949b3a15da09e3c3eb517b6ac64f0763ed2cc2b3c2e8b04baec04ea6e9906edbdc3af84002fef4dff7210a01433b5bea70c
|
7
|
+
data.tar.gz: d4e7c4d9443609d922ea3adb3d664d21b3c49b5b8b278d3a46786ff33acfca330afde0f6f6746b41b58f9c9b4f7f39ef2f0518542c1b0516f7b8a461827475f3
|
data/README.md
CHANGED
@@ -77,6 +77,7 @@ Method | Behaviour
|
|
77
77
|
|
78
78
|
#### Compel#any
|
79
79
|
`Any` referes to any type that is available to coerce with Compel.
|
80
|
+
Methods `length`, `min_length` and `max_length` turn the object to validate into a `string` to compare the length.
|
80
81
|
|
81
82
|
**Methods**:
|
82
83
|
- `is(``value``)`
|
@@ -258,7 +259,7 @@ end
|
|
258
259
|
|
259
260
|
Add this line to your application's Gemfile:
|
260
261
|
|
261
|
-
gem 'compel', '~> 0.3.
|
262
|
+
gem 'compel', '~> 0.3.5'
|
262
263
|
|
263
264
|
And then execute:
|
264
265
|
|
data/lib/compel/builder/hash.rb
CHANGED
@@ -9,11 +9,29 @@ module Compel
|
|
9
9
|
options[:keys] = {}
|
10
10
|
end
|
11
11
|
|
12
|
-
def keys(
|
13
|
-
options[:keys] =
|
12
|
+
def keys(object)
|
13
|
+
options[:keys] = coerce_keys_schemas(object)
|
14
14
|
self
|
15
15
|
end
|
16
16
|
|
17
|
+
private
|
18
|
+
|
19
|
+
def coerce_keys_schemas(object)
|
20
|
+
begin
|
21
|
+
fail if object.nil?
|
22
|
+
|
23
|
+
Coercion.coerce!(object, Coercion::Hash)
|
24
|
+
rescue
|
25
|
+
raise TypeError, 'Builder::Hash keys must be an Hash'
|
26
|
+
end
|
27
|
+
|
28
|
+
unless object.values.all?{|value| value.is_a?(Builder::Schema) }
|
29
|
+
raise TypeError, 'All Builder::Hash keys must be a valid Schema'
|
30
|
+
end
|
31
|
+
|
32
|
+
object
|
33
|
+
end
|
34
|
+
|
17
35
|
end
|
18
36
|
|
19
37
|
end
|
@@ -91,7 +91,10 @@ module Compel
|
|
91
91
|
next
|
92
92
|
end
|
93
93
|
|
94
|
-
if
|
94
|
+
if schemas[key].type == Coercion::Hash &&
|
95
|
+
(schemas[key].required? ||
|
96
|
+
!input[key].nil?)
|
97
|
+
|
95
98
|
hash_validator = HashValidator.validate(input[key], schemas[key])
|
96
99
|
|
97
100
|
errors.add(key, hash_validator.errors)
|
data/lib/compel/version.rb
CHANGED
data/spec/compel/builder_spec.rb
CHANGED
@@ -13,32 +13,6 @@ describe Compel::Builder do
|
|
13
13
|
expect(builder.default_value).to be nil
|
14
14
|
end
|
15
15
|
|
16
|
-
it 'should build Schema' do
|
17
|
-
schema = Compel.hash.keys({
|
18
|
-
a: Compel.float,
|
19
|
-
b: Compel.string,
|
20
|
-
c: Compel.hash.keys({
|
21
|
-
cc: Compel.integer.length(1)
|
22
|
-
}),
|
23
|
-
d: Compel.json,
|
24
|
-
e: Compel.time,
|
25
|
-
f: Compel.datetime,
|
26
|
-
g: Compel.date,
|
27
|
-
h: Compel.integer
|
28
|
-
})
|
29
|
-
|
30
|
-
keys_schemas = schema.options[:keys]
|
31
|
-
|
32
|
-
expect(keys_schemas.a.type).to be Compel::Coercion::Float
|
33
|
-
expect(keys_schemas.b.type).to be Compel::Coercion::String
|
34
|
-
expect(keys_schemas.c.type).to be Compel::Coercion::Hash
|
35
|
-
expect(keys_schemas.d.type).to be Compel::Coercion::JSON
|
36
|
-
expect(keys_schemas.e.type).to be Compel::Coercion::Time
|
37
|
-
expect(keys_schemas.f.type).to be Compel::Coercion::DateTime
|
38
|
-
expect(keys_schemas.g.type).to be Compel::Coercion::Date
|
39
|
-
expect(keys_schemas.h.type).to be Compel::Coercion::Integer
|
40
|
-
end
|
41
|
-
|
42
16
|
context 'Builder::CommonValue' do
|
43
17
|
|
44
18
|
context '#in, #range, #min, #max' do
|
@@ -176,30 +150,208 @@ describe Compel::Builder do
|
|
176
150
|
|
177
151
|
end
|
178
152
|
|
153
|
+
context 'Hash' do
|
154
|
+
|
155
|
+
it 'should build Schema' do
|
156
|
+
schema = Compel.hash.keys({
|
157
|
+
a: Compel.float,
|
158
|
+
b: Compel.string,
|
159
|
+
c: Compel.hash.keys({
|
160
|
+
cc: Compel.integer.length(1)
|
161
|
+
}),
|
162
|
+
d: Compel.json,
|
163
|
+
e: Compel.time,
|
164
|
+
f: Compel.datetime,
|
165
|
+
g: Compel.date,
|
166
|
+
h: Compel.integer
|
167
|
+
})
|
168
|
+
|
169
|
+
keys_schemas = schema.options[:keys]
|
170
|
+
|
171
|
+
expect(keys_schemas.a.type).to be Compel::Coercion::Float
|
172
|
+
expect(keys_schemas.b.type).to be Compel::Coercion::String
|
173
|
+
expect(keys_schemas.c.type).to be Compel::Coercion::Hash
|
174
|
+
expect(keys_schemas.d.type).to be Compel::Coercion::JSON
|
175
|
+
expect(keys_schemas.e.type).to be Compel::Coercion::Time
|
176
|
+
expect(keys_schemas.f.type).to be Compel::Coercion::DateTime
|
177
|
+
expect(keys_schemas.g.type).to be Compel::Coercion::Date
|
178
|
+
expect(keys_schemas.h.type).to be Compel::Coercion::Integer
|
179
|
+
end
|
180
|
+
|
181
|
+
it 'should raise error for invalid #keys' do
|
182
|
+
expect{ Compel.hash.keys(nil) }.to \
|
183
|
+
raise_error(Compel::TypeError, 'Builder::Hash keys must be an Hash')
|
184
|
+
end
|
185
|
+
|
186
|
+
it 'should raise error for invalid #keys 1' do
|
187
|
+
expect{ Compel.hash.keys(1) }.to \
|
188
|
+
raise_error(Compel::TypeError, 'Builder::Hash keys must be an Hash')
|
189
|
+
end
|
190
|
+
|
191
|
+
it 'should raise error for invalid #keys Schema' do
|
192
|
+
expect{ Compel.hash.keys({ a: 1 }) }.to \
|
193
|
+
raise_error(Compel::TypeError, 'All Builder::Hash keys must be a valid Schema')
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
197
|
+
|
179
198
|
end
|
180
199
|
|
181
200
|
context 'Validate' do
|
182
201
|
|
183
202
|
context 'Any' do
|
184
203
|
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
204
|
+
context '#required' do
|
205
|
+
|
206
|
+
context 'invalid' do
|
207
|
+
|
208
|
+
it 'should validate a nil object' do
|
209
|
+
schema = Compel.any.required
|
210
|
+
|
211
|
+
expect(schema.validate(nil).errors).to \
|
212
|
+
include('is required')
|
213
|
+
end
|
214
|
+
|
215
|
+
end
|
216
|
+
|
217
|
+
context 'valid' do
|
218
|
+
|
219
|
+
it 'should validate nested hash object' do
|
220
|
+
schema = Compel.hash.keys({
|
221
|
+
a: Compel.any.required
|
222
|
+
});
|
223
|
+
|
224
|
+
result = schema.validate(a: { b: 1 })
|
225
|
+
|
226
|
+
expect(result.valid?).to be true
|
227
|
+
end
|
228
|
+
|
229
|
+
it 'should validate nested hash object 1' do
|
230
|
+
schema = Compel.hash.keys({
|
231
|
+
a: Compel.any.required
|
232
|
+
});
|
233
|
+
|
234
|
+
result = schema.validate(a: [])
|
235
|
+
|
236
|
+
expect(result.valid?).to be true
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'should validate nested hash object 2' do
|
240
|
+
schema = Compel.hash.keys({
|
241
|
+
a: Compel.any.required
|
242
|
+
});
|
243
|
+
|
244
|
+
result = schema.validate(a: 1)
|
245
|
+
|
246
|
+
expect(result.valid?).to be true
|
247
|
+
end
|
248
|
+
|
249
|
+
it 'should validate an array object' do
|
250
|
+
schema = Compel.any.required
|
251
|
+
|
252
|
+
result = schema.validate([1, 2])
|
253
|
+
|
254
|
+
expect(result.valid?).to be true
|
255
|
+
end
|
256
|
+
|
257
|
+
it 'should validate an array object 1' do
|
258
|
+
schema = Compel.any.required
|
259
|
+
|
260
|
+
result = schema.validate([])
|
261
|
+
|
262
|
+
expect(result.valid?).to be true
|
263
|
+
end
|
264
|
+
|
265
|
+
it 'should validate a string object' do
|
266
|
+
schema = Compel.any.required
|
267
|
+
|
268
|
+
result = schema.validate('test')
|
269
|
+
|
270
|
+
expect(result.valid?).to be true
|
271
|
+
end
|
272
|
+
|
273
|
+
end
|
189
274
|
|
190
|
-
expect(schema.validate({ a: nil }).errors.a).to \
|
191
|
-
include('is required')
|
192
275
|
end
|
193
276
|
|
194
277
|
context '#is' do
|
195
278
|
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
279
|
+
context 'invalid' do
|
280
|
+
|
281
|
+
it 'should validate an integer' do
|
282
|
+
schema = Compel.any.is(123)
|
283
|
+
|
284
|
+
expect(schema.validate(122).errors).to \
|
285
|
+
include('must be 123')
|
286
|
+
|
287
|
+
expect(schema.validate('onetwothree').errors).to \
|
288
|
+
include('must be 123')
|
289
|
+
end
|
290
|
+
|
291
|
+
it 'should validate an array' do
|
292
|
+
schema = Compel.any.is([1, 2, 3])
|
293
|
+
|
294
|
+
expect(schema.validate([1]).errors).to \
|
295
|
+
include('must be [1, 2, 3]')
|
296
|
+
|
297
|
+
expect(schema.validate([]).errors).to \
|
298
|
+
include('must be [1, 2, 3]')
|
299
|
+
end
|
300
|
+
|
301
|
+
end
|
302
|
+
|
303
|
+
context 'valid' do
|
304
|
+
|
305
|
+
it 'should validate an array' do
|
306
|
+
schema = Compel.any.is([1, 2, 3])
|
307
|
+
|
308
|
+
result = schema.validate([1, 2, 3])
|
309
|
+
|
310
|
+
expect(result.valid?).to be true
|
311
|
+
end
|
312
|
+
|
313
|
+
end
|
314
|
+
|
315
|
+
end
|
316
|
+
|
317
|
+
context '#length' do
|
318
|
+
|
319
|
+
context 'invalid' do
|
320
|
+
|
321
|
+
it 'should not validate an instance object' do
|
322
|
+
schema = Compel.any.length(1)
|
323
|
+
|
324
|
+
expect(schema.validate(OpenStruct).errors).to \
|
325
|
+
include('cannot have length different than 1')
|
326
|
+
end
|
327
|
+
|
328
|
+
it 'should not validate a constant object' do
|
329
|
+
schema = Compel.any.length(1)
|
330
|
+
|
331
|
+
expect(schema.validate(OpenStruct).errors).to \
|
332
|
+
include('cannot have length different than 1')
|
333
|
+
end
|
334
|
+
|
335
|
+
end
|
336
|
+
|
337
|
+
context 'valid' do
|
338
|
+
|
339
|
+
it 'should validate a constant object' do
|
340
|
+
schema = Compel.any.length(10)
|
341
|
+
|
342
|
+
result = schema.validate(OpenStruct)
|
343
|
+
|
344
|
+
expect(result.valid?).to be true
|
345
|
+
end
|
346
|
+
|
347
|
+
it 'should validate a constant object' do
|
348
|
+
schema = Compel.any.length(10)
|
349
|
+
|
350
|
+
result = schema.validate(OpenStruct)
|
351
|
+
|
352
|
+
expect(result.valid?).to be true
|
353
|
+
end
|
200
354
|
|
201
|
-
expect(schema.validate({ a: 122 }).errors.a).to \
|
202
|
-
include('must be 123')
|
203
355
|
end
|
204
356
|
|
205
357
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: compel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joaquim Adráz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|