schemacop 3.0.6 → 3.0.11
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/.releaser_config +1 -0
- data/CHANGELOG.md +24 -0
- data/README_V3.md +196 -36
- data/VERSION +1 -1
- data/lib/schemacop/v3/boolean_node.rb +4 -0
- data/lib/schemacop/v3/node.rb +9 -7
- data/lib/schemacop/v3/numeric_node.rb +1 -1
- data/lib/schemacop/v3/object_node.rb +0 -5
- data/lib/schemacop/v3/one_of_node.rb +23 -1
- data/lib/schemacop/v3/reference_node.rb +5 -1
- data/lib/schemacop/v3/string_node.rb +8 -2
- data/lib/schemacop/v3/symbol_node.rb +4 -0
- data/schemacop.gemspec +17 -29
- data/test/lib/test_helper.rb +3 -1
- data/test/unit/schemacop/v3/any_of_node_test.rb +2 -2
- data/test/unit/schemacop/v3/array_node_test.rb +19 -17
- data/test/unit/schemacop/v3/boolean_node_test.rb +54 -7
- data/test/unit/schemacop/v3/hash_node_test.rb +49 -11
- data/test/unit/schemacop/v3/integer_node_test.rb +49 -14
- data/test/unit/schemacop/v3/node_test.rb +10 -0
- data/test/unit/schemacop/v3/number_node_test.rb +43 -9
- data/test/unit/schemacop/v3/object_node_test.rb +21 -8
- data/test/unit/schemacop/v3/one_of_node_test.rb +12 -0
- data/test/unit/schemacop/v3/reference_node_test.rb +4 -4
- data/test/unit/schemacop/v3/string_node_test.rb +60 -11
- data/test/unit/schemacop/v3/symbol_node_test.rb +23 -6
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40958dccae4c661f133f181907cc729c0002ca02702a6675c1beb1c90fed425e
|
4
|
+
data.tar.gz: 4ef5dcf205bd5f5cc8203867e95d07ff5a56a8c4654f3eac89e90596cb9a2e39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1af517385c88340f64067895363b6e79d2ce15e00415ef5d0110200706b2e264701e6a0eeac9332e2ea8d9c5967989e8e05a9e311291a1e942d1effc5cc15219
|
7
|
+
data.tar.gz: c773bd33014ae3a8ccb4f1cd22c2066b375de678fdde702d2d95dcbc78880bd6d19940bb06b8052b06f955bc740834b7761f5c389d21bec56250ee18a4680ce6
|
data/.releaser_config
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,29 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
## 3.0.11 (2021-03-26)
|
4
|
+
|
5
|
+
* Treat blank string as nil when using `cast_str` option
|
6
|
+
|
7
|
+
## 3.0.10 (2021-03-19)
|
8
|
+
|
9
|
+
* If wrong type is given, report class of wrong type in error message
|
10
|
+
|
11
|
+
## 3.0.9 (2021-02-26)
|
12
|
+
|
13
|
+
* Fix casting of blank strings
|
14
|
+
|
15
|
+
* Add `allow_blank` option to `String` nodes
|
16
|
+
|
17
|
+
## 3.0.8 (2021-02-23)
|
18
|
+
|
19
|
+
* Fix `object` nodes in hashes with no classes
|
20
|
+
|
21
|
+
* Document `cast_str` option
|
22
|
+
|
23
|
+
## 3.0.7 (2021-02-22)
|
24
|
+
|
25
|
+
* Adapt schema definitions handling when using Swagger-standard JSON
|
26
|
+
|
3
27
|
## 3.0.6 (2021-02-14)
|
4
28
|
|
5
29
|
* Remove option `json_format` from {Schemacop::Schema3.as_json as_json} again.
|
data/README_V3.md
CHANGED
@@ -75,12 +75,12 @@ Schemacop can raise the following exceptions:
|
|
75
75
|
Example:
|
76
76
|
|
77
77
|
```ruby
|
78
|
-
schema = Schemacop::Schema3.new do
|
78
|
+
schema = Schemacop::Schema3.new :hash do
|
79
79
|
int! :foo
|
80
80
|
end
|
81
81
|
|
82
82
|
schema.validate!(foo: 'bar')
|
83
|
-
# => Schemacop::Exceptions::ValidationError: /foo: Invalid type, expected "integer".
|
83
|
+
# => Schemacop::Exceptions::ValidationError: /foo: Invalid type, got type "String", expected "integer".
|
84
84
|
```
|
85
85
|
|
86
86
|
* `Schemacop::Exceptions::InvalidSchemaError`: This exception is raised when the
|
@@ -141,7 +141,7 @@ schema = Schemacop::Schema3.new :string, enum: ['foo', 'bar', 42]
|
|
141
141
|
|
142
142
|
schema.validate!('foo') # => "foo"
|
143
143
|
schema.validate!('bar') # => "bar"
|
144
|
-
schema.validate!(42) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "string".
|
144
|
+
schema.validate!(42) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Integer", expected "string".
|
145
145
|
```
|
146
146
|
|
147
147
|
The enum will also be provided in the json output:
|
@@ -178,7 +178,7 @@ Note that the default value you use is also validated against the schema:
|
|
178
178
|
schema = Schemacop::Schema3.new :string, default: 42
|
179
179
|
|
180
180
|
schema.validate!('foo') # => "foo"
|
181
|
-
schema.validate!(nil) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "string".
|
181
|
+
schema.validate!(nil) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Integer", expected "string".
|
182
182
|
```
|
183
183
|
|
184
184
|
## Nodes
|
@@ -199,14 +199,19 @@ transformed into various types.
|
|
199
199
|
* `max_length`
|
200
200
|
Defines the (inclusive) maximum required string length
|
201
201
|
* `pattern`
|
202
|
-
Defines a (ruby) regex pattern the value will be matched against. Must be
|
203
|
-
string
|
204
|
-
|
202
|
+
Defines a (ruby) regex pattern the value will be matched against. Must be either
|
203
|
+
a string which should not be enclosed in `/` characters, or a Ruby Regexp.
|
204
|
+
The pattern should generally start with `^` and end with `$` so as to evaluate
|
205
|
+
the entire string.
|
205
206
|
* `format`
|
206
207
|
The `format` option allows for basic semantic validation on certain kinds of
|
207
208
|
string values that are commonly used. See section *formats* for more
|
208
209
|
information on the available formats. Note that strings with a format are also
|
209
210
|
**casted** into that format.
|
211
|
+
* `allow_blank`
|
212
|
+
By default, blank strings are allowed and left as they are when casted (e.g.
|
213
|
+
the string `''` is valid). If you want to disallow blank strings, set this
|
214
|
+
option to `false`.
|
210
215
|
|
211
216
|
#### Formats
|
212
217
|
|
@@ -246,6 +251,38 @@ transformed into various types.
|
|
246
251
|
|
247
252
|
#### Examples
|
248
253
|
|
254
|
+
```ruby
|
255
|
+
# Basic example
|
256
|
+
schema = Schemacop::Schema3.new :string
|
257
|
+
schema.validate!(nil) # => nil
|
258
|
+
schema.validate!('') # => ""
|
259
|
+
schema.validate!('foo') # => "foo"
|
260
|
+
schema.validate!("\n") # => "\n"
|
261
|
+
```
|
262
|
+
|
263
|
+
With the `required` option:
|
264
|
+
|
265
|
+
```ruby
|
266
|
+
# Basic example
|
267
|
+
schema = Schemacop::Schema3.new :string, required: true
|
268
|
+
schema.validate!(nil) # => Schemacop::Exceptions::ValidationError: /: Value must be given.
|
269
|
+
schema.validate!('') # => ""
|
270
|
+
schema.validate!('foo') # => "foo"
|
271
|
+
schema.validate!("\n") # => "\n"
|
272
|
+
```
|
273
|
+
|
274
|
+
With the `allow_blank` option:
|
275
|
+
|
276
|
+
```ruby
|
277
|
+
# Basic example
|
278
|
+
schema = Schemacop::Schema3.new :string, allow_blank: false
|
279
|
+
schema.validate!(nil) # => Schemacop::Exceptions::ValidationError: /: String is blank but must not be blank!
|
280
|
+
schema.validate!('') # => Schemacop::Exceptions::ValidationError: /: String is blank but must not be blank!
|
281
|
+
schema.validate!('foo') # => "foo"
|
282
|
+
schema.validate!("\n") # => Schemacop::Exceptions::ValidationError: /: String is blank but must not be blank!
|
283
|
+
```
|
284
|
+
Example of using a `format` option:
|
285
|
+
|
249
286
|
```ruby
|
250
287
|
# By using a format, string values are casted to that respective format
|
251
288
|
schema = Schemacop::Schema3.new(:string, format: :date)
|
@@ -277,6 +314,10 @@ integer can be done.
|
|
277
314
|
* `multiple_of`
|
278
315
|
The received number has to be a multiple of the given number for the validation to
|
279
316
|
pass.
|
317
|
+
* `cast_str`
|
318
|
+
When set to `true`, this node also accepts strings that can be casted to an integer, e.g.
|
319
|
+
the values `'-5'` or `'42'`. Please note that you can only validate numbers which
|
320
|
+
are in the `Integer` format. Blank strings will be treated equally as `nil`.
|
280
321
|
|
281
322
|
#### Examples
|
282
323
|
|
@@ -287,10 +328,37 @@ schema.validate!(42) # => 42
|
|
287
328
|
schema.validate!(43) # => Schemacop::Exceptions::ValidationError: /: Value must be a multiple of 2.
|
288
329
|
schema.validate!(-2) # => Schemacop::Exceptions::ValidationError: /: Value must have a minimum of 0.
|
289
330
|
schema.validate!(102) # => Schemacop::Exceptions::ValidationError: /: Value must have a maximum of 100.
|
290
|
-
schema.validate!(42.1) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "integer".
|
291
|
-
schema.validate!(4r) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "integer".
|
292
|
-
schema.validate!((4 + 0i)) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "integer".
|
293
|
-
schema.validate!(BigDecimal(5)) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "integer".
|
331
|
+
schema.validate!(42.1) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Float", expected "integer".
|
332
|
+
schema.validate!(4r) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Rational", expected "integer".
|
333
|
+
schema.validate!((4 + 0i)) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Complex", expected "integer".
|
334
|
+
schema.validate!(BigDecimal(5)) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "BigDecimal", expected "integer".
|
335
|
+
```
|
336
|
+
|
337
|
+
With `cast_str` enabled:
|
338
|
+
|
339
|
+
```ruby
|
340
|
+
# Validates that the input is an even number between 0 and 100 (inclusive)
|
341
|
+
schema = Schemacop::Schema3.new(:integer, minimum: 0, maximum: 100, multiple_of: 2, cast_str: true)
|
342
|
+
schema.validate!('42') # => 42
|
343
|
+
schema.validate!('43') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
344
|
+
schema.validate!('-2') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
345
|
+
schema.validate!('102') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
346
|
+
schema.validate!('42.1') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
347
|
+
schema.validate!('4r') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
348
|
+
schema.validate!('(4 + 0i)') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
349
|
+
schema.validate!(nil) # => nil
|
350
|
+
schema.validate!('') # => nil
|
351
|
+
```
|
352
|
+
|
353
|
+
Please note, that `nil` and blank strings are treated equally when using the `cast_str` option,
|
354
|
+
and validating a blank string will return `nil`.
|
355
|
+
If you need a value, use the `required` option:
|
356
|
+
|
357
|
+
```ruby
|
358
|
+
schema = Schemacop::Schema3.new(:integer, minimum: 0, maximum: 100, multiple_of: 2, cast_str: true, required: true)
|
359
|
+
schema.validate!('42') # => 42
|
360
|
+
schema.validate!(nil) # => Schemacop::Exceptions::ValidationError: /: Value must be given.
|
361
|
+
schema.validate!('') # => Schemacop::Exceptions::ValidationError: /: Value must be given.
|
294
362
|
```
|
295
363
|
|
296
364
|
### Number
|
@@ -327,6 +395,11 @@ With the various available options, validations on the value of the number can b
|
|
327
395
|
* `multiple_of`
|
328
396
|
The received number has to be a multiple of the given number for the validation to
|
329
397
|
pass.
|
398
|
+
* `cast_str`
|
399
|
+
When set to `true`, this node also accepts strings that can be casted to a number, e.g.
|
400
|
+
the values `'0.1'` or `'3.1415'`. Please note that you can only validate numbers which
|
401
|
+
are in the `Integer` or `Float` format, i.e. values like `'1.5r'` or `'(4 + 0i)'` will
|
402
|
+
not work. Blank strings will be treated equally as `nil`.
|
330
403
|
|
331
404
|
#### Examples
|
332
405
|
|
@@ -340,7 +413,33 @@ schema.validate!(51) # => Schemacop::Exceptions::ValidationError: /:
|
|
340
413
|
schema.validate!(42.5) # => 42.5
|
341
414
|
schema.validate!(1.5r) # => (3/2)
|
342
415
|
schema.validate!(BigDecimal(5)) # => 0.5e1
|
343
|
-
schema.validate!((4 + 0i)) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "big_decimal" or "float" or "integer" or "rational"
|
416
|
+
schema.validate!((4 + 0i)) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Complex", expected "big_decimal" or "float" or "integer" or "rational"
|
417
|
+
```
|
418
|
+
|
419
|
+
With `cast_str` enabled:
|
420
|
+
|
421
|
+
```ruby
|
422
|
+
schema = Schemacop::Schema3.new(:number, cast_str: true, minimum: 0.0, maximum: (50r), multiple_of: BigDecimal('0.5'))
|
423
|
+
schema.validate!('42') # => 42
|
424
|
+
schema.validate!('42.2') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
425
|
+
schema.validate!('-2') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
426
|
+
schema.validate!('51') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
427
|
+
schema.validate!('42.5') # => 42.5
|
428
|
+
schema.validate!('1.5r') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
429
|
+
schema.validate!('(4 + 0i)') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
430
|
+
schema.validate!(nil) # => nil
|
431
|
+
schema.validate!('') # => nil
|
432
|
+
```
|
433
|
+
|
434
|
+
Please note, that `nil` and blank strings are treated equally when using the `cast_str` option,
|
435
|
+
and validating a blank string will return `nil`.
|
436
|
+
If you need a value, use the `required` option:
|
437
|
+
|
438
|
+
```ruby
|
439
|
+
schema = Schemacop::Schema3.new(:number, cast_str: true, minimum: 0.0, maximum: (50r), multiple_of: BigDecimal('0.5'), require: true)
|
440
|
+
schema.validate!('42.5') # => 42.5
|
441
|
+
schema.validate!(nil) # => Schemacop::Exceptions::ValidationError: /: Value must be given.
|
442
|
+
schema.validate!('') # => Schemacop::Exceptions::ValidationError: /: Value must be given.
|
344
443
|
```
|
345
444
|
|
346
445
|
### Symbol
|
@@ -350,15 +449,46 @@ DSL: `sym`
|
|
350
449
|
|
351
450
|
The symbol type is used to validate elements for the Ruby `Symbol` class.
|
352
451
|
|
452
|
+
#### Options
|
453
|
+
|
454
|
+
* `cast_str`
|
455
|
+
When set to `true`, this node also accepts strings that can be casted to a symbol. Blank strings will be treated equally as `nil`.
|
456
|
+
|
353
457
|
#### Examples
|
354
458
|
|
355
459
|
```ruby
|
356
460
|
# Validates that the input is a symbol
|
357
461
|
schema = Schemacop::Schema3.new(:symbol)
|
358
|
-
schema.validate!(:foo)
|
359
|
-
schema.validate!('foo')
|
360
|
-
schema.validate!(123)
|
361
|
-
schema.validate!(false)
|
462
|
+
schema.validate!(:foo) # => :foo
|
463
|
+
schema.validate!('foo') # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "String", expected "Symbol".
|
464
|
+
schema.validate!(123) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Integer", expected "Symbol".
|
465
|
+
schema.validate!(false) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "FalseClass", expected "Symbol".
|
466
|
+
schema.validate!(:false) # => :false
|
467
|
+
```
|
468
|
+
|
469
|
+
With `cast_str` enabled:
|
470
|
+
|
471
|
+
```ruby
|
472
|
+
# Validates that the input is a symbol
|
473
|
+
schema = Schemacop::Schema3.new(:symbol, cast_str: true)
|
474
|
+
schema.validate!(':foo') # => :":foo"
|
475
|
+
schema.validate!('foo') # => :foo
|
476
|
+
schema.validate!('123') # => :"123"
|
477
|
+
schema.validate!('false') # => :false
|
478
|
+
schema.validate!(':false') # => :":false"
|
479
|
+
schema.validate!(nil) # => nil
|
480
|
+
schema.validate!('') # => nil
|
481
|
+
```
|
482
|
+
|
483
|
+
Please note, that `nil` and blank strings are treated equally when using the `cast_str` option,
|
484
|
+
and validating a blank string will return `nil`.
|
485
|
+
If you need a value, use the `required` option:
|
486
|
+
|
487
|
+
```ruby
|
488
|
+
schema = Schemacop::Schema3.new(:symbol, cast_str: true, required: true)
|
489
|
+
schema.validate!('foo') # => :foo
|
490
|
+
schema.validate!(nil) # => Schemacop::Exceptions::ValidationError: /: Value must be given.
|
491
|
+
schema.validate!('') # => Schemacop::Exceptions::ValidationError: /: Value must be given.
|
362
492
|
```
|
363
493
|
|
364
494
|
### Boolean
|
@@ -368,6 +498,12 @@ DSL: `boo`
|
|
368
498
|
|
369
499
|
The boolean type is used to validate Ruby booleans, i.e. the `TrueClass` and `FalseClass`
|
370
500
|
|
501
|
+
#### Options
|
502
|
+
|
503
|
+
* `cast_str`
|
504
|
+
When set to `true`, this node also accepts strings that can be casted to a boolean, i.e.
|
505
|
+
the values `'true'` and `'false'`. Blank strings will be treated equally as `nil`.
|
506
|
+
|
371
507
|
#### Examples
|
372
508
|
|
373
509
|
```ruby
|
@@ -375,9 +511,33 @@ The boolean type is used to validate Ruby booleans, i.e. the `TrueClass` and `Fa
|
|
375
511
|
schema = Schemacop::Schema3.new(:boolean)
|
376
512
|
schema.validate!(true) # => true
|
377
513
|
schema.validate!(false) # => false
|
378
|
-
schema.validate!(:false) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "boolean".
|
379
|
-
schema.validate!('false') # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "boolean".
|
380
|
-
schema.validate!(1234) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "boolean".
|
514
|
+
schema.validate!(:false) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Symbol", expected "boolean".
|
515
|
+
schema.validate!('false') # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "String", expected "boolean".
|
516
|
+
schema.validate!(1234) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Integer", expected "boolean".
|
517
|
+
```
|
518
|
+
|
519
|
+
With `cast_str` enabled:
|
520
|
+
|
521
|
+
```ruby
|
522
|
+
schema = Schemacop::Schema3.new(:boolean, cast_str: true)
|
523
|
+
schema.validate!(true) # => true
|
524
|
+
schema.validate!(false) # => false
|
525
|
+
schema.validate!(:false) # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
526
|
+
schema.validate!('false') # => false
|
527
|
+
schema.validate!(1234) # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
528
|
+
schema.validate!(nil) # => nil
|
529
|
+
schema.validate!('') # => nil
|
530
|
+
```
|
531
|
+
|
532
|
+
Please note, that `nil` and blank strings are treated equally when using the `cast_str` option,
|
533
|
+
and validating a blank string will return `nil`.
|
534
|
+
If you need a value, use the `required` option:
|
535
|
+
|
536
|
+
```ruby
|
537
|
+
schema = Schemacop::Schema3.new(:boolean, cast_str: true, required: true)
|
538
|
+
schema.validate!('false') # => false
|
539
|
+
schema.validate!(nil) # => Schemacop::Exceptions::ValidationError: /: Value must be given.
|
540
|
+
schema.validate!('') # => Schemacop::Exceptions::ValidationError: /: Value must be given.
|
381
541
|
```
|
382
542
|
|
383
543
|
### Array
|
@@ -420,7 +580,7 @@ end
|
|
420
580
|
|
421
581
|
schema.validate!([]) # => Schemacop::Exceptions::ValidationError: /: At least one entry must match schema {"type"=>"integer", "minimum"=>5}.
|
422
582
|
schema.validate!([1, 5]) # => [1, 5]
|
423
|
-
schema.validate!(['foo']) # => Schemacop::Exceptions::ValidationError: /[0]: Invalid type, expected "integer". /: At least one entry must match schema {"type"=>"integer", "minimum"=>5}
|
583
|
+
schema.validate!(['foo']) # => Schemacop::Exceptions::ValidationError: /[0]: Invalid type, got type "String", expected "integer". /: At least one entry must match schema {"type"=>"integer", "minimum"=>5}
|
424
584
|
```
|
425
585
|
|
426
586
|
You can also use it with the tuple validation (see below), e.g. if you want
|
@@ -461,10 +621,10 @@ schema = Schemacop::Schema3.new :array do
|
|
461
621
|
list :integer, minimum: 1, maximum: 5
|
462
622
|
end
|
463
623
|
|
464
|
-
schema.validate!([])
|
465
|
-
schema.validate!([1, 3])
|
466
|
-
schema.validate!([0, 6])
|
467
|
-
schema.validate!
|
624
|
+
schema.validate!([]) # => []
|
625
|
+
schema.validate!([1, 3]) # => [1, 3]
|
626
|
+
schema.validate!([0, 6]) # => Schemacop::Exceptions::ValidationError: /[0]: Value must have a minimum of 1. /[1]: Value must have a maximum of 5.
|
627
|
+
schema.validate!(['foo']) # => Schemacop::Exceptions::ValidationError: /[0]: Invalid type, got type "String", expected "integer".
|
468
628
|
```
|
469
629
|
|
470
630
|
You can also build more complex structures, e.g. an array containing an arbitrary
|
@@ -479,7 +639,7 @@ end
|
|
479
639
|
|
480
640
|
schema.validate!([]) # => []
|
481
641
|
schema.validate!([[1], [2, 3]]) # => [[1], [2, 3]]
|
482
|
-
schema.validate!([['foo'], [2, 3]]) # => Schemacop::Exceptions::ValidationError: /[0]/[0]: Invalid type, expected "integer".
|
642
|
+
schema.validate!([['foo'], [2, 3]]) # => Schemacop::Exceptions::ValidationError: /[0]/[0]: Invalid type, got type "String", expected "integer".
|
483
643
|
```
|
484
644
|
|
485
645
|
Please note that you can only specify *one* `list` item:
|
@@ -541,7 +701,7 @@ end
|
|
541
701
|
|
542
702
|
schema.validate!([]) # => Schemacop::Exceptions::ValidationError: /: Array has 0 items but must have exactly 2.
|
543
703
|
schema.validate!([1, 'foo']) # => [1, "foo"]
|
544
|
-
schema.validate!([1, 'foo', 'bar']) # => Schemacop::Exceptions::ValidationError: /[2]: Invalid type, expected "integer".
|
704
|
+
schema.validate!([1, 'foo', 'bar']) # => Schemacop::Exceptions::ValidationError: /[2]: Invalid type, got type "String", expected "integer".
|
545
705
|
schema.validate!([1, 'foo', 2, 3]) # => [1, "foo", 2, 3]
|
546
706
|
```
|
547
707
|
|
@@ -700,7 +860,7 @@ schema = Schemacop::Schema3.new :hash do
|
|
700
860
|
str? :foo
|
701
861
|
end
|
702
862
|
|
703
|
-
schema.validate!({foo: 1}) # => Schemacop::Exceptions::ValidationError: /foo: Invalid type, expected "string".
|
863
|
+
schema.validate!({foo: 1}) # => Schemacop::Exceptions::ValidationError: /foo: Invalid type, got type "Integer", expected "string".
|
704
864
|
schema.validate!({foo: 'bar'}) # => {"foo"=>"bar"}
|
705
865
|
```
|
706
866
|
|
@@ -784,7 +944,7 @@ end
|
|
784
944
|
|
785
945
|
schema.validate!({id: 1}) # => {"id"=>1}
|
786
946
|
schema.validate!({id: 1, foo: 'bar'}) # => {"id"=>1, "foo"=>"bar"}
|
787
|
-
schema.validate!({id: 1, foo: 42}) # => Schemacop::Exceptions::ValidationError: /foo: Invalid type, expected "string".
|
947
|
+
schema.validate!({id: 1, foo: 42}) # => Schemacop::Exceptions::ValidationError: /foo: Invalid type, got type "Integer", expected "string".
|
788
948
|
```
|
789
949
|
|
790
950
|
Using the option `property_names`, you can additionaly specify a pattern that
|
@@ -808,8 +968,8 @@ end
|
|
808
968
|
|
809
969
|
schema.validate!({}) # => {}
|
810
970
|
schema.validate!({foo: [1, 2, 3]}) # => {"foo"=>[1, 2, 3]}
|
811
|
-
schema.validate!({foo: :bar}) # => Schemacop::Exceptions::ValidationError: /foo: Invalid type, expected "array".
|
812
|
-
schema.validate!({Foo: :bar}) # => Schemacop::Exceptions::ValidationError: /: Property name :Foo does not match "^[a-z]+$". /Foo: Invalid type, expected "array".
|
971
|
+
schema.validate!({foo: :bar}) # => Schemacop::Exceptions::ValidationError: /foo: Invalid type, got type "Symbol", expected "array".
|
972
|
+
schema.validate!({Foo: :bar}) # => Schemacop::Exceptions::ValidationError: /: Property name :Foo does not match "^[a-z]+$". /Foo: Invalid type, got type "Symbol", expected "array".
|
813
973
|
```
|
814
974
|
|
815
975
|
##### Dependencies
|
@@ -883,10 +1043,10 @@ of allowed classes:
|
|
883
1043
|
schema = Schemacop::Schema3.new :object, classes: [String]
|
884
1044
|
|
885
1045
|
schema.validate!(nil) # => nil
|
886
|
-
schema.validate!(true) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "String".
|
887
|
-
schema.validate!(Object.new) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "String".
|
1046
|
+
schema.validate!(true) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "TrueClass", expected "String".
|
1047
|
+
schema.validate!(Object.new) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Object", expected "String".
|
888
1048
|
schema.validate!('foo') # => "foo"
|
889
|
-
schema.validate!('foo'.html_safe) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "String".
|
1049
|
+
schema.validate!('foo'.html_safe) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "ActiveSupport::SafeBuffer", expected "String".
|
890
1050
|
```
|
891
1051
|
|
892
1052
|
Here, the node checks if the given value is an instance of any of the given
|
@@ -898,8 +1058,8 @@ If you want to allow subclasses, you can specify this by using the `strict` opti
|
|
898
1058
|
schema = Schemacop::Schema3.new :object, classes: [String], strict: false
|
899
1059
|
|
900
1060
|
schema.validate!(nil) # => nil
|
901
|
-
schema.validate!(true) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "String".
|
902
|
-
schema.validate!(Object.new) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "String".
|
1061
|
+
schema.validate!(true) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "TrueClass", expected "String".
|
1062
|
+
schema.validate!(Object.new) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Object", expected "String".
|
903
1063
|
schema.validate!('foo') # => "foo"
|
904
1064
|
schema.validate!('foo'.html_safe) # => "foo"
|
905
1065
|
```
|
@@ -1072,7 +1232,7 @@ schema.validate!({
|
|
1072
1232
|
shipping_address: 'foo',
|
1073
1233
|
billing_address: 42
|
1074
1234
|
})
|
1075
|
-
# => Schemacop::Exceptions::ValidationError: /shipping_address: Invalid type, expected "object". /billing_address: Invalid type, expected "object".
|
1235
|
+
# => Schemacop::Exceptions::ValidationError: /shipping_address: Invalid type, got type "String", expected "object". /billing_address: Invalid type, got type "Integer", expected "object".
|
1076
1236
|
|
1077
1237
|
schema.validate!({
|
1078
1238
|
shipping_address: {
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.0.
|
1
|
+
3.0.11
|