schemacop 3.0.6 → 3.0.11
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|