schemacop 2.1.0 → 2.4.0
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 +5 -5
- data/CHANGELOG.md +58 -0
- data/LICENSE +1 -1
- data/README.md +250 -16
- data/RUBY_VERSION +1 -1
- data/Rakefile +6 -1
- data/VERSION +1 -1
- data/doc/Schemacop.html +32 -5
- data/doc/Schemacop/ArrayValidator.html +4 -4
- data/doc/Schemacop/BooleanValidator.html +4 -4
- data/doc/Schemacop/Caster.html +379 -0
- data/doc/Schemacop/Collector.html +298 -46
- data/doc/Schemacop/Exceptions.html +3 -3
- data/doc/Schemacop/Exceptions/InvalidSchemaError.html +3 -3
- data/doc/Schemacop/Exceptions/ValidationError.html +3 -3
- data/doc/Schemacop/FieldNode.html +19 -7
- data/doc/Schemacop/FloatValidator.html +4 -4
- data/doc/Schemacop/HashValidator.html +33 -7
- data/doc/Schemacop/IntegerValidator.html +4 -4
- data/doc/Schemacop/NilValidator.html +4 -4
- data/doc/Schemacop/Node.html +97 -85
- data/doc/Schemacop/NodeResolver.html +28 -12
- data/doc/Schemacop/NodeSupportingField.html +4 -4
- data/doc/Schemacop/NodeSupportingType.html +5 -7
- data/doc/Schemacop/NodeWithBlock.html +4 -4
- data/doc/Schemacop/NumberValidator.html +4 -4
- data/doc/Schemacop/ObjectValidator.html +20 -10
- data/doc/Schemacop/RootNode.html +4 -4
- data/doc/Schemacop/Schema.html +6 -6
- data/doc/Schemacop/StringValidator.html +3 -3
- data/doc/Schemacop/SymbolValidator.html +4 -4
- data/doc/ScopedEnv.html +3 -3
- data/doc/_index.html +11 -4
- data/doc/class_list.html +1 -1
- data/doc/css/style.css +10 -6
- data/doc/file.README.html +255 -29
- data/doc/frames.html +1 -1
- data/doc/index.html +255 -29
- data/doc/js/app.js +55 -0
- data/doc/method_list.html +99 -51
- data/doc/top-level-namespace.html +3 -3
- data/lib/schemacop.rb +15 -0
- data/lib/schemacop/caster.rb +38 -0
- data/lib/schemacop/collector.rb +53 -6
- data/lib/schemacop/field_node.rb +25 -3
- data/lib/schemacop/node.rb +16 -4
- data/lib/schemacop/node_resolver.rb +10 -2
- data/lib/schemacop/node_supporting_field.rb +0 -2
- data/lib/schemacop/node_supporting_type.rb +21 -1
- data/lib/schemacop/schema.rb +3 -3
- data/lib/schemacop/validator/array_validator.rb +1 -1
- data/lib/schemacop/validator/float_validator.rb +1 -1
- data/lib/schemacop/validator/hash_validator.rb +15 -2
- data/lib/schemacop/validator/integer_validator.rb +1 -1
- data/lib/schemacop/validator/object_validator.rb +7 -1
- data/schemacop.gemspec +15 -9
- data/test/casting_test.rb +90 -0
- data/test/collector_test.rb +45 -0
- data/test/custom_check_test.rb +20 -13
- data/test/custom_if_test.rb +12 -12
- data/test/defaults_test.rb +71 -0
- data/test/nil_dis_allow_test.rb +6 -6
- data/test/node_resolver_test.rb +26 -0
- data/test/short_forms_test.rb +86 -64
- data/test/test_helper.rb +7 -0
- data/test/types_test.rb +5 -5
- data/test/validator_array_test.rb +16 -16
- data/test/validator_boolean_test.rb +2 -2
- data/test/validator_float_test.rb +15 -15
- data/test/validator_hash_test.rb +5 -5
- data/test/validator_integer_test.rb +9 -9
- data/test/validator_nil_test.rb +1 -1
- data/test/validator_number_test.rb +19 -19
- data/test/validator_object_test.rb +33 -15
- data/test/validator_string_test.rb +12 -12
- data/test/validator_symbol_test.rb +2 -2
- metadata +43 -6
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Schemacop
|
4
|
+
class CastingTest < Minitest::Test
|
5
|
+
def test_basic
|
6
|
+
s = Schema.new :integer, cast: [String]
|
7
|
+
|
8
|
+
input = '42'
|
9
|
+
output = s.validate!(input)
|
10
|
+
|
11
|
+
assert_equal(42, output)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_field
|
15
|
+
s = Schema.new do
|
16
|
+
req :foo, :integer, cast: [String]
|
17
|
+
end
|
18
|
+
|
19
|
+
input = { foo: '42' }
|
20
|
+
output = s.validate!(input)
|
21
|
+
|
22
|
+
assert_equal({ foo: '42' }, input)
|
23
|
+
assert_equal({ foo: 42 }, output)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_first_type_matches
|
27
|
+
s = Schema.new do
|
28
|
+
type TrueClass
|
29
|
+
type :integer, cast: [String]
|
30
|
+
end
|
31
|
+
|
32
|
+
assert_equal(42, s.validate!('42'))
|
33
|
+
assert_equal(42, s.validate!(42))
|
34
|
+
assert_equal(true, s.validate!(true))
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_with_if
|
38
|
+
s = Schema.new do
|
39
|
+
type Float, if: proc { |data| !data.is_a?(String) || data.match(/\d+\.\d+/) }, cast: [String]
|
40
|
+
type Integer, cast: [String]
|
41
|
+
end
|
42
|
+
|
43
|
+
assert_equal 42.2, s.validate!('42.2')
|
44
|
+
assert_equal 42, s.validate!('42')
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_arrays
|
48
|
+
s = Schema.new do
|
49
|
+
req :foo, :array, :integer, cast: [String]
|
50
|
+
end
|
51
|
+
|
52
|
+
assert_equal(
|
53
|
+
{ foo: [1, 2, 3] },
|
54
|
+
s.validate!(foo: ['1', '2', '3'])
|
55
|
+
)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_check_after_cast
|
59
|
+
s = Schema.new do
|
60
|
+
type Integer, cast: [String], check: proc { |v| v > 41 }
|
61
|
+
end
|
62
|
+
|
63
|
+
assert_equal 42, s.validate!('42')
|
64
|
+
assert_equal 43, s.validate!('43')
|
65
|
+
assert_equal 42, s.validate!(42)
|
66
|
+
assert_verr { s.validate!('41') }
|
67
|
+
assert_verr { s.validate!(42.2) }
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_multilple_types
|
71
|
+
e = assert_raises Exceptions::InvalidSchemaError do
|
72
|
+
Schema.new do
|
73
|
+
type :number, cast: [String]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
assert_equal 'Casting is only allowed for single-value datatypes, '\
|
78
|
+
'but type Schemacop::NumberValidator has classes ["Integer", "Float"].',
|
79
|
+
e.message
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_custom_castings
|
83
|
+
s = Schema.new do
|
84
|
+
type :integer, cast: { String => proc { |v| Integer(v) } }
|
85
|
+
end
|
86
|
+
|
87
|
+
assert_equal 42, s.validate!('42')
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Schemacop
|
4
|
+
class CollectorTest < Minitest::Test
|
5
|
+
def test_no_root_node
|
6
|
+
s = Schema.new do
|
7
|
+
req :a, :string
|
8
|
+
end
|
9
|
+
|
10
|
+
col = s.validate(a: 0)
|
11
|
+
assert col.exceptions.first[:path].first !~ %r{^/root}, 'Root node is present in the path.'
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_correct_path
|
15
|
+
s = Schema.new do
|
16
|
+
req :long_symbol, :string
|
17
|
+
req 'long_string', :string
|
18
|
+
req 123, :string
|
19
|
+
end
|
20
|
+
|
21
|
+
col = s.validate('long_string' => 0, long_symbol: 0, 123 => 0)
|
22
|
+
|
23
|
+
symbol = col.exceptions[0]
|
24
|
+
string = col.exceptions[1]
|
25
|
+
number = col.exceptions[2]
|
26
|
+
|
27
|
+
assert symbol[:path].first =~ %r{^/long_symbol}
|
28
|
+
assert string[:path].first =~ %r{^/long_string}
|
29
|
+
assert number[:path].first =~ %r{^/123}
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_nested_paths
|
33
|
+
s = Schema.new do
|
34
|
+
req :one do
|
35
|
+
req :two, :string
|
36
|
+
end
|
37
|
+
req :three, :string
|
38
|
+
end
|
39
|
+
|
40
|
+
col = s.validate(one: { two: 0 }, three: 0)
|
41
|
+
assert_equal 2, col.exceptions[0][:path].length
|
42
|
+
assert_equal 1, col.exceptions[1][:path].length
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/test/custom_check_test.rb
CHANGED
@@ -4,22 +4,29 @@ module Schemacop
|
|
4
4
|
class CustomCheckTest < Minitest::Test
|
5
5
|
def test_integer_check_short_form
|
6
6
|
s = Schema.new :integer, check: proc { |i| i.even? }
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
assert_nothing_raised { s.validate!(2) }
|
8
|
+
assert_nothing_raised { s.validate!(-8) }
|
9
|
+
assert_nothing_raised { s.validate!(0) }
|
10
10
|
assert_verr { s.validate!(1) }
|
11
11
|
assert_verr { s.validate!(-7) }
|
12
12
|
assert_verr { s.validate!(2.1) }
|
13
13
|
end
|
14
14
|
|
15
|
+
def test_custom_error_message
|
16
|
+
s = Schema.new :integer, check: proc { |i| i.even? ? true : 'Custom error' }
|
17
|
+
assert_nothing_raised { s.validate!(2) }
|
18
|
+
exception = assert_verr { s.validate!(3) }
|
19
|
+
assert_match(/Custom :check failed: Custom error\./, exception.message)
|
20
|
+
end
|
21
|
+
|
15
22
|
def test_integer_check_with_lambda
|
16
23
|
s = Schema.new do
|
17
24
|
type :integer, check: ->(i) { i.even? }
|
18
25
|
end
|
19
26
|
|
20
|
-
|
21
|
-
|
22
|
-
|
27
|
+
assert_nothing_raised { s.validate!(2) }
|
28
|
+
assert_nothing_raised { s.validate!(-8) }
|
29
|
+
assert_nothing_raised { s.validate!(0) }
|
23
30
|
assert_verr { s.validate!(1) }
|
24
31
|
assert_verr { s.validate!(-7) }
|
25
32
|
assert_verr { s.validate!(2.1) }
|
@@ -29,7 +36,7 @@ module Schemacop
|
|
29
36
|
s = Schema.new do
|
30
37
|
type :number, check: proc { |x| x == 42 }
|
31
38
|
end
|
32
|
-
|
39
|
+
assert_nothing_raised { s.validate!(42) }
|
33
40
|
assert_verr { s.validate!(42.1) }
|
34
41
|
assert_verr { s.validate!(0) }
|
35
42
|
end
|
@@ -40,7 +47,7 @@ module Schemacop
|
|
40
47
|
type :integer
|
41
48
|
end
|
42
49
|
end
|
43
|
-
|
50
|
+
assert_nothing_raised { s.validate!([1, 2, 3]) }
|
44
51
|
assert_verr { s.validate!([2, 3, 4]) }
|
45
52
|
end
|
46
53
|
|
@@ -51,7 +58,7 @@ module Schemacop
|
|
51
58
|
end
|
52
59
|
end
|
53
60
|
|
54
|
-
|
61
|
+
assert_nothing_raised { s.validate!([4, 3, 2]) }
|
55
62
|
assert_verr { s.validate!([3, 2]) }
|
56
63
|
assert_verr { s.validate!([4, 1]) }
|
57
64
|
end
|
@@ -61,7 +68,7 @@ module Schemacop
|
|
61
68
|
opt 1, :integer
|
62
69
|
opt 'two', :string
|
63
70
|
end
|
64
|
-
|
71
|
+
assert_nothing_raised { s.validate!(1 => 1, 'two' => 'two') }
|
65
72
|
assert_verr { s.validate!(1 => 2, 'two' => 'two') }
|
66
73
|
assert_verr { s.validate!(1 => 1, 'two' => 'one') }
|
67
74
|
end
|
@@ -75,9 +82,9 @@ module Schemacop
|
|
75
82
|
req :first_name, :string, min: 3
|
76
83
|
end
|
77
84
|
|
78
|
-
|
79
|
-
|
80
|
-
|
85
|
+
assert_nothing_raised { s.validate!(first_name: 'Bob') }
|
86
|
+
assert_nothing_raised { s.validate!(first_name: 'Sandy') }
|
87
|
+
assert_nothing_raised { s.validate!(first_name: 'Sansibar') }
|
81
88
|
|
82
89
|
assert_verr { s.validate!(first_name: 'Sandkasten') }
|
83
90
|
assert_verr { s.validate!(first_name: 'a') }
|
data/test/custom_if_test.rb
CHANGED
@@ -7,7 +7,7 @@ module Schemacop
|
|
7
7
|
type :integer, if: proc { |data| data.odd? }
|
8
8
|
end
|
9
9
|
|
10
|
-
|
10
|
+
assert_nothing_raised { s.validate! 5 }
|
11
11
|
assert_verr { s.validate! nil }
|
12
12
|
assert_verr { s.validate! 4 }
|
13
13
|
end
|
@@ -18,8 +18,8 @@ module Schemacop
|
|
18
18
|
type :string
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
assert_nothing_raised { s.validate!(5) }
|
22
|
+
assert_nothing_raised { s.validate!('abc') }
|
23
23
|
assert_verr { s.validate!(4) }
|
24
24
|
end
|
25
25
|
|
@@ -29,8 +29,8 @@ module Schemacop
|
|
29
29
|
req :foo, :string, min: 5
|
30
30
|
end
|
31
31
|
|
32
|
-
|
33
|
-
|
32
|
+
assert_nothing_raised { s.validate!(foo: 'abc') }
|
33
|
+
assert_nothing_raised { s.validate!(foo: 'bcdef') }
|
34
34
|
assert_verr { s.validate!(foo: 'a') }
|
35
35
|
assert_verr { s.validate!(foo: 'bcde') }
|
36
36
|
end
|
@@ -41,8 +41,8 @@ module Schemacop
|
|
41
41
|
req :foo, :integer
|
42
42
|
end
|
43
43
|
|
44
|
-
|
45
|
-
|
44
|
+
assert_nothing_raised { s.validate!(foo: 3) }
|
45
|
+
assert_nothing_raised { s.validate!(foo: 'abc') }
|
46
46
|
assert_verr { s.validate!(foo: 'bcd') }
|
47
47
|
assert_verr { s.validate!(foo: true) }
|
48
48
|
end
|
@@ -61,8 +61,8 @@ module Schemacop
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
|
65
|
-
|
64
|
+
assert_nothing_raised { s.validate!(user: [{ admin: true, admin_only: 'foo' }, { admin: false, non_admin_only: 'foo' }]) }
|
65
|
+
assert_nothing_raised { s.validate!(user: [{ admin: true, admin_only: 'foo' }, { non_admin_only: 'foo' }]) }
|
66
66
|
assert_verr { s.validate!(user: [{ admin: false, admin_only: 'foo' }]) }
|
67
67
|
assert_verr { s.validate!(user: [{ admin: true, non_admin_only: 'foo' }]) }
|
68
68
|
end
|
@@ -75,8 +75,8 @@ module Schemacop
|
|
75
75
|
req :bar, :integer
|
76
76
|
end
|
77
77
|
|
78
|
-
|
79
|
-
|
78
|
+
assert_nothing_raised { s.validate!(foo: 5, bar: 5) }
|
79
|
+
assert_nothing_raised { s.validate!(foo: 5, bar: 4) }
|
80
80
|
assert_verr { s.validate!(foo: 4, bar: 5) }
|
81
81
|
assert_verr { s.validate!(foo: 4, bar: 4) }
|
82
82
|
end
|
@@ -87,7 +87,7 @@ module Schemacop
|
|
87
87
|
opt :foo, :integer
|
88
88
|
end
|
89
89
|
|
90
|
-
|
90
|
+
assert_nothing_raised { s.validate!(foo: 4) }
|
91
91
|
assert_verr { s.validate!({}) }
|
92
92
|
assert_verr { s.validate!('something') }
|
93
93
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Schemacop
|
4
|
+
class DefaultsTest < Minitest::Test
|
5
|
+
def test_basic
|
6
|
+
s = Schema.new :integer, default: 42
|
7
|
+
|
8
|
+
input = nil
|
9
|
+
output = s.validate!(input)
|
10
|
+
|
11
|
+
assert_equal(42, output)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_hash
|
15
|
+
s = Schema.new do
|
16
|
+
opt :foo, :string, default: 'bar'
|
17
|
+
end
|
18
|
+
|
19
|
+
input = { foo: nil }
|
20
|
+
output = s.validate!(input)
|
21
|
+
assert_equal({ foo: 'bar'}, output)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_missing_hash_key
|
25
|
+
s = Schema.new do
|
26
|
+
opt :foo, :string, default: 'bar'
|
27
|
+
end
|
28
|
+
|
29
|
+
input = {}
|
30
|
+
output = s.validate!(input)
|
31
|
+
assert_equal({ foo: 'bar'}, output)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_entire_hash
|
35
|
+
s = Schema.new do
|
36
|
+
opt :foo, :hash, default: { name: { first: 'Foo', last: 'Bar' } } do
|
37
|
+
req :name do
|
38
|
+
req :first
|
39
|
+
req :last
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
input = {}
|
45
|
+
output = s.validate!(input)
|
46
|
+
assert_equal({ foo: { name: { first: 'Foo', last: 'Bar' } } }, output)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_entire_array
|
50
|
+
s = Schema.new do
|
51
|
+
opt :foo, :array, default: [{ bar: 42}] do
|
52
|
+
req :bar
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
input = {}
|
57
|
+
output = s.validate!(input)
|
58
|
+
assert_equal({ foo: [{ bar: 42 }] }, output)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_invalid_default
|
62
|
+
s = Schema.new :integer, default: '42'
|
63
|
+
|
64
|
+
input = nil
|
65
|
+
|
66
|
+
assert_verr do
|
67
|
+
s.validate!(input)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/test/nil_dis_allow_test.rb
CHANGED
@@ -14,8 +14,8 @@ module Schemacop
|
|
14
14
|
type :boolean
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
18
|
-
|
17
|
+
assert_nothing_raised { s.validate!(o: nil, r: false) }
|
18
|
+
assert_nothing_raised { s.validate!(o: false, r: false) }
|
19
19
|
assert_verr { s.validate!(o: true, r: nil) }
|
20
20
|
assert_verr { s.validate!(o: nil, r: nil) }
|
21
21
|
assert_verr { s.validate!(r: true) }
|
@@ -30,10 +30,10 @@ module Schemacop
|
|
30
30
|
type :boolean
|
31
31
|
end
|
32
32
|
end
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
assert_nothing_raised { s.validate!(o: nil, r: false) }
|
34
|
+
assert_nothing_raised { s.validate!(o: false, r: false) }
|
35
|
+
assert_nothing_raised { s.validate!(r: true) }
|
36
|
+
assert_nothing_raised { s.validate!({}) }
|
37
37
|
assert_verr { s.validate!(o: true, r: nil) }
|
38
38
|
assert_verr { s.validate!(o: nil, r: nil) }
|
39
39
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Schemacop
|
4
|
+
class NodeResolverTest < Minitest::Test
|
5
|
+
class ClassA; end
|
6
|
+
class ClassB; end
|
7
|
+
class ClassC; end
|
8
|
+
class ClassD; end
|
9
|
+
|
10
|
+
def test_insert_before
|
11
|
+
prev_node_classes = NodeResolver.node_classes
|
12
|
+
|
13
|
+
NodeResolver.node_classes = []
|
14
|
+
|
15
|
+
NodeResolver.register(ClassA)
|
16
|
+
NodeResolver.register(ClassB)
|
17
|
+
NodeResolver.register(ClassC)
|
18
|
+
NodeResolver.register(ClassD, before: ClassB)
|
19
|
+
|
20
|
+
assert_equal [ClassA, ClassD, ClassB, ClassC],
|
21
|
+
NodeResolver.node_classes
|
22
|
+
ensure
|
23
|
+
NodeResolver.node_classes = prev_node_classes
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/test/short_forms_test.rb
CHANGED
@@ -2,6 +2,9 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module Schemacop
|
4
4
|
class ShortFormsTest < Minitest::Test
|
5
|
+
class User; end
|
6
|
+
class Group; end
|
7
|
+
|
5
8
|
def test_constructor_defaults_to_hash
|
6
9
|
s = Schema.new do
|
7
10
|
req! :r do
|
@@ -12,8 +15,8 @@ module Schemacop
|
|
12
15
|
end
|
13
16
|
end
|
14
17
|
|
15
|
-
|
16
|
-
|
18
|
+
assert_nothing_raised { s.validate!(r: 3) }
|
19
|
+
assert_nothing_raised { s.validate!(r: 3, o: 1) }
|
17
20
|
assert_verr { s.validate!(o: 1) }
|
18
21
|
assert_verr { s.validate!(1) }
|
19
22
|
assert_verr { s.validate!(r: 3, n: 5) }
|
@@ -27,8 +30,8 @@ module Schemacop
|
|
27
30
|
end
|
28
31
|
end
|
29
32
|
|
30
|
-
|
31
|
-
|
33
|
+
assert_nothing_raised { s.validate!(r: 3) }
|
34
|
+
assert_nothing_raised { s.validate!(r: 'asd', o: self) }
|
32
35
|
assert_verr { s.validate!(o: -5.3) }
|
33
36
|
assert_verr { s.validate!(Class) }
|
34
37
|
assert_verr { s.validate!(r: s, n: true) }
|
@@ -42,8 +45,8 @@ module Schemacop
|
|
42
45
|
end
|
43
46
|
end
|
44
47
|
|
45
|
-
|
46
|
-
|
48
|
+
assert_nothing_raised { s.validate!(i: 5) }
|
49
|
+
assert_nothing_raised { s.validate!(i: 5, f: 2.3) }
|
47
50
|
assert_verr { s.validate!(i: 4, f: 2.3) }
|
48
51
|
assert_verr { s.validate!(i: 5, f: 2.2) }
|
49
52
|
assert_verr { s.validate!(i: 5, f: 3.4) }
|
@@ -54,7 +57,7 @@ module Schemacop
|
|
54
57
|
|
55
58
|
def test_inline_type_in_constructor
|
56
59
|
s = Schema.new :integer, min: 2, max: 4
|
57
|
-
|
60
|
+
assert_nothing_raised { s.validate!(3) }
|
58
61
|
assert_verr { s.validate!(5) }
|
59
62
|
assert_verr { s.validate!(1) }
|
60
63
|
end
|
@@ -66,9 +69,9 @@ module Schemacop
|
|
66
69
|
opt! :optint, :integer, min: 2, max: 3
|
67
70
|
end
|
68
71
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
+
assert_nothing_raised { s.validate!(nilbool: nil, nilint: nil) }
|
73
|
+
assert_nothing_raised { s.validate!(nilbool: false, nilint: 2) }
|
74
|
+
assert_nothing_raised { s.validate!(nilbool: false, nilint: 3, optint: 2) }
|
72
75
|
assert_verr { s.validate!(nilbool: false, nilint: 2, optint: nil) }
|
73
76
|
assert_verr { s.validate!(nilbool: false, nilint: 2, optint: 4) }
|
74
77
|
assert_verr { s.validate!(nilbool: false, nilint: -5, optint: 2) }
|
@@ -78,7 +81,7 @@ module Schemacop
|
|
78
81
|
s = Schema.new do
|
79
82
|
type(:array, :string)
|
80
83
|
end
|
81
|
-
|
84
|
+
assert_nothing_raised { s.validate!(%w(a b)) }
|
82
85
|
end
|
83
86
|
|
84
87
|
# TODO: Get the exception message into the assertion
|
@@ -94,10 +97,10 @@ module Schemacop
|
|
94
97
|
s = Schema.new do
|
95
98
|
type(:array, [:array, :integer])
|
96
99
|
end
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
100
|
+
assert_nothing_raised { s.validate! [[], 3] }
|
101
|
+
assert_nothing_raised { s.validate! [[:a, 9], 3] }
|
102
|
+
assert_nothing_raised { s.validate! [[]] }
|
103
|
+
assert_nothing_raised { s.validate! [3] }
|
101
104
|
assert_verr { s.validate! [[], 'string'] }
|
102
105
|
assert_verr { s.validate! [3, 'string'] }
|
103
106
|
assert_verr { s.validate! ['string'] }
|
@@ -116,7 +119,7 @@ module Schemacop
|
|
116
119
|
s = Schema.new do
|
117
120
|
type :array, :integer
|
118
121
|
end
|
119
|
-
|
122
|
+
assert_nothing_raised { s.validate! [5] }
|
120
123
|
assert_verr { s.validate! [nil] }
|
121
124
|
assert_verr { s.validate! ['a'] }
|
122
125
|
assert_verr { s.validate! [5, 'a'] }
|
@@ -127,7 +130,7 @@ module Schemacop
|
|
127
130
|
s = Schema.new do
|
128
131
|
type :array, :array, :integer
|
129
132
|
end
|
130
|
-
|
133
|
+
assert_nothing_raised { s.validate! [[5]] }
|
131
134
|
assert_verr { s.validate! [5] }
|
132
135
|
assert_verr { s.validate! [[nil]] }
|
133
136
|
assert_verr { s.validate! [['a']] }
|
@@ -142,6 +145,7 @@ module Schemacop
|
|
142
145
|
end
|
143
146
|
req :name, :integer, min: 5, max: 7
|
144
147
|
req :id, [:integer, :string]
|
148
|
+
req :callback, :symbol
|
145
149
|
req :attrs do
|
146
150
|
req :color do
|
147
151
|
type :integer
|
@@ -156,21 +160,24 @@ module Schemacop
|
|
156
160
|
end
|
157
161
|
end
|
158
162
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
163
|
+
assert_nothing_raised do
|
164
|
+
s.validate!(
|
165
|
+
name: 6,
|
166
|
+
foo: { bar: nil },
|
167
|
+
attrs: { color: 5 },
|
168
|
+
id: 'hallo',
|
169
|
+
callback: :funky_function,
|
170
|
+
colors: [5, 'sdf'],
|
171
|
+
cars: [
|
172
|
+
{
|
173
|
+
make: 'Tesla',
|
174
|
+
ps: 5,
|
175
|
+
electric: nil,
|
176
|
+
years: [1993, 1990]
|
177
|
+
}
|
178
|
+
]
|
179
|
+
)
|
180
|
+
end
|
174
181
|
end
|
175
182
|
|
176
183
|
def test_super_deep_wild_should_pass
|
@@ -205,25 +212,27 @@ module Schemacop
|
|
205
212
|
type :integer, min: 3
|
206
213
|
end
|
207
214
|
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
[
|
219
|
-
|
220
|
-
|
215
|
+
assert_nothing_raised do
|
216
|
+
s.validate!(
|
217
|
+
id: 'meine ID',
|
218
|
+
friends: [
|
219
|
+
'Rodney',
|
220
|
+
true,
|
221
|
+
false,
|
222
|
+
{
|
223
|
+
rod: {
|
224
|
+
fritz:
|
225
|
+
[
|
226
|
+
[1],
|
227
|
+
[3]
|
228
|
+
]
|
229
|
+
}
|
221
230
|
}
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
231
|
+
]
|
232
|
+
)
|
233
|
+
end
|
234
|
+
assert_nothing_raised { s.validate!(id: 'my ID', friends: nil) }
|
235
|
+
assert_nothing_raised { s.validate!(3) }
|
227
236
|
end
|
228
237
|
|
229
238
|
def test_example_from_readme
|
@@ -239,12 +248,14 @@ module Schemacop
|
|
239
248
|
end
|
240
249
|
end
|
241
250
|
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
251
|
+
assert_nothing_raised do
|
252
|
+
schema.validate!(
|
253
|
+
naming: { first_name: 'John',
|
254
|
+
last_name: 'Doe' },
|
255
|
+
age: 34,
|
256
|
+
password: 'my*pass'
|
257
|
+
)
|
258
|
+
end
|
248
259
|
|
249
260
|
assert_verr do
|
250
261
|
schema.validate!(
|
@@ -254,6 +265,7 @@ module Schemacop
|
|
254
265
|
password: 'my*pass'
|
255
266
|
)
|
256
267
|
end
|
268
|
+
|
257
269
|
assert_verr do
|
258
270
|
schema.validate!(
|
259
271
|
naming: { first_name: 'John',
|
@@ -272,8 +284,8 @@ module Schemacop
|
|
272
284
|
req :description, :string, min: 35
|
273
285
|
end
|
274
286
|
|
275
|
-
|
276
|
-
|
287
|
+
assert_nothing_raised { schema2.validate!(description: 'Abstract: a short description') }
|
288
|
+
assert_nothing_raised { schema2.validate!(description: 'Since this is no abstract, we expect it to be longer.') }
|
277
289
|
assert_verr { schema2.validate!(description: 'Abstract: A short description.') }
|
278
290
|
assert_verr { schema2.validate!(description: 'Abstract: This is gonna be way way too long for an abstract.') }
|
279
291
|
assert_verr { schema2.validate!(description: 'This is too short.') }
|
@@ -283,16 +295,16 @@ module Schemacop
|
|
283
295
|
s = Schema.new do
|
284
296
|
type :array, :integer, min: 3
|
285
297
|
end
|
286
|
-
|
287
|
-
|
298
|
+
assert_nothing_raised { s.validate!([3]) }
|
299
|
+
assert_nothing_raised { s.validate!([3, 4, 5]) }
|
288
300
|
assert_verr { s.validate!([3, 2]) }
|
289
301
|
assert_verr { s.validate!([5, 'string']) }
|
290
302
|
end
|
291
303
|
|
292
304
|
def test_one_line_array_schema
|
293
305
|
s = Schema.new :array, :integer, min: 3
|
294
|
-
|
295
|
-
|
306
|
+
assert_nothing_raised { s.validate!([3]) }
|
307
|
+
assert_nothing_raised { s.validate!([3, 4, 5]) }
|
296
308
|
assert_verr { s.validate!([3, 2]) }
|
297
309
|
assert_verr { s.validate!([5, 'string']) }
|
298
310
|
end
|
@@ -301,16 +313,26 @@ module Schemacop
|
|
301
313
|
s = Schema.new do
|
302
314
|
req :bar
|
303
315
|
end
|
304
|
-
|
316
|
+
assert_nothing_raised { s.validate!(bar: 2) }
|
305
317
|
assert_verr { s.validate!(foo: 2) }
|
306
318
|
assert_verr { s.validate!([2]) }
|
307
319
|
end
|
308
320
|
|
309
321
|
def test_one_line_string_schema
|
310
322
|
s = Schema.new :string, min: 4
|
311
|
-
|
323
|
+
assert_nothing_raised { s.validate!('1234') }
|
312
324
|
assert_verr { s.validate!('123') }
|
313
325
|
assert_verr { s.validate!(string: '1234') }
|
314
326
|
end
|
327
|
+
|
328
|
+
def test_inline_objects
|
329
|
+
s = Schema.new do
|
330
|
+
req :user, User
|
331
|
+
req :group, Group
|
332
|
+
end
|
333
|
+
|
334
|
+
assert_nothing_raised { s.validate!(user: User.new, group: Group.new) }
|
335
|
+
assert_verr { s.validate!(user: Group.new, group: User.new) }
|
336
|
+
end
|
315
337
|
end
|
316
338
|
end
|