dry-validation 0.13.3 → 1.7.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.
Files changed (207) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +506 -95
  3. data/LICENSE +1 -1
  4. data/README.md +16 -12
  5. data/config/errors.yml +3 -88
  6. data/dry-validation.gemspec +37 -24
  7. data/lib/dry/validation/config.rb +24 -0
  8. data/lib/dry/validation/constants.rb +43 -0
  9. data/lib/dry/validation/contract/class_interface.rb +230 -0
  10. data/lib/dry/validation/contract.rb +171 -0
  11. data/lib/dry/validation/evaluator.rb +224 -0
  12. data/lib/dry/validation/extensions/hints.rb +67 -0
  13. data/lib/dry/validation/extensions/monads.rb +24 -8
  14. data/lib/dry/validation/extensions/predicates_as_macros.rb +75 -0
  15. data/lib/dry/validation/failures.rb +70 -0
  16. data/lib/dry/validation/function.rb +44 -0
  17. data/lib/dry/validation/macro.rb +38 -0
  18. data/lib/dry/validation/macros.rb +104 -0
  19. data/lib/dry/validation/message.rb +80 -80
  20. data/lib/dry/validation/message_set.rb +80 -105
  21. data/lib/dry/validation/messages/resolver.rb +131 -0
  22. data/lib/dry/validation/result.rb +183 -41
  23. data/lib/dry/validation/rule.rb +135 -0
  24. data/lib/dry/validation/schema_ext.rb +19 -0
  25. data/lib/dry/validation/values.rb +104 -0
  26. data/lib/dry/validation/version.rb +3 -1
  27. data/lib/dry/validation.rb +45 -28
  28. data/lib/dry-validation.rb +3 -1
  29. metadata +46 -344
  30. data/.codeclimate.yml +0 -17
  31. data/.gitignore +0 -9
  32. data/.rspec +0 -3
  33. data/.travis.yml +0 -29
  34. data/CONTRIBUTING.md +0 -31
  35. data/Gemfile +0 -25
  36. data/Rakefile +0 -22
  37. data/benchmarks/benchmark_form_invalid.rb +0 -64
  38. data/benchmarks/benchmark_form_valid.rb +0 -64
  39. data/benchmarks/benchmark_schema_invalid_huge.rb +0 -52
  40. data/benchmarks/profile_schema_call_invalid.rb +0 -20
  41. data/benchmarks/profile_schema_call_valid.rb +0 -20
  42. data/benchmarks/profile_schema_definition.rb +0 -14
  43. data/benchmarks/profile_schema_huge_invalid.rb +0 -30
  44. data/benchmarks/profile_schema_messages_invalid.rb +0 -20
  45. data/benchmarks/suite.rb +0 -5
  46. data/examples/basic.rb +0 -15
  47. data/examples/each.rb +0 -14
  48. data/examples/json.rb +0 -12
  49. data/examples/multiple.rb +0 -27
  50. data/examples/nested.rb +0 -22
  51. data/examples/params.rb +0 -11
  52. data/lib/dry/validation/compat/form.rb +0 -67
  53. data/lib/dry/validation/deprecations.rb +0 -24
  54. data/lib/dry/validation/executor.rb +0 -91
  55. data/lib/dry/validation/extensions/struct.rb +0 -32
  56. data/lib/dry/validation/extensions.rb +0 -7
  57. data/lib/dry/validation/input_processor_compiler/json.rb +0 -45
  58. data/lib/dry/validation/input_processor_compiler/params.rb +0 -49
  59. data/lib/dry/validation/input_processor_compiler/sanitizer.rb +0 -47
  60. data/lib/dry/validation/input_processor_compiler.rb +0 -137
  61. data/lib/dry/validation/message_compiler/visitor_opts.rb +0 -37
  62. data/lib/dry/validation/message_compiler.rb +0 -188
  63. data/lib/dry/validation/messages/abstract.rb +0 -119
  64. data/lib/dry/validation/messages/i18n.rb +0 -47
  65. data/lib/dry/validation/messages/namespaced.rb +0 -39
  66. data/lib/dry/validation/messages/yaml.rb +0 -61
  67. data/lib/dry/validation/messages.rb +0 -14
  68. data/lib/dry/validation/predicate_registry.rb +0 -115
  69. data/lib/dry/validation/predicates.rb +0 -19
  70. data/lib/dry/validation/schema/check.rb +0 -37
  71. data/lib/dry/validation/schema/class_interface.rb +0 -190
  72. data/lib/dry/validation/schema/deprecated.rb +0 -30
  73. data/lib/dry/validation/schema/dsl.rb +0 -118
  74. data/lib/dry/validation/schema/form.rb +0 -9
  75. data/lib/dry/validation/schema/json.rb +0 -21
  76. data/lib/dry/validation/schema/key.rb +0 -71
  77. data/lib/dry/validation/schema/params.rb +0 -22
  78. data/lib/dry/validation/schema/rule.rb +0 -202
  79. data/lib/dry/validation/schema/value.rb +0 -211
  80. data/lib/dry/validation/schema.rb +0 -126
  81. data/lib/dry/validation/schema_compiler.rb +0 -81
  82. data/lib/dry/validation/template.rb +0 -66
  83. data/lib/dry/validation/type_specs.rb +0 -70
  84. data/log/.gitkeep +0 -0
  85. data/spec/extensions/monads/result_spec.rb +0 -40
  86. data/spec/extensions/struct/schema_spec.rb +0 -32
  87. data/spec/fixtures/locales/en.yml +0 -8
  88. data/spec/fixtures/locales/pl.yml +0 -22
  89. data/spec/integration/custom_error_messages_spec.rb +0 -54
  90. data/spec/integration/custom_predicates_spec.rb +0 -228
  91. data/spec/integration/hints_spec.rb +0 -170
  92. data/spec/integration/injecting_rules_spec.rb +0 -30
  93. data/spec/integration/json/defining_base_schema_spec.rb +0 -41
  94. data/spec/integration/localized_error_messages_spec.rb +0 -72
  95. data/spec/integration/message_compiler_spec.rb +0 -405
  96. data/spec/integration/messages/i18n_spec.rb +0 -104
  97. data/spec/integration/optional_keys_spec.rb +0 -28
  98. data/spec/integration/params/predicates/array_spec.rb +0 -287
  99. data/spec/integration/params/predicates/empty_spec.rb +0 -263
  100. data/spec/integration/params/predicates/eql_spec.rb +0 -327
  101. data/spec/integration/params/predicates/even_spec.rb +0 -455
  102. data/spec/integration/params/predicates/excluded_from_spec.rb +0 -455
  103. data/spec/integration/params/predicates/excludes_spec.rb +0 -391
  104. data/spec/integration/params/predicates/false_spec.rb +0 -455
  105. data/spec/integration/params/predicates/filled_spec.rb +0 -467
  106. data/spec/integration/params/predicates/format_spec.rb +0 -454
  107. data/spec/integration/params/predicates/gt_spec.rb +0 -519
  108. data/spec/integration/params/predicates/gteq_spec.rb +0 -519
  109. data/spec/integration/params/predicates/included_in_spec.rb +0 -455
  110. data/spec/integration/params/predicates/includes_spec.rb +0 -391
  111. data/spec/integration/params/predicates/key_spec.rb +0 -67
  112. data/spec/integration/params/predicates/lt_spec.rb +0 -519
  113. data/spec/integration/params/predicates/lteq_spec.rb +0 -519
  114. data/spec/integration/params/predicates/max_size_spec.rb +0 -391
  115. data/spec/integration/params/predicates/min_size_spec.rb +0 -391
  116. data/spec/integration/params/predicates/none_spec.rb +0 -265
  117. data/spec/integration/params/predicates/not_eql_spec.rb +0 -327
  118. data/spec/integration/params/predicates/odd_spec.rb +0 -455
  119. data/spec/integration/params/predicates/size/fixed_spec.rb +0 -393
  120. data/spec/integration/params/predicates/size/range_spec.rb +0 -396
  121. data/spec/integration/params/predicates/true_spec.rb +0 -455
  122. data/spec/integration/params/predicates/type_spec.rb +0 -391
  123. data/spec/integration/result_spec.rb +0 -81
  124. data/spec/integration/schema/array_schema_spec.rb +0 -59
  125. data/spec/integration/schema/check_rules_spec.rb +0 -119
  126. data/spec/integration/schema/check_with_nested_el_spec.rb +0 -37
  127. data/spec/integration/schema/check_with_nth_el_spec.rb +0 -25
  128. data/spec/integration/schema/default_settings_spec.rb +0 -11
  129. data/spec/integration/schema/defining_base_schema_spec.rb +0 -41
  130. data/spec/integration/schema/dynamic_predicate_args_spec.rb +0 -43
  131. data/spec/integration/schema/each_with_set_spec.rb +0 -70
  132. data/spec/integration/schema/extending_dsl_spec.rb +0 -27
  133. data/spec/integration/schema/form_spec.rb +0 -236
  134. data/spec/integration/schema/hash_schema_spec.rb +0 -47
  135. data/spec/integration/schema/inheriting_schema_spec.rb +0 -31
  136. data/spec/integration/schema/input_processor_spec.rb +0 -46
  137. data/spec/integration/schema/json/explicit_types_spec.rb +0 -157
  138. data/spec/integration/schema/json_spec.rb +0 -163
  139. data/spec/integration/schema/macros/confirmation_spec.rb +0 -35
  140. data/spec/integration/schema/macros/each_spec.rb +0 -268
  141. data/spec/integration/schema/macros/filled_spec.rb +0 -87
  142. data/spec/integration/schema/macros/input_spec.rb +0 -139
  143. data/spec/integration/schema/macros/maybe_spec.rb +0 -99
  144. data/spec/integration/schema/macros/rule_spec.rb +0 -75
  145. data/spec/integration/schema/macros/value_spec.rb +0 -119
  146. data/spec/integration/schema/macros/when_spec.rb +0 -62
  147. data/spec/integration/schema/nested_schemas_spec.rb +0 -236
  148. data/spec/integration/schema/nested_values_spec.rb +0 -46
  149. data/spec/integration/schema/not_spec.rb +0 -34
  150. data/spec/integration/schema/numbers_spec.rb +0 -19
  151. data/spec/integration/schema/option_with_default_spec.rb +0 -64
  152. data/spec/integration/schema/or_spec.rb +0 -87
  153. data/spec/integration/schema/params/defining_base_schema_spec.rb +0 -41
  154. data/spec/integration/schema/params/explicit_types_spec.rb +0 -195
  155. data/spec/integration/schema/params_spec.rb +0 -234
  156. data/spec/integration/schema/predicate_verification_spec.rb +0 -9
  157. data/spec/integration/schema/predicates/array_spec.rb +0 -295
  158. data/spec/integration/schema/predicates/custom_spec.rb +0 -103
  159. data/spec/integration/schema/predicates/empty_spec.rb +0 -263
  160. data/spec/integration/schema/predicates/eql_spec.rb +0 -327
  161. data/spec/integration/schema/predicates/even_spec.rb +0 -455
  162. data/spec/integration/schema/predicates/excluded_from/array_spec.rb +0 -459
  163. data/spec/integration/schema/predicates/excluded_from/range_spec.rb +0 -459
  164. data/spec/integration/schema/predicates/excludes_spec.rb +0 -391
  165. data/spec/integration/schema/predicates/filled_spec.rb +0 -467
  166. data/spec/integration/schema/predicates/format_spec.rb +0 -455
  167. data/spec/integration/schema/predicates/gt_spec.rb +0 -519
  168. data/spec/integration/schema/predicates/gteq_spec.rb +0 -519
  169. data/spec/integration/schema/predicates/hash_spec.rb +0 -69
  170. data/spec/integration/schema/predicates/included_in/array_spec.rb +0 -459
  171. data/spec/integration/schema/predicates/included_in/range_spec.rb +0 -459
  172. data/spec/integration/schema/predicates/includes_spec.rb +0 -391
  173. data/spec/integration/schema/predicates/key_spec.rb +0 -88
  174. data/spec/integration/schema/predicates/lt_spec.rb +0 -520
  175. data/spec/integration/schema/predicates/lteq_spec.rb +0 -519
  176. data/spec/integration/schema/predicates/max_size_spec.rb +0 -391
  177. data/spec/integration/schema/predicates/min_size_spec.rb +0 -391
  178. data/spec/integration/schema/predicates/none_spec.rb +0 -265
  179. data/spec/integration/schema/predicates/not_eql_spec.rb +0 -391
  180. data/spec/integration/schema/predicates/odd_spec.rb +0 -455
  181. data/spec/integration/schema/predicates/size/fixed_spec.rb +0 -398
  182. data/spec/integration/schema/predicates/size/range_spec.rb +0 -395
  183. data/spec/integration/schema/predicates/type_spec.rb +0 -413
  184. data/spec/integration/schema/reusing_schema_spec.rb +0 -33
  185. data/spec/integration/schema/using_types_spec.rb +0 -135
  186. data/spec/integration/schema/validate_spec.rb +0 -120
  187. data/spec/integration/schema/xor_spec.rb +0 -35
  188. data/spec/integration/schema_builders_spec.rb +0 -17
  189. data/spec/integration/schema_spec.rb +0 -173
  190. data/spec/shared/message_compiler.rb +0 -11
  191. data/spec/shared/predicate_helper.rb +0 -15
  192. data/spec/shared/rule_compiler.rb +0 -8
  193. data/spec/spec_helper.rb +0 -62
  194. data/spec/support/define_struct.rb +0 -25
  195. data/spec/support/matchers.rb +0 -38
  196. data/spec/support/mutant.rb +0 -9
  197. data/spec/support/predicates_integration.rb +0 -7
  198. data/spec/unit/input_processor_compiler/json_spec.rb +0 -283
  199. data/spec/unit/input_processor_compiler/params_spec.rb +0 -328
  200. data/spec/unit/message_compiler/visit_failure_spec.rb +0 -38
  201. data/spec/unit/message_compiler/visit_spec.rb +0 -16
  202. data/spec/unit/message_compiler_spec.rb +0 -7
  203. data/spec/unit/predicate_registry_spec.rb +0 -34
  204. data/spec/unit/schema/key_spec.rb +0 -38
  205. data/spec/unit/schema/rule_spec.rb +0 -42
  206. data/spec/unit/schema/value_spec.rb +0 -131
  207. data/spec/unit/schema_spec.rb +0 -35
