schemacop 2.4.7 → 3.0.0.rc0

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.
Files changed (172) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.rubocop.yml +25 -1
  4. data/.travis.yml +2 -1
  5. data/CHANGELOG.md +8 -0
  6. data/README.md +41 -708
  7. data/README_V2.md +775 -0
  8. data/README_V3.md +683 -0
  9. data/Rakefile +8 -12
  10. data/VERSION +1 -1
  11. data/lib/schemacop.rb +35 -37
  12. data/lib/schemacop/base_schema.rb +37 -0
  13. data/lib/schemacop/railtie.rb +10 -0
  14. data/lib/schemacop/schema.rb +1 -60
  15. data/lib/schemacop/schema2.rb +22 -0
  16. data/lib/schemacop/schema3.rb +21 -0
  17. data/lib/schemacop/scoped_env.rb +25 -13
  18. data/lib/schemacop/v2.rb +26 -0
  19. data/lib/schemacop/{caster.rb → v2/caster.rb} +16 -2
  20. data/lib/schemacop/{collector.rb → v2/collector.rb} +5 -2
  21. data/lib/schemacop/{dupper.rb → v2/dupper.rb} +1 -1
  22. data/lib/schemacop/{field_node.rb → v2/field_node.rb} +4 -3
  23. data/lib/schemacop/v2/node.rb +142 -0
  24. data/lib/schemacop/{node_resolver.rb → v2/node_resolver.rb} +1 -1
  25. data/lib/schemacop/{node_supporting_field.rb → v2/node_supporting_field.rb} +8 -10
  26. data/lib/schemacop/{node_supporting_type.rb → v2/node_supporting_type.rb} +6 -3
  27. data/lib/schemacop/{node_with_block.rb → v2/node_with_block.rb} +3 -2
  28. data/lib/schemacop/v2/root_node.rb +6 -0
  29. data/lib/schemacop/v2/validator/array_validator.rb +32 -0
  30. data/lib/schemacop/{validator → v2/validator}/boolean_validator.rb +1 -1
  31. data/lib/schemacop/v2/validator/float_validator.rb +7 -0
  32. data/lib/schemacop/v2/validator/hash_validator.rb +37 -0
  33. data/lib/schemacop/v2/validator/integer_validator.rb +7 -0
  34. data/lib/schemacop/{validator → v2/validator}/nil_validator.rb +1 -1
  35. data/lib/schemacop/v2/validator/number_validator.rb +21 -0
  36. data/lib/schemacop/v2/validator/object_validator.rb +29 -0
  37. data/lib/schemacop/v2/validator/string_validator.rb +39 -0
  38. data/lib/schemacop/{validator → v2/validator}/symbol_validator.rb +1 -1
  39. data/lib/schemacop/v3.rb +45 -0
  40. data/lib/schemacop/v3/all_of_node.rb +27 -0
  41. data/lib/schemacop/v3/any_of_node.rb +28 -0
  42. data/lib/schemacop/v3/array_node.rb +219 -0
  43. data/lib/schemacop/v3/boolean_node.rb +16 -0
  44. data/lib/schemacop/v3/combination_node.rb +45 -0
  45. data/lib/schemacop/v3/context.rb +17 -0
  46. data/lib/schemacop/v3/dsl_scope.rb +46 -0
  47. data/lib/schemacop/v3/global_context.rb +114 -0
  48. data/lib/schemacop/v3/hash_node.rb +217 -0
  49. data/lib/schemacop/v3/integer_node.rb +13 -0
  50. data/lib/schemacop/v3/is_not_node.rb +32 -0
  51. data/lib/schemacop/v3/node.rb +214 -0
  52. data/lib/schemacop/v3/node_registry.rb +49 -0
  53. data/lib/schemacop/v3/number_node.rb +18 -0
  54. data/lib/schemacop/v3/numeric_node.rb +76 -0
  55. data/lib/schemacop/v3/object_node.rb +40 -0
  56. data/lib/schemacop/v3/one_of_node.rb +28 -0
  57. data/lib/schemacop/v3/reference_node.rb +49 -0
  58. data/lib/schemacop/v3/result.rb +58 -0
  59. data/lib/schemacop/v3/string_node.rb +124 -0
  60. data/lib/schemacop/v3/symbol_node.rb +13 -0
  61. data/schemacop.gemspec +24 -27
  62. data/test/lib/test_helper.rb +152 -0
  63. data/test/schemas/nested/group.rb +6 -0
  64. data/test/schemas/user.rb +7 -0
  65. data/test/unit/schemacop/v2/casting_test.rb +120 -0
  66. data/test/unit/schemacop/v2/collector_test.rb +47 -0
  67. data/test/unit/schemacop/v2/custom_check_test.rb +95 -0
  68. data/test/unit/schemacop/v2/custom_if_test.rb +97 -0
  69. data/test/unit/schemacop/v2/defaults_test.rb +95 -0
  70. data/test/unit/schemacop/v2/empty_test.rb +16 -0
  71. data/test/unit/schemacop/v2/nil_dis_allow_test.rb +43 -0
  72. data/test/unit/schemacop/v2/node_resolver_test.rb +28 -0
  73. data/test/unit/schemacop/v2/short_forms_test.rb +351 -0
  74. data/test/unit/schemacop/v2/types_test.rb +88 -0
  75. data/test/unit/schemacop/v2/validator_array_test.rb +99 -0
  76. data/test/unit/schemacop/v2/validator_boolean_test.rb +17 -0
  77. data/test/unit/schemacop/v2/validator_float_test.rb +59 -0
  78. data/test/unit/schemacop/v2/validator_hash_test.rb +95 -0
  79. data/test/unit/schemacop/v2/validator_integer_test.rb +48 -0
  80. data/test/unit/schemacop/v2/validator_nil_test.rb +15 -0
  81. data/test/unit/schemacop/v2/validator_number_test.rb +62 -0
  82. data/test/unit/schemacop/v2/validator_object_test.rb +141 -0
  83. data/test/unit/schemacop/v2/validator_string_test.rb +78 -0
  84. data/test/unit/schemacop/v2/validator_symbol_test.rb +18 -0
  85. data/test/unit/schemacop/v3/all_of_node_test.rb +199 -0
  86. data/test/unit/schemacop/v3/any_of_node_test.rb +218 -0
  87. data/test/unit/schemacop/v3/array_node_test.rb +805 -0
  88. data/test/unit/schemacop/v3/boolean_node_test.rb +126 -0
  89. data/test/unit/schemacop/v3/global_context_test.rb +164 -0
  90. data/test/unit/schemacop/v3/hash_node_test.rb +775 -0
  91. data/test/unit/schemacop/v3/integer_node_test.rb +323 -0
  92. data/test/unit/schemacop/v3/is_not_node_test.rb +173 -0
  93. data/test/unit/schemacop/v3/node_test.rb +148 -0
  94. data/test/unit/schemacop/v3/number_node_test.rb +292 -0
  95. data/test/unit/schemacop/v3/object_node_test.rb +170 -0
  96. data/test/unit/schemacop/v3/one_of_node_test.rb +187 -0
  97. data/test/unit/schemacop/v3/reference_node_test.rb +351 -0
  98. data/test/unit/schemacop/v3/string_node_test.rb +334 -0
  99. data/test/unit/schemacop/v3/symbol_node_test.rb +75 -0
  100. metadata +152 -145
  101. data/doc/Schemacop.html +0 -146
  102. data/doc/Schemacop/ArrayValidator.html +0 -329
  103. data/doc/Schemacop/BooleanValidator.html +0 -145
  104. data/doc/Schemacop/Caster.html +0 -379
  105. data/doc/Schemacop/Collector.html +0 -787
  106. data/doc/Schemacop/Dupper.html +0 -214
  107. data/doc/Schemacop/Exceptions.html +0 -115
  108. data/doc/Schemacop/Exceptions/InvalidSchemaError.html +0 -124
  109. data/doc/Schemacop/Exceptions/ValidationError.html +0 -124
  110. data/doc/Schemacop/FieldNode.html +0 -421
  111. data/doc/Schemacop/FloatValidator.html +0 -158
  112. data/doc/Schemacop/HashValidator.html +0 -293
  113. data/doc/Schemacop/IntegerValidator.html +0 -158
  114. data/doc/Schemacop/NilValidator.html +0 -145
  115. data/doc/Schemacop/Node.html +0 -1438
  116. data/doc/Schemacop/NodeResolver.html +0 -258
  117. data/doc/Schemacop/NodeSupportingField.html +0 -590
  118. data/doc/Schemacop/NodeSupportingType.html +0 -612
  119. data/doc/Schemacop/NodeWithBlock.html +0 -289
  120. data/doc/Schemacop/NumberValidator.html +0 -232
  121. data/doc/Schemacop/ObjectValidator.html +0 -298
  122. data/doc/Schemacop/RootNode.html +0 -171
  123. data/doc/Schemacop/Schema.html +0 -699
  124. data/doc/Schemacop/StringValidator.html +0 -295
  125. data/doc/Schemacop/SymbolValidator.html +0 -145
  126. data/doc/ScopedEnv.html +0 -351
  127. data/doc/_index.html +0 -379
  128. data/doc/class_list.html +0 -51
  129. data/doc/css/common.css +0 -1
  130. data/doc/css/full_list.css +0 -58
  131. data/doc/css/style.css +0 -496
  132. data/doc/file.README.html +0 -833
  133. data/doc/file_list.html +0 -56
  134. data/doc/frames.html +0 -17
  135. data/doc/index.html +0 -833
  136. data/doc/inheritance.graphml +0 -524
  137. data/doc/inheritance.pdf +0 -825
  138. data/doc/js/app.js +0 -303
  139. data/doc/js/full_list.js +0 -216
  140. data/doc/js/jquery.js +0 -4
  141. data/doc/method_list.html +0 -587
  142. data/doc/top-level-namespace.html +0 -112
  143. data/lib/schemacop/node.rb +0 -139
  144. data/lib/schemacop/root_node.rb +0 -4
  145. data/lib/schemacop/validator/array_validator.rb +0 -30
  146. data/lib/schemacop/validator/float_validator.rb +0 -5
  147. data/lib/schemacop/validator/hash_validator.rb +0 -35
  148. data/lib/schemacop/validator/integer_validator.rb +0 -5
  149. data/lib/schemacop/validator/number_validator.rb +0 -19
  150. data/lib/schemacop/validator/object_validator.rb +0 -27
  151. data/lib/schemacop/validator/string_validator.rb +0 -37
  152. data/test/casting_test.rb +0 -118
  153. data/test/collector_test.rb +0 -45
  154. data/test/custom_check_test.rb +0 -93
  155. data/test/custom_if_test.rb +0 -95
  156. data/test/defaults_test.rb +0 -93
  157. data/test/empty_test.rb +0 -14
  158. data/test/nil_dis_allow_test.rb +0 -41
  159. data/test/node_resolver_test.rb +0 -26
  160. data/test/short_forms_test.rb +0 -349
  161. data/test/test_helper.rb +0 -13
  162. data/test/types_test.rb +0 -84
  163. data/test/validator_array_test.rb +0 -97
  164. data/test/validator_boolean_test.rb +0 -15
  165. data/test/validator_float_test.rb +0 -57
  166. data/test/validator_hash_test.rb +0 -93
  167. data/test/validator_integer_test.rb +0 -46
  168. data/test/validator_nil_test.rb +0 -13
  169. data/test/validator_number_test.rb +0 -60
  170. data/test/validator_object_test.rb +0 -139
  171. data/test/validator_string_test.rb +0 -76
  172. data/test/validator_symbol_test.rb +0 -16
