schemacop 2.4.5 → 3.0.0.rc2

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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.rubocop.yml +25 -1
  4. data/.travis.yml +3 -1
  5. data/CHANGELOG.md +32 -1
  6. data/README.md +53 -710
  7. data/README_V2.md +775 -0
  8. data/README_V3.md +1195 -0
  9. data/Rakefile +8 -12
  10. data/VERSION +1 -1
  11. data/lib/schemacop.rb +35 -36
  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/v2/node_supporting_field.rb +70 -0
  26. data/lib/schemacop/{node_supporting_type.rb → v2/node_supporting_type.rb} +14 -11
  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 +218 -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 +256 -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 +215 -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 +198 -0
  86. data/test/unit/schemacop/v3/any_of_node_test.rb +218 -0
  87. data/test/unit/schemacop/v3/array_node_test.rb +815 -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 +884 -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/node_supporting_field.rb +0 -58
  145. data/lib/schemacop/root_node.rb +0 -4
  146. data/lib/schemacop/validator/array_validator.rb +0 -30
  147. data/lib/schemacop/validator/float_validator.rb +0 -5
  148. data/lib/schemacop/validator/hash_validator.rb +0 -35
  149. data/lib/schemacop/validator/integer_validator.rb +0 -5
  150. data/lib/schemacop/validator/number_validator.rb +0 -19
  151. data/lib/schemacop/validator/object_validator.rb +0 -27
  152. data/lib/schemacop/validator/string_validator.rb +0 -37
  153. data/test/casting_test.rb +0 -90
  154. data/test/collector_test.rb +0 -45
  155. data/test/custom_check_test.rb +0 -93
  156. data/test/custom_if_test.rb +0 -95
  157. data/test/defaults_test.rb +0 -93
  158. data/test/empty_test.rb +0 -14
  159. data/test/nil_dis_allow_test.rb +0 -41
  160. data/test/node_resolver_test.rb +0 -26
  161. data/test/short_forms_test.rb +0 -349
  162. data/test/test_helper.rb +0 -13
  163. data/test/types_test.rb +0 -84
  164. data/test/validator_array_test.rb +0 -97
  165. data/test/validator_boolean_test.rb +0 -15
  166. data/test/validator_float_test.rb +0 -57
  167. data/test/validator_hash_test.rb +0 -93
  168. data/test/validator_integer_test.rb +0 -46
  169. data/test/validator_nil_test.rb +0 -13
  170. data/test/validator_number_test.rb +0 -60
  171. data/test/validator_object_test.rb +0 -139
  172. data/test/validator_string_test.rb +0 -76
  173. data/test/validator_symbol_test.rb +0 -16