@@ -1,287 +0,0 @@
1
- RSpec.describe 'Predicates: Array' do
2
- context 'with required' do
3
- subject(:schema) do
4
- Dry::Validation.Params do
5
- required(:foo) { array? { each { int? } } }
6
- end
7
- end
8
-
9
- context 'with valid input' do
10
- let(:input) { { 'foo' => ['3'] } }
11
-
12
- it 'is successful' do
13
- expect(result).to be_successful
14
- end
15
- end
16
-
17
- context 'with missing input' do
18
- let(:input) { {} }
19
-
20
- it 'is not successful' do
21
- expect(result).to be_failing ['is missing']
22
- end
23
- end
24
-
25
- context 'with nil input' do
26
- let(:input) { { 'foo' => nil } }
27
-
28
- it 'is not successful' do
29
- expect(result).to be_failing ['must be an array']
30
- end
31
- end
32
-
33
- context 'with blank input' do
34
- let(:input) { { 'foo' => '' } }
35
-
36
- it 'is successful' do
37
- expect(result).to be_successful
38
- end
39
- end
40
-
41
- context 'with invalid type' do
42
- let(:input) { { 'foo' => { 'a' => '1' } } }
43
-
44
- it 'is not successful' do
45
- expect(result).to be_failing ['must be an array']
46
- end
47
- end
48
-
49
- context 'with invalid input (integer)' do
50
- let(:input) { { 'foo' => '4' } }
51
-
52
- it 'is not successful' do
53
- expect(result).to be_failing ['must be an array']
54
- end
55
- end
56
-
57
- context 'with invalid input (array with non-integers)' do
58
- let(:input) { { 'foo' => %w(foo bar) } }
59
-
60
- it 'is not successful' do
61
- expect(result).to be_failing 0 => ['must be an integer'], 1 => ['must be an integer']
62
- end
63
- end
64
-
65
- context 'with invalid input (mixed array)' do
66
- let(:input) { { 'foo' => %w(1 bar) } }
67
-
68
- it 'is not successful' do
69
- expect(result).to be_failing 1 => ['must be an integer']
70
- end
71
- end
72
- end
73
-
74
- context 'with optional' do
75
- subject(:schema) do
76
- Dry::Validation.Params do
77
- optional(:foo) { array? { each { int? } } }
78
- end
79
- end
80
-
81
- context 'with valid input' do
82
- let(:input) { { 'foo' => ['3'] } }
83
-
84
- it 'is successful' do
85
- expect(result).to be_successful
86
- end
87
- end
88
-
89
- context 'with missing input' do
90
- let(:input) { {} }
91
-
92
- it 'is successful' do
93
- expect(result).to be_successful
94
- end
95
- end
96
-
97
- context 'with nil input' do
98
- let(:input) { { 'foo' => nil } }
99
-
100
- it 'is not successful' do
101
- expect(result).to be_failing ['must be an array']
102
- end
103
- end
104
-
105
- context 'with blank input' do
106
- let(:input) { { 'foo' => '' } }
107
-
108
- it 'is successful' do
109
- expect(result).to be_successful
110
- end
111
- end
112
-
113
- context 'with invalid type' do
114
- let(:input) { { 'foo' => { 'a' => '1' } } }
115
-
116
- it 'is not successful' do
117
- expect(result).to be_failing ['must be an array']
118
- end
119
- end
120
-
121
- context 'with invalid input (integer)' do
122
- let(:input) { { 'foo' => '4' } }
123
-
124
- it 'is not successful' do
125
- expect(result).to be_failing ['must be an array']
126
- end
127
- end
128
-
129
- context 'with invalid input (array with non-integers)' do
130
- let(:input) { { 'foo' => %w(foo bar) } }
131
-
132
- it 'is not successful' do
133
- expect(result).to be_failing 0 => ['must be an integer'], 1 => ['must be an integer']
134
- end
135
- end
136
-
137
- context 'with invalid input (mixed array)' do
138
- let(:input) { { 'foo' => %w(1 bar) } }
139
-
140
- it 'is not successful' do
141
- expect(result).to be_failing 1 => ['must be an integer']
142
- end
143
- end
144
- end
145
-
146
- context 'as macro' do
147
- context 'with required' do
148
- subject(:schema) do
149
- Dry::Validation.Params do
150
- required(:foo).each(:int?)
151
- end
152
- end
153
-
154
- context 'with missing input' do
155
- let(:input) { {} }
156
-
157
- it 'is not successful' do
158
- expect(result).to be_failing ['is missing']
159
- end
160
- end
161
-
162
- context 'with nil input' do
163
- let(:input) { { 'foo' => nil } }
164
-
165
- it 'is not successful' do
166
- expect(result).to be_failing ['must be an array']
167
- end
168
- end
169
-
170
- context 'with blank input' do
171
- let(:input) { { 'foo' => '' } }
172
-
173
- it 'is successful' do
174
- expect(result).to be_successful
175
- end
176
- end
177
-
178
- context 'with valid input' do
179
- let(:input) { { 'foo' => ['3'] } }
180
-
181
- it 'is successful' do
182
- expect(result).to be_successful
183
- end
184
- end
185
-
186
- context 'with invalid input' do
187
- let(:input) { { 'foo' => ['bar'] } }
188
-
189
- it 'is not successful' do
190
- expect(result).to be_failing 0 => ['must be an integer']
191
- end
192
- end
193
- end
194
-
195
- context 'with optional' do
196
- subject(:schema) do
197
- Dry::Validation.Params do
198
- optional(:foo).each(:int?)
199
- end
200
- end
201
-
202
- context 'with missing input' do
203
- let(:input) { {} }
204
-
205
- it 'is not successful' do
206
- expect(result).to be_successful
207
- end
208
- end
209
-
210
- context 'with nil input' do
211
- let(:input) { { 'foo' => nil } }
212
-
213
- it 'is not successful' do
214
- expect(result).to be_failing ['must be an array']
215
- end
216
- end
217
-
218
- context 'with blank input' do
219
- let(:input) { { 'foo' => '' } }
220
-
221
- it 'is successful' do
222
- expect(result).to be_successful
223
- end
224
- end
225
-
226
- context 'with valid input' do
227
- let(:input) { { 'foo' => ['3'] } }
228
-
229
- it 'is successful' do
230
- expect(result).to be_successful
231
- end
232
- end
233
-
234
- context 'with invalid input' do
235
- let(:input) { { 'foo' => ['bar'] } }
236
-
237
- it 'is not successful' do
238
- expect(result).to be_failing 0 => ['must be an integer']
239
- end
240
- end
241
- end
242
- end
243
-
244
- context 'with maybe macro' do
245
- subject(:schema) { Dry::Validation.Params { required(:foo).maybe(:array?) } }
246
-
247
- context 'with empty string' do
248
- let(:input) { { 'foo' => '' } }
249
-
250
- it 'is successful' do
251
- expect(result).to be_successful
252
- end
253
- end
254
-
255
- context 'with nil' do
256
- let(:input) { { 'foo' => nil } }
257
-
258
- it 'is successful' do
259
- expect(result).to be_successful
260
- end
261
- end
262
-
263
- context 'with empty array' do
264
- let(:input) { { 'foo' => [] } }
265
-
266
- it 'is successful' do
267
- expect(result).to be_successful
268
- end
269
- end
270
-
271
- context 'with filled array' do
272
- let(:input) { { 'foo' => [1, 2, 3] } }
273
-
274
- it 'is successful' do
275
- expect(result).to be_successful
276
- end
277
- end
278
-
279
- context 'with invalid value' do
280
- let(:input) { { 'foo' => 'oops' } }
281
-
282
- it 'is not successful' do
283
- expect(result).to be_failing(['must be an array'])
284
- end
285
- end
286
- end
287
- end
@@ -1,263 +0,0 @@
1
- RSpec.describe 'Predicates: Empty' do
2
- context 'with required' do
3
- subject(:schema) do
4
- Dry::Validation.Params do
5
- required(:foo) { empty? }
6
- end
7
- end
8
-
9
- context 'with valid input (array)' do
10
- let(:input) { { 'foo' => [] } }
11
-
12
- it 'is successful' do
13
- expect(result).to be_successful
14
- end
15
- end
16
-
17
- context 'with valid input (hash)' do
18
- let(:input) { { 'foo' => {} } }
19
-
20
- it 'is successful' do
21
- expect(result).to be_successful
22
- end
23
- end
24
-
25
- context 'with missing input' do
26
- let(:input) { {} }
27
-
28
- it 'is not successful' do
29
- expect(result).to be_failing ['is missing', 'must be empty']
30
- end
31
- end
32
-
33
- context 'with nil input' do
34
- let(:input) { { 'foo' => nil } }
35
-
36
- it 'is successful' do
37
- expect(result).to be_successful
38
- end
39
- end
40
-
41
- context 'with blank input' do
42
- let(:input) { { 'foo' => '' } }
43
-
44
- it 'is successful' do
45
- expect(result).to be_successful
46
- end
47
- end
48
-
49
- context 'with invalid input' do
50
- let(:input) { { 'foo' => ['23'] } }
51
-
52
- it 'is not successful' do
53
- expect(result).to be_failing ['must be empty']
54
- end
55
- end
56
- end
57
-
58
- context 'with optional' do
59
- subject(:schema) do
60
- Dry::Validation.Params do
61
- optional(:foo) { empty? }
62
- end
63
- end
64
-
65
- context 'with valid input (array)' do
66
- let(:input) { { 'foo' => [] } }
67
-
68
- it 'is successful' do
69
- expect(result).to be_successful
70
- end
71
- end
72
-
73
- context 'with valid input (hash)' do
74
- let(:input) { { 'foo' => {} } }
75
-
76
- it 'is successful' do
77
- expect(result).to be_successful
78
- end
79
- end
80
-
81
- context 'with missing input' do
82
- let(:input) { {} }
83
-
84
- it 'is successful' do
85
- expect(result).to be_successful
86
- end
87
- end
88
-
89
- context 'with nil input' do
90
- let(:input) { { 'foo' => nil } }
91
-
92
- it 'is successful' do
93
- expect(result).to be_successful
94
- end
95
- end
96
-
97
- context 'with blank input' do
98
- let(:input) { { 'foo' => '' } }
99
-
100
- it 'is successful' do
101
- expect(result).to be_successful
102
- end
103
- end
104
-
105
- context 'with invalid input' do
106
- let(:input) { { 'foo' => ['23'] } }
107
-
108
- it 'is not successful' do
109
- expect(result).to be_failing ['must be empty']
110
- end
111
- end
112
- end
113
-
114
- context 'as macro' do
115
- context 'with required' do
116
- context 'with value' do
117
- subject(:schema) do
118
- Dry::Validation.Params do
119
- required(:foo).value(:empty?)
120
- end
121
- end
122
-
123
- context 'with valid input (array)' do
124
- let(:input) { { 'foo' => [] } }
125
-
126
- it 'is successful' do
127
- expect(result).to be_successful
128
- end
129
- end
130
-
131
- context 'with valid input (hash)' do
132
- let(:input) { { 'foo' => {} } }
133
-
134
- it 'is successful' do
135
- expect(result).to be_successful
136
- end
137
- end
138
-
139
- context 'with missing input' do
140
- let(:input) { {} }
141
-
142
- it 'is not successful' do
143
- expect(result).to be_failing ['is missing', 'must be empty']
144
- end
145
- end
146
-
147
- context 'with nil input' do
148
- let(:input) { { 'foo' => nil } }
149
-
150
- it 'is successful' do
151
- expect(result).to be_successful
152
- end
153
- end
154
-
155
- context 'with blank input' do
156
- let(:input) { { 'foo' => '' } }
157
-
158
- it 'is successful' do
159
- expect(result).to be_successful
160
- end
161
- end
162
-
163
- context 'with invalid input' do
164
- let(:input) { { 'foo' => ['23'] } }
165
-
166
- it 'is not successful' do
167
- expect(result).to be_failing ['must be empty']
168
- end
169
- end
170
- end
171
-
172
- context 'with filled' do
173
- it "raises error" do
174
- expect { Dry::Validation.Params do
175
- required(:foo).filled(:empty?)
176
- end }.to raise_error InvalidSchemaError
177
- end
178
- end
179
-
180
- context 'with maybe' do
181
- it "raises error" do
182
- expect { Dry::Validation.Params do
183
- required(:foo).maybe(:empty?)
184
- end }.to raise_error InvalidSchemaError
185
- end
186
- end
187
- end
188
-
189
- context 'with optional' do
190
- context 'with value' do
191
- subject(:schema) do
192
- Dry::Validation.Params do
193
- optional(:foo).value(:empty?)
194
- end
195
- end
196
-
197
- context 'with valid input (array)' do
198
- let(:input) { { 'foo' => [] } }
199
-
200
- it 'is successful' do
201
- expect(result).to be_successful
202
- end
203
- end
204
-
205
- context 'with valid input (hash)' do
206
- let(:input) { { 'foo' => {} } }
207
-
208
- it 'is successful' do
209
- expect(result).to be_successful
210
- end
211
- end
212
-
213
- context 'with missing input' do
214
- let(:input) { {} }
215
-
216
- it 'is successful' do
217
- expect(result).to be_successful
218
- end
219
- end
220
-
221
- context 'with nil input' do
222
- let(:input) { { 'foo' => nil } }
223
-
224
- it 'is successful' do
225
- expect(result).to be_successful
226
- end
227
- end
228
-
229
- context 'with blank input' do
230
- let(:input) { { 'foo' => '' } }
231
-
232
- it 'is successful' do
233
- expect(result).to be_successful
234
- end
235
- end
236
-
237
- context 'with invalid input' do
238
- let(:input) { { 'foo' => ['23'] } }
239
-
240
- it 'is not successful' do
241
- expect(result).to be_failing ['must be empty']
242
- end
243
- end
244
- end
245
-
246
- context 'with filled' do
247
- it "raises error" do
248
- expect { Dry::Validation.Params do
249
- optional(:foo).filled(:empty?)
250
- end }.to raise_error InvalidSchemaError
251
- end
252
- end
253
-
254
- context 'with maybe' do
255
- it "raises error" do
256
- expect { Dry::Validation.Params do
257
- optional(:foo).maybe(:empty?)
258
- end }.to raise_error InvalidSchemaError
259
- end
260
- end
261
- end
262
- end
263
- end