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
@@ -182,6 +182,18 @@ module Schemacop
|
|
182
182
|
schema :one_of
|
183
183
|
end
|
184
184
|
end
|
185
|
+
|
186
|
+
def test_treat_blank_as_nil
|
187
|
+
schema :one_of, treat_blank_as_nil: true do
|
188
|
+
boo
|
189
|
+
str format: :boolean
|
190
|
+
end
|
191
|
+
|
192
|
+
assert_validation(nil)
|
193
|
+
assert_validation('')
|
194
|
+
assert_validation('true')
|
195
|
+
assert_validation(true)
|
196
|
+
end
|
185
197
|
end
|
186
198
|
end
|
187
199
|
end
|
@@ -26,13 +26,13 @@ module Schemacop
|
|
26
26
|
assert_validation(bar: { foo: 'String', baz: { foo: 42 } })
|
27
27
|
|
28
28
|
assert_validation(foo: 42) do
|
29
|
-
error '/foo', 'Invalid type, expected "string".'
|
29
|
+
error '/foo', 'Invalid type, got type "Integer", expected "string".'
|
30
30
|
end
|
31
31
|
assert_validation(bar: { foo: 42 }) do
|
32
|
-
error '/bar/foo', 'Invalid type, expected "string".'
|
32
|
+
error '/bar/foo', 'Invalid type, got type "Integer", expected "string".'
|
33
33
|
end
|
34
34
|
assert_validation(bar: { foo: 'String', baz: { foo: '42' } }) do
|
35
|
-
error '/bar/baz/foo', 'Invalid type, expected "integer".'
|
35
|
+
error '/bar/baz/foo', 'Invalid type, got type "String", expected "integer".'
|
36
36
|
end
|
37
37
|
|
38
38
|
assert_json({
|
@@ -306,7 +306,7 @@ module Schemacop
|
|
306
306
|
with_context context do
|
307
307
|
assert_validation(first_name: 'John', last_name: 'Doe')
|
308
308
|
assert_validation(first_name: 'John', last_name: 42) do
|
309
|
-
error '/last_name', 'Invalid type, expected "string".'
|
309
|
+
error '/last_name', 'Invalid type, got type "Integer", expected "string".'
|
310
310
|
end
|
311
311
|
end
|
312
312
|
|
@@ -3,7 +3,9 @@ require 'test_helper'
|
|
3
3
|
module Schemacop
|
4
4
|
module V3
|
5
5
|
class StringNodeTest < V3Test
|
6
|
-
|
6
|
+
def self.invalid_type_error(type)
|
7
|
+
"Invalid type, got type \"#{type}\", expected \"string\"."
|
8
|
+
end
|
7
9
|
|
8
10
|
def test_basic
|
9
11
|
schema :string
|
@@ -33,7 +35,7 @@ module Schemacop
|
|
33
35
|
assert_json(type: :string)
|
34
36
|
|
35
37
|
assert_validation 42 do
|
36
|
-
error '/',
|
38
|
+
error '/', StringNodeTest.invalid_type_error(Integer)
|
37
39
|
end
|
38
40
|
|
39
41
|
schema { str! :name }
|
@@ -41,11 +43,11 @@ module Schemacop
|
|
41
43
|
assert_json(type: :object, properties: { name: { type: :string } }, required: %i[name], additionalProperties: false)
|
42
44
|
|
43
45
|
assert_validation name: :foo do
|
44
|
-
error '/name',
|
46
|
+
error '/name', StringNodeTest.invalid_type_error(Symbol)
|
45
47
|
end
|
46
48
|
|
47
49
|
assert_validation name: 234 do
|
48
|
-
error '/name',
|
50
|
+
error '/name', StringNodeTest.invalid_type_error(Integer)
|
49
51
|
end
|
50
52
|
end
|
51
53
|
|
@@ -190,7 +192,7 @@ module Schemacop
|
|
190
192
|
assert_validation ''
|
191
193
|
|
192
194
|
assert_validation 234 do
|
193
|
-
error '/',
|
195
|
+
error '/', StringNodeTest.invalid_type_error(Integer)
|
194
196
|
end
|
195
197
|
|
196
198
|
assert_cast(nil, nil)
|
@@ -218,7 +220,7 @@ module Schemacop
|
|
218
220
|
# Integer value 42 is in the enum of allowed values, but it's not a string,
|
219
221
|
# so the validation still fails
|
220
222
|
assert_validation 42 do
|
221
|
-
error '/',
|
223
|
+
error '/', StringNodeTest.invalid_type_error(Integer)
|
222
224
|
end
|
223
225
|
end
|
224
226
|
|
@@ -278,7 +280,7 @@ module Schemacop
|
|
278
280
|
assert_validation(nil)
|
279
281
|
assert_validation('Foo')
|
280
282
|
assert_validation(5) do
|
281
|
-
error '/',
|
283
|
+
error '/', StringNodeTest.invalid_type_error(Integer)
|
282
284
|
end
|
283
285
|
|
284
286
|
assert_cast('Foo', 'Foo')
|
@@ -297,7 +299,7 @@ module Schemacop
|
|
297
299
|
assert_validation(nil)
|
298
300
|
assert_validation('123')
|
299
301
|
assert_validation(5) do
|
300
|
-
error '/',
|
302
|
+
error '/', StringNodeTest.invalid_type_error(Integer)
|
301
303
|
end
|
302
304
|
|
303
305
|
assert_cast('123', 123)
|
@@ -364,13 +366,13 @@ module Schemacop
|
|
364
366
|
# Even we put those types in the enum, they need to fail the validations,
|
365
367
|
# as they are not strings
|
366
368
|
assert_validation(1) do
|
367
|
-
error '/',
|
369
|
+
error '/', StringNodeTest.invalid_type_error(Integer)
|
368
370
|
end
|
369
371
|
assert_validation(:bar) do
|
370
|
-
error '/',
|
372
|
+
error '/', StringNodeTest.invalid_type_error(Symbol)
|
371
373
|
end
|
372
374
|
assert_validation({ qux: 42 }) do
|
373
|
-
error '/',
|
375
|
+
error '/', StringNodeTest.invalid_type_error(Hash)
|
374
376
|
end
|
375
377
|
|
376
378
|
# These need to fail validation, as they are not in the enum list
|
@@ -400,6 +402,53 @@ module Schemacop
|
|
400
402
|
]
|
401
403
|
})
|
402
404
|
end
|
405
|
+
|
406
|
+
def test_cast_empty_or_whitespace_string
|
407
|
+
schema :string
|
408
|
+
|
409
|
+
assert_cast(nil, nil)
|
410
|
+
assert_cast('', '')
|
411
|
+
assert_cast(' ', ' ')
|
412
|
+
assert_cast("\n", "\n")
|
413
|
+
assert_cast("\t", "\t")
|
414
|
+
end
|
415
|
+
|
416
|
+
def test_cast_empty_or_whitespace_string_required
|
417
|
+
schema :string, required: true
|
418
|
+
|
419
|
+
assert_validation(nil) do
|
420
|
+
error '/', 'Value must be given.'
|
421
|
+
end
|
422
|
+
|
423
|
+
assert_cast('', '')
|
424
|
+
assert_cast(' ', ' ')
|
425
|
+
assert_cast("\n", "\n")
|
426
|
+
assert_cast("\t", "\t")
|
427
|
+
end
|
428
|
+
|
429
|
+
def test_empty_or_whitespace_string_blank_not_allowed
|
430
|
+
schema :string, allow_blank: false
|
431
|
+
|
432
|
+
assert_validation(nil) do
|
433
|
+
error '/', 'String is blank but must not be blank!'
|
434
|
+
end
|
435
|
+
|
436
|
+
assert_validation('') do
|
437
|
+
error '/', 'String is blank but must not be blank!'
|
438
|
+
end
|
439
|
+
|
440
|
+
assert_validation(' ') do
|
441
|
+
error '/', 'String is blank but must not be blank!'
|
442
|
+
end
|
443
|
+
|
444
|
+
assert_validation("\n") do
|
445
|
+
error '/', 'String is blank but must not be blank!'
|
446
|
+
end
|
447
|
+
|
448
|
+
assert_validation("\t") do
|
449
|
+
error '/', 'String is blank but must not be blank!'
|
450
|
+
end
|
451
|
+
end
|
403
452
|
end
|
404
453
|
end
|
405
454
|
end
|
@@ -3,7 +3,10 @@ require 'test_helper'
|
|
3
3
|
module Schemacop
|
4
4
|
module V3
|
5
5
|
class SymbolNodeTest < V3Test
|
6
|
-
|
6
|
+
def self.invalid_type_error(type)
|
7
|
+
type = type.class unless type.class == Class
|
8
|
+
"Invalid type, got type \"#{type}\", expected \"Symbol\"."
|
9
|
+
end
|
7
10
|
|
8
11
|
def test_basic
|
9
12
|
schema :symbol
|
@@ -11,10 +14,10 @@ module Schemacop
|
|
11
14
|
assert_validation :foo
|
12
15
|
assert_validation :'n0238n)Q(hqr3hrw3'
|
13
16
|
assert_validation 42 do
|
14
|
-
error '/',
|
17
|
+
error '/', SymbolNodeTest.invalid_type_error(Integer)
|
15
18
|
end
|
16
19
|
assert_validation '42' do
|
17
|
-
error '/',
|
20
|
+
error '/', SymbolNodeTest.invalid_type_error(String)
|
18
21
|
end
|
19
22
|
assert_json({})
|
20
23
|
end
|
@@ -56,13 +59,13 @@ module Schemacop
|
|
56
59
|
# Even we put those types in the enum, they need to fail the validations,
|
57
60
|
# as they are not symbols
|
58
61
|
assert_validation('foo') do
|
59
|
-
error '/',
|
62
|
+
error '/', SymbolNodeTest.invalid_type_error(String)
|
60
63
|
end
|
61
64
|
assert_validation(1) do
|
62
|
-
error '/',
|
65
|
+
error '/', SymbolNodeTest.invalid_type_error(Integer)
|
63
66
|
end
|
64
67
|
assert_validation({ qux: 42 }) do
|
65
|
-
error '/',
|
68
|
+
error '/', SymbolNodeTest.invalid_type_error(Hash)
|
66
69
|
end
|
67
70
|
|
68
71
|
# These need to fail validation, as they are not in the enum list
|
@@ -70,6 +73,20 @@ module Schemacop
|
|
70
73
|
error '/', 'Value not included in enum [1, 2, "foo", :bar, {:qux=>42}].'
|
71
74
|
end
|
72
75
|
end
|
76
|
+
|
77
|
+
# rubocop:disable Lint/BooleanSymbol
|
78
|
+
def test_cast_str
|
79
|
+
schema :symbol, cast_str: true
|
80
|
+
|
81
|
+
assert_cast('true', :true)
|
82
|
+
assert_cast('foo', :foo)
|
83
|
+
assert_cast('1', :'1')
|
84
|
+
|
85
|
+
assert_cast(:true, :true)
|
86
|
+
assert_cast(:foo, :foo)
|
87
|
+
assert_cast(:'1', :'1')
|
88
|
+
end
|
89
|
+
# rubocop:enable Lint/BooleanSymbol
|
73
90
|
end
|
74
91
|
end
|
75
92
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schemacop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sitrox
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -164,8 +164,8 @@ dependencies:
|
|
164
164
|
- - '='
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: 0.21.2
|
167
|
-
description:
|
168
|
-
email:
|
167
|
+
description:
|
168
|
+
email:
|
169
169
|
executables: []
|
170
170
|
extensions: []
|
171
171
|
extra_rdoc_files: []
|
@@ -277,7 +277,7 @@ homepage: https://github.com/sitrox/schemacop
|
|
277
277
|
licenses:
|
278
278
|
- MIT
|
279
279
|
metadata: {}
|
280
|
-
post_install_message:
|
280
|
+
post_install_message:
|
281
281
|
rdoc_options: []
|
282
282
|
require_paths:
|
283
283
|
- lib
|
@@ -292,8 +292,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
292
292
|
- !ruby/object:Gem::Version
|
293
293
|
version: '0'
|
294
294
|
requirements: []
|
295
|
-
rubygems_version: 3.1.
|
296
|
-
signing_key:
|
295
|
+
rubygems_version: 3.1.2
|
296
|
+
signing_key:
|
297
297
|
specification_version: 4
|
298
298
|
summary: Schemacop validates ruby structures consisting of nested hashes and arrays
|
299
299
|
against simple schema definitions.
|