@@ -1,14 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Schemacop
4
- class EmptyTest < Minitest::Test
5
- def test_empty_hash
6
- schema = Schema.new do
7
- type Hash
8
- end
9
-
10
- assert_nothing_raised { schema.validate!({}) }
11
- assert_verr { schema.validate!(foo: :bar) }
12
- end
13
- end
14
- end
@@ -1,41 +0,0 @@
1
- require 'test_helper'
2
-
3
- # Note: A test for req and opt is part of validator_hash_test.rb
4
-
5
- module Schemacop
6
- class NilDisAllowTest < Minitest::Test
7
- def test_req
8
- s = Schema.new do
9
- req? :o do
10
- type :boolean
11
- end
12
-
13
- req :r do
14
- type :boolean
15
- end
16
- end
17
- assert_nothing_raised { s.validate!(o: nil, r: false) }
18
- assert_nothing_raised { s.validate!(o: false, r: false) }
19
- assert_verr { s.validate!(o: true, r: nil) }
20
- assert_verr { s.validate!(o: nil, r: nil) }
21
- assert_verr { s.validate!(r: true) }
22
- end
23
-
24
- def test_opt
25
- s = Schema.new do
26
- opt :o do
27
- type :boolean
28
- end
29
- opt! :r do
30
- type :boolean
31
- end
32
- end
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
- assert_verr { s.validate!(o: true, r: nil) }
38
- assert_verr { s.validate!(o: nil, r: nil) }
39
- end
40
- end
41
- end
@@ -1,26 +0,0 @@
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
@@ -1,349 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Schemacop
4
- class ShortFormsTest < Minitest::Test
5
- class User; end
6
- class Group; end
7
-
8
- def test_untyped
9
- s = Schema.new do
10
- req :foo
11
- end
12
-
13
- assert_nothing_raised { s.validate!(foo: 3) }
14
- assert_nothing_raised { s.validate!(foo: '42') }
15
- assert_nothing_raised { s.validate!(foo: Object.new) }
16
- assert_verr { s.validate!(foo: nil) }
17
- end
18
-
19
- def test_constructor_defaults_to_hash
20
- s = Schema.new do
21
- req! :r do
22
- type :integer
23
- end
24
- opt? :o do
25
- type :integer
26
- end
27
- end
28
-
29
- assert_nothing_raised { s.validate!(r: 3) }
30
- assert_nothing_raised { s.validate!(r: 3, o: 1) }
31
- assert_verr { s.validate!(o: 1) }
32
- assert_verr { s.validate!(1) }
33
- assert_verr { s.validate!(r: 3, n: 5) }
34
- end
35
-
36
- def test_field_defaults_to_any
37
- s = Schema.new do
38
- type :hash do
39
- req :r
40
- opt :o
41
- end
42
- end
43
-
44
- assert_nothing_raised { s.validate!(r: 3) }
45
- assert_nothing_raised { s.validate!(r: 'asd', o: self) }
46
- assert_verr { s.validate!(o: -5.3) }
47
- assert_verr { s.validate!(Class) }
48
- assert_verr { s.validate!(r: s, n: true) }
49
- end
50
-
51
- def test_inline_type_with_attrs_in_hash
52
- s = Schema.new do
53
- type :hash do
54
- req :i, :integer, min: 5
55
- opt :f, :float, min: 2.3, max: 3
56
- end
57
- end
58
-
59
- assert_nothing_raised { s.validate!(i: 5) }
60
- assert_nothing_raised { s.validate!(i: 5, f: 2.3) }
61
- assert_verr { s.validate!(i: 4, f: 2.3) }
62
- assert_verr { s.validate!(i: 5, f: 2.2) }
63
- assert_verr { s.validate!(i: 5, f: 3.4) }
64
- assert_verr { s.validate!(i: 5.3) }
65
- assert_verr { s.validate!(j: 2.3) }
66
- assert_verr { s.validate!({}) }
67
- end
68
-
69
- def test_inline_type_in_constructor
70
- s = Schema.new :integer, min: 2, max: 4
71
- assert_nothing_raised { s.validate!(3) }
72
- assert_verr { s.validate!(5) }
73
- assert_verr { s.validate!(1) }
74
- end
75
-
76
- def test_mixed_field_and_type_attrs
77
- s = Schema.new do
78
- req? :nilbool, :boolean
79
- req? :nilint, :integer, min: 2, max: 3
80
- opt! :optint, :integer, min: 2, max: 3
81
- end
82
-
83
- assert_nothing_raised { s.validate!(nilbool: nil, nilint: nil) }
84
- assert_nothing_raised { s.validate!(nilbool: false, nilint: 2) }
85
- assert_nothing_raised { s.validate!(nilbool: false, nilint: 3, optint: 2) }
86
- assert_verr { s.validate!(nilbool: false, nilint: 2, optint: nil) }
87
- assert_verr { s.validate!(nilbool: false, nilint: 2, optint: 4) }
88
- assert_verr { s.validate!(nilbool: false, nilint: -5, optint: 2) }
89
- end
90
-
91
- def test_array_shortform_simple
92
- s = Schema.new do
93
- type(:array, :string)
94
- end
95
- assert_nothing_raised { s.validate!(%w(a b)) }
96
- end
97
-
98
- # TODO: Get the exception message into the assertion
99
- def test_array_shortform_invalid
100
- assert_raises Exceptions::InvalidSchemaError do
101
- Schema.new do
102
- type(:array, [:array, :integer], min: 2)
103
- end
104
- end
105
- end
106
-
107
- def test_array_shortform_advanced1
108
- s = Schema.new do
109
- type(:array, [:array, :integer])
110
- end
111
- assert_nothing_raised { s.validate! [[], 3] }
112
- assert_nothing_raised { s.validate! [[:a, 9], 3] }
113
- assert_nothing_raised { s.validate! [[]] }
114
- assert_nothing_raised { s.validate! [3] }
115
- assert_verr { s.validate! [[], 'string'] }
116
- assert_verr { s.validate! [3, 'string'] }
117
- assert_verr { s.validate! ['string'] }
118
- end
119
-
120
- def test_array_shortform_advanced2
121
- assert_raises Exceptions::InvalidSchemaError, 'No validation class found for type [:array, :integer].' do
122
- Schema.new do
123
- type([:array, [:array, :integer], :boolean])
124
- end
125
- end
126
- end
127
-
128
- # For explicit form test see types_test.rb
129
- def test_array_subtype_shortform
130
- s = Schema.new do
131
- type :array, :integer
132
- end
133
- assert_nothing_raised { s.validate! [5] }
134
- assert_verr { s.validate! [nil] }
135
- assert_verr { s.validate! ['a'] }
136
- assert_verr { s.validate! [5, 'a'] }
137
- assert_verr { s.validate! [5, nil] }
138
- end
139
-
140
- def test_array_subsubtype_shortform
141
- s = Schema.new do
142
- type :array, :array, :integer
143
- end
144
- assert_nothing_raised { s.validate! [[5]] }
145
- assert_verr { s.validate! [5] }
146
- assert_verr { s.validate! [[nil]] }
147
- assert_verr { s.validate! [['a']] }
148
- assert_verr { s.validate! [[5, 'a']] }
149
- assert_verr { s.validate! [[5, nil]] }
150
- end
151
-
152
- def test_wild_mix_should_pass
153
- s = Schema.new do
154
- req :foo do
155
- req? :bar, :object, classes: NilClass
156
- end
157
- req :name, :integer, min: 5, max: 7
158
- req :id, [:integer, :string]
159
- req :callback, :symbol
160
- req :attrs do
161
- req :color do
162
- type :integer
163
- end
164
- end
165
- req :colors, :array, [:string, :integer]
166
- req :cars, :array, :hash do
167
- req? :years, :array, :integer
168
- req! :make, :string
169
- req! :ps, :integer
170
- req? :electric, :boolean
171
- end
172
- end
173
-
174
- assert_nothing_raised do
175
- s.validate!(
176
- name: 6,
177
- foo: { bar: nil },
178
- attrs: { color: 5 },
179
- id: 'hallo',
180
- callback: :funky_function,
181
- colors: [5, 'sdf'],
182
- cars: [
183
- {
184
- make: 'Tesla',
185
- ps: 5,
186
- electric: nil,
187
- years: [1993, 1990]
188
- }
189
- ]
190
- )
191
- end
192
- end
193
-
194
- def test_super_deep_wild_should_pass
195
- s = Schema.new do
196
- type :hash do
197
- opt? :bla do
198
- type :string
199
- end
200
- req :id do
201
- type :string
202
- end
203
- req? :friends do
204
- type :array do
205
- type :string, min: 3, max: 6
206
- type :boolean
207
- type :hash do
208
- req :rod do
209
- type :hash do
210
- req :fritz do
211
- type :array, min: 2 do
212
- type :array do
213
- type :integer, min: 1
214
- end
215
- end
216
- end
217
- end
218
- end
219
- end
220
- end
221
- end
222
- end
223
- type :integer, min: 3
224
- end
225
-
226
- assert_nothing_raised do
227
- s.validate!(
228
- id: 'meine ID',
229
- friends: [
230
- 'Rodney',
231
- true,
232
- false,
233
- {
234
- rod: {
235
- fritz:
236
- [
237
- [1],
238
- [3]
239
- ]
240
- }
241
- }
242
- ]
243
- )
244
- end
245
- assert_nothing_raised { s.validate!(id: 'my ID', friends: nil) }
246
- assert_nothing_raised { s.validate!(3) }
247
- end
248
-
249
- def test_example_from_readme
250
- schema = Schema.new do
251
- req :naming, :hash do
252
- opt :first_name, :string
253
- req :last_name, :string
254
- end
255
- opt! :age, :integer, min: 18
256
- req? :password do
257
- type :string, check: proc { |pw| pw.include?('*') }
258
- type :integer
259
- end
260
- end
261
-
262
- assert_nothing_raised do
263
- schema.validate!(
264
- naming: { first_name: 'John',
265
- last_name: 'Doe' },
266
- age: 34,
267
- password: 'my*pass'
268
- )
269
- end
270
-
271
- assert_verr do
272
- schema.validate!(
273
- naming: { first_name: 'John',
274
- last_name: 'Doe' },
275
- age: 12,
276
- password: 'my*pass'
277
- )
278
- end
279
-
280
- assert_verr do
281
- schema.validate!(
282
- naming: { first_name: 'John',
283
- last_name: 'Doe' },
284
- age: 12,
285
- password: 'mypass'
286
- )
287
- end
288
-
289
- schema2 = Schema.new do
290
- req :description,
291
- :string,
292
- if: proc { |str| str.start_with?('Abstract: ') },
293
- max: 35,
294
- check: proc { |str| !str.end_with?('.') }
295
- req :description, :string, min: 35
296
- end
297
-
298
- assert_nothing_raised { schema2.validate!(description: 'Abstract: a short description') }
299
- assert_nothing_raised { schema2.validate!(description: 'Since this is no abstract, we expect it to be longer.') }
300
- assert_verr { schema2.validate!(description: 'Abstract: A short description.') }
301
- assert_verr { schema2.validate!(description: 'Abstract: This is gonna be way way too long for an abstract.') }
302
- assert_verr { schema2.validate!(description: 'This is too short.') }
303
- end
304
-
305
- def test_one_line_subtype_with_options
306
- s = Schema.new do
307
- type :array, :integer, min: 3
308
- end
309
- assert_nothing_raised { s.validate!([3]) }
310
- assert_nothing_raised { s.validate!([3, 4, 5]) }
311
- assert_verr { s.validate!([3, 2]) }
312
- assert_verr { s.validate!([5, 'string']) }
313
- end
314
-
315
- def test_one_line_array_schema
316
- s = Schema.new :array, :integer, min: 3
317
- assert_nothing_raised { s.validate!([3]) }
318
- assert_nothing_raised { s.validate!([3, 4, 5]) }
319
- assert_verr { s.validate!([3, 2]) }
320
- assert_verr { s.validate!([5, 'string']) }
321
- end
322
-
323
- def test_implicit_hash
324
- s = Schema.new do
325
- req :bar
326
- end
327
- assert_nothing_raised { s.validate!(bar: 2) }
328
- assert_verr { s.validate!(foo: 2) }
329
- assert_verr { s.validate!([2]) }
330
- end
331
-
332
- def test_one_line_string_schema
333
- s = Schema.new :string, min: 4
334
- assert_nothing_raised { s.validate!('1234') }
335
- assert_verr { s.validate!('123') }
336
- assert_verr { s.validate!(string: '1234') }
337
- end
338
-
339
- def test_inline_objects
340
- s = Schema.new do
341
- req :user, User
342
- req :group, Group
343
- end
344
-
345
- assert_nothing_raised { s.validate!(user: User.new, group: Group.new) }
346
- assert_verr { s.validate!(user: Group.new, group: User.new) }
347
- end
348
- end
349
- end
@@ -1,13 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'schemacop'
3
- require 'pry'
4
- require 'colorize'
5
-
6
- def assert_verr(&_block)
7
- assert_raises(Schemacop::Exceptions::ValidationError) { yield }
8
- end
9
-
10
- def assert_nothing_raised(&_block)
11
- yield
12
- assert true
13
- end
@@ -1,84 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Schemacop
4
- class TypesTest < Minitest::Test
5
- def setup
6
- @datatype_samples = { array: [],
7
- boolean: true,
8
- float: 2.3,
9
- hash: {},
10
- integer: -5,
11
- number: -3.2,
12
- symbol: :thing,
13
- object: self,
14
- string: 'miau' }.freeze
15
- end
16
-
17
- def test_multitype
18
- assert_only_types_allowed(
19
- Schema.new do
20
- type :integer
21
- type :boolean
22
- end, [:integer, :boolean]
23
- )
24
-
25
- assert_only_types_allowed(
26
- Schema.new([:integer, :boolean]),
27
- [:integer, :boolean]
28
- )
29
- end
30
-
31
- def test_all_data_types
32
- @datatype_samples.keys.each do |type|
33
- assert_only_types_allowed(Schema.new(type), type)
34
- end
35
- end
36
-
37
- def test_conditional_types
38
- s = Schema.new do
39
- type :boolean
40
- type :integer, min: 5
41
- end
42
-
43
- assert_nothing_raised { s.validate! true }
44
- assert_nothing_raised { s.validate! false }
45
- assert_nothing_raised { s.validate! 5 }
46
-
47
- assert_verr { s.validate! 'sali' }
48
- assert_verr { s.validate! 4 }
49
- end
50
-
51
- # For short form test see short_forms_test.rb
52
- def test_array_subtype_explicit
53
- s = Schema.new do
54
- type :array do
55
- type :integer
56
- end
57
- end
58
- assert_nothing_raised { s.validate! [5] }
59
- assert_verr { s.validate! [nil] }
60
- assert_verr { s.validate! ['a'] }
61
- assert_verr { s.validate! [5, 'a'] }
62
- assert_verr { s.validate! [5, nil] }
63
- end
64
-
65
- private
66
-
67
- def assert_only_types_allowed(schema, allowed_types)
68
- allowed_types = [*allowed_types]
69
- @datatype_samples.each do |type, data|
70
- if allowed_types.include?(type) ||
71
- # All the weird cases need to be differentiated
72
- (type == :float && allowed_types.include?(:number)) ||
73
- (type == :integer && allowed_types.include?(:number)) ||
74
- (type == :number && allowed_types.include?(:float)) ||
75
- allowed_types.include?(:object)
76
-
77
- assert_nothing_raised { schema.validate! data }
78
- else
79
- assert_verr { schema.validate! data }
80
- end
81
- end
82
- end
83
- end
84
- end