@@ -1,139 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Schemacop
4
- class ValidatorObjectTest < Minitest::Test
5
- # Classes used in the tests below
6
- class User; end
7
- class AdminUser; end
8
- class SubUser < User; end
9
-
10
- def test_basic
11
- s = Schema.new do
12
- type :object, classes: User
13
- end
14
-
15
- assert_nothing_raised { s.validate!(User.new) }
16
- assert_verr { s.validate!(SubUser.new) }
17
- assert_verr { s.validate!(AdminUser.new) }
18
- end
19
-
20
- # In modern versions of ruby, some classes such as Tempfile are not derived
21
- # from Object but from BasicObject. Before the time of writing this test,
22
- # the ObjectValidator only accepted subclasses of Object and classes like
23
- # Tempfile did not work at all. This test ensures that this is working now.
24
- def test_basic_object
25
- refute Tempfile <= Object
26
- assert Tempfile <= BasicObject
27
-
28
- s = Schema.new do
29
- type :object
30
- end
31
-
32
- assert_nothing_raised { s.validate!(Tempfile.new) }
33
-
34
- s = Schema.new do
35
- req :foo
36
- end
37
-
38
- assert_nothing_raised { s.validate!(foo: Tempfile.new) }
39
-
40
- s = Schema.new do
41
- req :foo, Tempfile
42
- end
43
-
44
- assert_nothing_raised { s.validate!(foo: Tempfile.new) }
45
- assert_verr { s.validate!(foo: Time.new) }
46
-
47
- s = Schema.new do
48
- req :foo, :object, classes: Tempfile
49
- end
50
-
51
- assert_nothing_raised { s.validate!(foo: Tempfile.new) }
52
- end
53
-
54
- def test_multiple_classes_long
55
- s = Schema.new do
56
- type :object, classes: User
57
- type :object, classes: AdminUser
58
- end
59
-
60
- assert_nothing_raised { s.validate!(User.new) }
61
- assert_nothing_raised { s.validate!(AdminUser.new) }
62
- assert_verr { s.validate!(SubUser.new) }
63
- assert_verr { s.validate!([User.new, AdminUser.new]) }
64
- end
65
-
66
- def test_multiple_classes_short
67
- s = Schema.new do
68
- type :object, classes: [User, AdminUser]
69
- end
70
-
71
- assert_nothing_raised { s.validate!(User.new) }
72
- assert_nothing_raised { s.validate!(AdminUser.new) }
73
- assert_verr { s.validate!(SubUser.new) }
74
- assert_verr { s.validate!([User.new, AdminUser.new]) }
75
- end
76
-
77
- def test_hash_of_objects
78
- s = Schema.new do
79
- req :user do
80
- type :object, classes: User
81
- end
82
- opt :multitype do
83
- type :object, classes: [User, AdminUser]
84
- end
85
- end
86
-
87
- assert_nothing_raised { s.validate!(user: User.new) }
88
- assert_nothing_raised { s.validate!(user: User.new, multitype: AdminUser.new) }
89
- assert_nothing_raised { s.validate!(user: User.new, multitype: User.new) }
90
- assert_verr { s.validate!(user: AdminUser.new) }
91
- assert_verr { s.validate!(user: User.new, multitype: 12) }
92
- assert_verr { s.validate!(user: User.new, multitype: self) }
93
- end
94
-
95
- def test_any
96
- s = Schema.new do
97
- type :object
98
- end
99
-
100
- assert_nothing_raised { s.validate!(User.new) }
101
- assert_nothing_raised { s.validate!(123) }
102
- assert_nothing_raised { s.validate!('sali') }
103
- assert_nothing_raised { s.validate!(self) }
104
- assert_nothing_raised { s.validate!(self.class) }
105
- assert_verr { s.validate!(nil) }
106
- end
107
-
108
- def test_any_in_hash
109
- s = Schema.new do
110
- req :fld do
111
- type :object
112
- end
113
- end
114
-
115
- assert_nothing_raised { s.validate!(fld: User.new) }
116
- assert_nothing_raised { s.validate!(fld: self) }
117
- assert_verr { s.validate!(fld: nil) }
118
- assert_verr { s.validate!({}) }
119
- end
120
-
121
- def test_strict_option
122
- s = Schema.new do
123
- req :o_strict do
124
- type :object, classes: User, strict: true
125
- end
126
- opt :o_ns do
127
- type :object, classes: User, strict: false
128
- end
129
- end
130
-
131
- assert_nothing_raised { s.validate!(o_strict: User.new, o_ns: User.new) }
132
- assert_nothing_raised { s.validate!(o_strict: User.new, o_ns: SubUser.new) }
133
- assert_nothing_raised { s.validate!(o_strict: User.new) }
134
- assert_verr { s.validate!(o_strict: SubUser.new) }
135
- assert_verr { s.validate!(o_strict: User.new, o_ns: AdminUser.new) }
136
- assert_verr { s.validate!(o_strict: SubUser.new, o_ns: User.new) }
137
- end
138
- end
139
- end
@@ -1,76 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Schemacop
4
- class ValidatorStringTest < Minitest::Test
5
- def test_basic
6
- s = Schema.new do
7
- type :string
8
- end
9
- assert_nothing_raised { s.validate! '' }
10
- assert_nothing_raised { s.validate! 'abc' }
11
- assert_nothing_raised { s.validate! 123.to_s }
12
- assert_nothing_raised { s.validate! inspect }
13
- end
14
-
15
- def test_option_min
16
- s = Schema.new do
17
- type :string, min: 3
18
- end
19
-
20
- assert_nothing_raised { s.validate!('abc') }
21
- assert_nothing_raised { s.validate!('abcd') }
22
- assert_verr { s.validate!('ab') }
23
- assert_verr { s.validate!('') }
24
- end
25
-
26
- def test_option_max
27
- s = Schema.new do
28
- type :string, max: 5
29
- end
30
-
31
- assert_nothing_raised { s.validate!('') }
32
- assert_nothing_raised { s.validate!('abcd') }
33
- assert_nothing_raised { s.validate!('abcde') }
34
- assert_verr { s.validate!('abcdef') }
35
- end
36
-
37
- def test_options_min_max
38
- s = Schema.new do
39
- type :string, min: 3, max: 5
40
- end
41
-
42
- assert_nothing_raised { s.validate!('abc') }
43
- assert_nothing_raised { s.validate!('abcd') }
44
- assert_nothing_raised { s.validate!('abcde') }
45
- assert_verr { s.validate!('ab') }
46
- assert_verr { s.validate!('abcdef') }
47
- assert_verr { s.validate!('') }
48
- end
49
-
50
- def test_float_options
51
- assert_raises Exceptions::InvalidSchemaError, 'String option :min must be an integer >= 0.' do
52
- Schema.new do
53
- type :string, min: 3.2
54
- end
55
- end
56
-
57
- assert_raises Exceptions::InvalidSchemaError, 'String option :max must be an integer >= 0.' do
58
- Schema.new do
59
- type :string, max: 5.2
60
- end
61
- end
62
-
63
- assert_raises Exceptions::InvalidSchemaError, 'String option :min must be an integer >= 0.' do
64
- Schema.new do
65
- type :string, min: 3.2, max: 5
66
- end
67
- end
68
-
69
- assert_raises Exceptions::InvalidSchemaError, 'String option :max must be an integer >= 0.' do
70
- Schema.new do
71
- type :string, min: 3, max: 5.2
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -1,16 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Schemacop
4
- class ValidatorSymbolTest < Minitest::Test
5
- def test_basic
6
- s = Schema.new do
7
- type :symbol
8
- end
9
-
10
- assert_nothing_raised { s.validate!(:good) }
11
- assert_nothing_raised { s.validate!('-+/'.to_sym) }
12
- assert_verr { s.validate!('bad') }
13
- assert_verr { s.validate!(456) }
14
- end
15
- end
16
- end