schemacop 3.0.5 → 3.0.10
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 +26 -6
- data/README_V3.md +144 -36
- data/VERSION +1 -1
- data/lib/schemacop/schema3.rb +2 -2
- data/lib/schemacop/v3/boolean_node.rb +4 -0
- data/lib/schemacop/v3/context.rb +1 -1
- data/lib/schemacop/v3/node.rb +4 -3
- data/lib/schemacop/v3/numeric_node.rb +1 -1
- data/lib/schemacop/v3/object_node.rb +0 -5
- 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 +24 -7
- data/test/unit/schemacop/v3/hash_node_test.rb +9 -11
- data/test/unit/schemacop/v3/integer_node_test.rb +27 -14
- data/test/unit/schemacop/v3/number_node_test.rb +40 -9
- data/test/unit/schemacop/v3/object_node_test.rb +21 -8
- 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: 8700be126ea3aced42828ce418ad665095584ba0e217eebb0cf2e42faf5b4aef
|
4
|
+
data.tar.gz: 9774973e128d64f02a06e84cfa19990b0a7b0890cf57d4fb94c0f5058337dd20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0cdd515a0d47c7d707b8418fa5f0c7e6e73375ccb28bd2552b8c5f960e0279c75fb3a89c99b4ff677069c7a75e3d2f2376645d720d0d65980688602af09e4d28
|
7
|
+
data.tar.gz: 27cb5b5b8c4c8e14601c907c443d4fd904457ad0762c31af26aabf7d75febbf49459555e19665a1e56674b05601b4a223ccc18cb12fcebf9fddd526c3ec37442
|
data/.releaser_config
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,14 +1,34 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
-
|
4
|
-
## master (unreleased)
|
3
|
+
## 3.0.10 (2021-03-19)
|
5
4
|
|
6
|
-
|
5
|
+
* If wrong type is given, report class of wrong type in error message
|
7
6
|
|
8
|
-
|
7
|
+
## 3.0.9 (2021-02-26)
|
9
8
|
|
10
|
-
|
11
|
-
|
9
|
+
* Fix casting of blank strings
|
10
|
+
|
11
|
+
* Add `allow_blank` option to `String` nodes
|
12
|
+
|
13
|
+
## 3.0.8 (2021-02-23)
|
14
|
+
|
15
|
+
* Fix `object` nodes in hashes with no classes
|
16
|
+
|
17
|
+
* Document `cast_str` option
|
18
|
+
|
19
|
+
## 3.0.7 (2021-02-22)
|
20
|
+
|
21
|
+
* Adapt schema definitions handling when using Swagger-standard JSON
|
22
|
+
|
23
|
+
## 3.0.6 (2021-02-14)
|
24
|
+
|
25
|
+
* Remove option `json_format` from {Schemacop::Schema3.as_json as_json} again.
|
26
|
+
If you need to use the swagger format, use
|
27
|
+
{Schemacop::V3::Context.with_json_format} instead.
|
28
|
+
|
29
|
+
* Rename `Schemacop::V3::Context.spawn_with` to
|
30
|
+
{Schemacop::V3::Context.with_json_format} and make keyword argument
|
31
|
+
`json_format` a positional argument.
|
12
32
|
|
13
33
|
## 3.0.5 (2021-02-14)
|
14
34
|
|
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.
|
280
321
|
|
281
322
|
#### Examples
|
282
323
|
|
@@ -287,10 +328,24 @@ 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.
|
294
349
|
```
|
295
350
|
|
296
351
|
### Number
|
@@ -327,6 +382,11 @@ With the various available options, validations on the value of the number can b
|
|
327
382
|
* `multiple_of`
|
328
383
|
The received number has to be a multiple of the given number for the validation to
|
329
384
|
pass.
|
385
|
+
* `cast_str`
|
386
|
+
When set to `true`, this node also accepts strings that can be casted to a number, e.g.
|
387
|
+
the values `'0.1'` or `'3.1415'`. Please note that you can only validate numbers which
|
388
|
+
are in the `Integer` or `Float` format, i.e. values like `'1.5r'` or `'(4 + 0i)'` will
|
389
|
+
not work.
|
330
390
|
|
331
391
|
#### Examples
|
332
392
|
|
@@ -340,7 +400,20 @@ schema.validate!(51) # => Schemacop::Exceptions::ValidationError: /:
|
|
340
400
|
schema.validate!(42.5) # => 42.5
|
341
401
|
schema.validate!(1.5r) # => (3/2)
|
342
402
|
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"
|
403
|
+
schema.validate!((4 + 0i)) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Complex", expected "big_decimal" or "float" or "integer" or "rational"
|
404
|
+
```
|
405
|
+
|
406
|
+
With `cast_str` enabled:
|
407
|
+
|
408
|
+
```ruby
|
409
|
+
schema = Schemacop::Schema3.new(:number, cast_str: true, minimum: 0.0, maximum: (50r), multiple_of: BigDecimal('0.5'))
|
410
|
+
schema.validate!('42') # => 42
|
411
|
+
schema.validate!('42.2') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
412
|
+
schema.validate!('-2') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
413
|
+
schema.validate!('51') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
414
|
+
schema.validate!('42.5') # => 42.5
|
415
|
+
schema.validate!('1.5r') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
416
|
+
schema.validate!('(4 + 0i)') # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
344
417
|
```
|
345
418
|
|
346
419
|
### Symbol
|
@@ -350,15 +423,33 @@ DSL: `sym`
|
|
350
423
|
|
351
424
|
The symbol type is used to validate elements for the Ruby `Symbol` class.
|
352
425
|
|
426
|
+
#### Options
|
427
|
+
|
428
|
+
* `cast_str`
|
429
|
+
When set to `true`, this node also accepts strings that can be casted to a symbol.
|
430
|
+
|
353
431
|
#### Examples
|
354
432
|
|
355
433
|
```ruby
|
356
434
|
# Validates that the input is a symbol
|
357
435
|
schema = Schemacop::Schema3.new(:symbol)
|
358
|
-
schema.validate!(:foo)
|
359
|
-
schema.validate!('foo')
|
360
|
-
schema.validate!(123)
|
361
|
-
schema.validate!(false)
|
436
|
+
schema.validate!(:foo) # => :foo
|
437
|
+
schema.validate!('foo') # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "String", expected "Symbol".
|
438
|
+
schema.validate!(123) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Integer", expected "Symbol".
|
439
|
+
schema.validate!(false) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "FalseClass", expected "Symbol".
|
440
|
+
schema.validate!(:false) # => :false
|
441
|
+
```
|
442
|
+
|
443
|
+
With `cast_str` enabled:
|
444
|
+
|
445
|
+
```ruby
|
446
|
+
# Validates that the input is a symbol
|
447
|
+
schema = Schemacop::Schema3.new(:symbol, cast_str: true)
|
448
|
+
schema.validate!(':foo') # => :":foo"
|
449
|
+
schema.validate!('foo') # => :foo
|
450
|
+
schema.validate!('123') # => :"123"
|
451
|
+
schema.validate!('false') # => :false
|
452
|
+
schema.validate!(':false') # => :":false"
|
362
453
|
```
|
363
454
|
|
364
455
|
### Boolean
|
@@ -368,6 +459,12 @@ DSL: `boo`
|
|
368
459
|
|
369
460
|
The boolean type is used to validate Ruby booleans, i.e. the `TrueClass` and `FalseClass`
|
370
461
|
|
462
|
+
#### Options
|
463
|
+
|
464
|
+
* `cast_str`
|
465
|
+
When set to `true`, this node also accepts strings that can be casted to a boolean, i.e.
|
466
|
+
the values `'true'` and `'false'`
|
467
|
+
|
371
468
|
#### Examples
|
372
469
|
|
373
470
|
```ruby
|
@@ -375,9 +472,20 @@ The boolean type is used to validate Ruby booleans, i.e. the `TrueClass` and `Fa
|
|
375
472
|
schema = Schemacop::Schema3.new(:boolean)
|
376
473
|
schema.validate!(true) # => true
|
377
474
|
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".
|
475
|
+
schema.validate!(:false) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Symbol", expected "boolean".
|
476
|
+
schema.validate!('false') # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "String", expected "boolean".
|
477
|
+
schema.validate!(1234) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Integer", expected "boolean".
|
478
|
+
```
|
479
|
+
|
480
|
+
With `cast_str` enabled:
|
481
|
+
|
482
|
+
```ruby
|
483
|
+
schema = Schemacop::Schema3.new(:boolean, cast_str: true)
|
484
|
+
schema.validate!(true) # => true
|
485
|
+
schema.validate!(false) # => false
|
486
|
+
schema.validate!(:false) # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
487
|
+
schema.validate!('false') # => false
|
488
|
+
schema.validate!(1234) # => Schemacop::Exceptions::ValidationError: /: Matches 0 definitions but should match exactly 1.
|
381
489
|
```
|
382
490
|
|
383
491
|
### Array
|
@@ -420,7 +528,7 @@ end
|
|
420
528
|
|
421
529
|
schema.validate!([]) # => Schemacop::Exceptions::ValidationError: /: At least one entry must match schema {"type"=>"integer", "minimum"=>5}.
|
422
530
|
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}
|
531
|
+
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
532
|
```
|
425
533
|
|
426
534
|
You can also use it with the tuple validation (see below), e.g. if you want
|
@@ -461,10 +569,10 @@ schema = Schemacop::Schema3.new :array do
|
|
461
569
|
list :integer, minimum: 1, maximum: 5
|
462
570
|
end
|
463
571
|
|
464
|
-
schema.validate!([])
|
465
|
-
schema.validate!([1, 3])
|
466
|
-
schema.validate!([0, 6])
|
467
|
-
schema.validate!
|
572
|
+
schema.validate!([]) # => []
|
573
|
+
schema.validate!([1, 3]) # => [1, 3]
|
574
|
+
schema.validate!([0, 6]) # => Schemacop::Exceptions::ValidationError: /[0]: Value must have a minimum of 1. /[1]: Value must have a maximum of 5.
|
575
|
+
schema.validate!(['foo']) # => Schemacop::Exceptions::ValidationError: /[0]: Invalid type, got type "String", expected "integer".
|
468
576
|
```
|
469
577
|
|
470
578
|
You can also build more complex structures, e.g. an array containing an arbitrary
|
@@ -479,7 +587,7 @@ end
|
|
479
587
|
|
480
588
|
schema.validate!([]) # => []
|
481
589
|
schema.validate!([[1], [2, 3]]) # => [[1], [2, 3]]
|
482
|
-
schema.validate!([['foo'], [2, 3]]) # => Schemacop::Exceptions::ValidationError: /[0]/[0]: Invalid type, expected "integer".
|
590
|
+
schema.validate!([['foo'], [2, 3]]) # => Schemacop::Exceptions::ValidationError: /[0]/[0]: Invalid type, got type "String", expected "integer".
|
483
591
|
```
|
484
592
|
|
485
593
|
Please note that you can only specify *one* `list` item:
|
@@ -541,7 +649,7 @@ end
|
|
541
649
|
|
542
650
|
schema.validate!([]) # => Schemacop::Exceptions::ValidationError: /: Array has 0 items but must have exactly 2.
|
543
651
|
schema.validate!([1, 'foo']) # => [1, "foo"]
|
544
|
-
schema.validate!([1, 'foo', 'bar']) # => Schemacop::Exceptions::ValidationError: /[2]: Invalid type, expected "integer".
|
652
|
+
schema.validate!([1, 'foo', 'bar']) # => Schemacop::Exceptions::ValidationError: /[2]: Invalid type, got type "String", expected "integer".
|
545
653
|
schema.validate!([1, 'foo', 2, 3]) # => [1, "foo", 2, 3]
|
546
654
|
```
|
547
655
|
|
@@ -700,7 +808,7 @@ schema = Schemacop::Schema3.new :hash do
|
|
700
808
|
str? :foo
|
701
809
|
end
|
702
810
|
|
703
|
-
schema.validate!({foo: 1}) # => Schemacop::Exceptions::ValidationError: /foo: Invalid type, expected "string".
|
811
|
+
schema.validate!({foo: 1}) # => Schemacop::Exceptions::ValidationError: /foo: Invalid type, got type "Integer", expected "string".
|
704
812
|
schema.validate!({foo: 'bar'}) # => {"foo"=>"bar"}
|
705
813
|
```
|
706
814
|
|
@@ -784,7 +892,7 @@ end
|
|
784
892
|
|
785
893
|
schema.validate!({id: 1}) # => {"id"=>1}
|
786
894
|
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".
|
895
|
+
schema.validate!({id: 1, foo: 42}) # => Schemacop::Exceptions::ValidationError: /foo: Invalid type, got type "Integer", expected "string".
|
788
896
|
```
|
789
897
|
|
790
898
|
Using the option `property_names`, you can additionaly specify a pattern that
|
@@ -808,8 +916,8 @@ end
|
|
808
916
|
|
809
917
|
schema.validate!({}) # => {}
|
810
918
|
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".
|
919
|
+
schema.validate!({foo: :bar}) # => Schemacop::Exceptions::ValidationError: /foo: Invalid type, got type "Symbol", expected "array".
|
920
|
+
schema.validate!({Foo: :bar}) # => Schemacop::Exceptions::ValidationError: /: Property name :Foo does not match "^[a-z]+$". /Foo: Invalid type, got type "Symbol", expected "array".
|
813
921
|
```
|
814
922
|
|
815
923
|
##### Dependencies
|
@@ -883,10 +991,10 @@ of allowed classes:
|
|
883
991
|
schema = Schemacop::Schema3.new :object, classes: [String]
|
884
992
|
|
885
993
|
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".
|
994
|
+
schema.validate!(true) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "TrueClass", expected "String".
|
995
|
+
schema.validate!(Object.new) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Object", expected "String".
|
888
996
|
schema.validate!('foo') # => "foo"
|
889
|
-
schema.validate!('foo'.html_safe) # => Schemacop::Exceptions::ValidationError: /: Invalid type, expected "String".
|
997
|
+
schema.validate!('foo'.html_safe) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "ActiveSupport::SafeBuffer", expected "String".
|
890
998
|
```
|
891
999
|
|
892
1000
|
Here, the node checks if the given value is an instance of any of the given
|
@@ -898,8 +1006,8 @@ If you want to allow subclasses, you can specify this by using the `strict` opti
|
|
898
1006
|
schema = Schemacop::Schema3.new :object, classes: [String], strict: false
|
899
1007
|
|
900
1008
|
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".
|
1009
|
+
schema.validate!(true) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "TrueClass", expected "String".
|
1010
|
+
schema.validate!(Object.new) # => Schemacop::Exceptions::ValidationError: /: Invalid type, got type "Object", expected "String".
|
903
1011
|
schema.validate!('foo') # => "foo"
|
904
1012
|
schema.validate!('foo'.html_safe) # => "foo"
|
905
1013
|
```
|
@@ -1072,7 +1180,7 @@ schema.validate!({
|
|
1072
1180
|
shipping_address: 'foo',
|
1073
1181
|
billing_address: 42
|
1074
1182
|
})
|
1075
|
-
# => Schemacop::Exceptions::ValidationError: /shipping_address: Invalid type, expected "object". /billing_address: Invalid type, expected "object".
|
1183
|
+
# => Schemacop::Exceptions::ValidationError: /shipping_address: Invalid type, got type "String", expected "object". /billing_address: Invalid type, got type "Integer", expected "object".
|
1076
1184
|
|
1077
1185
|
schema.validate!({
|
1078
1186
|
shipping_address: {
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.0.
|
1
|
+
3.0.10
|
data/lib/schemacop/schema3.rb
CHANGED
data/lib/schemacop/v3/context.rb
CHANGED
data/lib/schemacop/v3/node.rb
CHANGED
@@ -48,7 +48,7 @@ module Schemacop
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def self.allowed_options
|
51
|
-
%i[name required default description examples enum parent options
|
51
|
+
%i[name required default description examples enum parent options title as]
|
52
52
|
end
|
53
53
|
|
54
54
|
def self.dsl_methods
|
@@ -161,12 +161,13 @@ module Schemacop
|
|
161
161
|
end
|
162
162
|
|
163
163
|
def process_json(attrs, json)
|
164
|
-
if @schemas.any?
|
164
|
+
if !context.swagger_json? && @schemas.any?
|
165
165
|
json[:definitions] = {}
|
166
166
|
@schemas.each do |name, subschema|
|
167
167
|
json[:definitions][name] = subschema.as_json
|
168
168
|
end
|
169
169
|
end
|
170
|
+
|
170
171
|
attrs.each do |attr|
|
171
172
|
if options.include?(attr)
|
172
173
|
json[attr.to_s.camelize(:lower).to_sym] = options[attr]
|
@@ -205,7 +206,7 @@ module Schemacop
|
|
205
206
|
# Validate type #
|
206
207
|
if allowed_types.any? && allowed_types.keys.none? { |c| data.send(type_assertion_method, c) }
|
207
208
|
collection = allowed_types.values.map { |t| "\"#{t}\"" }.uniq.sort.join(' or ')
|
208
|
-
result.error
|
209
|
+
result.error "Invalid type, got type \"#{data.class}\", expected #{collection}."
|
209
210
|
return nil
|
210
211
|
end
|
211
212
|
|