dry-validation 0.12.0 → 1.6.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 (204) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +696 -239
  3. data/LICENSE +1 -1
  4. data/README.md +15 -12
  5. data/config/errors.yml +3 -88
  6. data/dry-validation.gemspec +31 -17
  7. data/lib/dry-validation.rb +3 -1
  8. data/lib/dry/validation.rb +45 -28
  9. data/lib/dry/validation/config.rb +24 -0
  10. data/lib/dry/validation/constants.rb +43 -0
  11. data/lib/dry/validation/contract.rb +171 -0
  12. data/lib/dry/validation/contract/class_interface.rb +230 -0
  13. data/lib/dry/validation/evaluator.rb +224 -0
  14. data/lib/dry/validation/extensions/hints.rb +67 -0
  15. data/lib/dry/validation/extensions/monads.rb +24 -8
  16. data/lib/dry/validation/extensions/predicates_as_macros.rb +75 -0
  17. data/lib/dry/validation/failures.rb +70 -0
  18. data/lib/dry/validation/function.rb +44 -0
  19. data/lib/dry/validation/macro.rb +38 -0
  20. data/lib/dry/validation/macros.rb +104 -0
  21. data/lib/dry/validation/message.rb +80 -80
  22. data/lib/dry/validation/message_set.rb +80 -105
  23. data/lib/dry/validation/messages/resolver.rb +131 -0
  24. data/lib/dry/validation/result.rb +183 -41
  25. data/lib/dry/validation/rule.rb +135 -0
  26. data/lib/dry/validation/schema_ext.rb +19 -0
  27. data/lib/dry/validation/values.rb +104 -0
  28. data/lib/dry/validation/version.rb +3 -1
  29. metadata +47 -336
  30. data/.codeclimate.yml +0 -17
  31. data/.gitignore +0 -9
  32. data/.rspec +0 -3
  33. data/.travis.yml +0 -26
  34. data/CONTRIBUTING.md +0 -31
  35. data/Gemfile +0 -33
  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.rb +0 -7
  56. data/lib/dry/validation/extensions/struct.rb +0 -32
  57. data/lib/dry/validation/input_processor_compiler.rb +0 -135
  58. data/lib/dry/validation/input_processor_compiler/json.rb +0 -45
  59. data/lib/dry/validation/input_processor_compiler/params.rb +0 -49
  60. data/lib/dry/validation/input_processor_compiler/sanitizer.rb +0 -47
  61. data/lib/dry/validation/message_compiler.rb +0 -192
  62. data/lib/dry/validation/message_compiler/visitor_opts.rb +0 -37
  63. data/lib/dry/validation/messages.rb +0 -14
  64. data/lib/dry/validation/messages/abstract.rb +0 -112
  65. data/lib/dry/validation/messages/i18n.rb +0 -35
  66. data/lib/dry/validation/messages/namespaced.rb +0 -32
  67. data/lib/dry/validation/messages/yaml.rb +0 -54
  68. data/lib/dry/validation/predicate_registry.rb +0 -115
  69. data/lib/dry/validation/schema.rb +0 -126
  70. data/lib/dry/validation/schema/check.rb +0 -37
  71. data/lib/dry/validation/schema/class_interface.rb +0 -189
  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_compiler.rb +0 -81
  81. data/lib/dry/validation/type_specs.rb +0 -70
  82. data/spec/extensions/monads/result_spec.rb +0 -40
  83. data/spec/extensions/struct/schema_spec.rb +0 -32
  84. data/spec/fixtures/locales/en.yml +0 -6
  85. data/spec/fixtures/locales/pl.yml +0 -18
  86. data/spec/integration/custom_error_messages_spec.rb +0 -48
  87. data/spec/integration/custom_predicates_spec.rb +0 -228
  88. data/spec/integration/hints_spec.rb +0 -170
  89. data/spec/integration/injecting_rules_spec.rb +0 -30
  90. data/spec/integration/json/defining_base_schema_spec.rb +0 -41
  91. data/spec/integration/localized_error_messages_spec.rb +0 -72
  92. data/spec/integration/message_compiler_spec.rb +0 -405
  93. data/spec/integration/messages/i18n_spec.rb +0 -94
  94. data/spec/integration/optional_keys_spec.rb +0 -28
  95. data/spec/integration/params/predicates/array_spec.rb +0 -287
  96. data/spec/integration/params/predicates/empty_spec.rb +0 -263
  97. data/spec/integration/params/predicates/eql_spec.rb +0 -327
  98. data/spec/integration/params/predicates/even_spec.rb +0 -455
  99. data/spec/integration/params/predicates/excluded_from_spec.rb +0 -455
  100. data/spec/integration/params/predicates/excludes_spec.rb +0 -391
  101. data/spec/integration/params/predicates/false_spec.rb +0 -455
  102. data/spec/integration/params/predicates/filled_spec.rb +0 -467
  103. data/spec/integration/params/predicates/format_spec.rb +0 -454
  104. data/spec/integration/params/predicates/gt_spec.rb +0 -519
  105. data/spec/integration/params/predicates/gteq_spec.rb +0 -519
  106. data/spec/integration/params/predicates/included_in_spec.rb +0 -455
  107. data/spec/integration/params/predicates/includes_spec.rb +0 -391
  108. data/spec/integration/params/predicates/key_spec.rb +0 -67
  109. data/spec/integration/params/predicates/lt_spec.rb +0 -519
  110. data/spec/integration/params/predicates/lteq_spec.rb +0 -519
  111. data/spec/integration/params/predicates/max_size_spec.rb +0 -391
  112. data/spec/integration/params/predicates/min_size_spec.rb +0 -391
  113. data/spec/integration/params/predicates/none_spec.rb +0 -265
  114. data/spec/integration/params/predicates/not_eql_spec.rb +0 -327
  115. data/spec/integration/params/predicates/odd_spec.rb +0 -455
  116. data/spec/integration/params/predicates/size/fixed_spec.rb +0 -393
  117. data/spec/integration/params/predicates/size/range_spec.rb +0 -396
  118. data/spec/integration/params/predicates/true_spec.rb +0 -455
  119. data/spec/integration/params/predicates/type_spec.rb +0 -391
  120. data/spec/integration/result_spec.rb +0 -81
  121. data/spec/integration/schema/array_schema_spec.rb +0 -59
  122. data/spec/integration/schema/check_rules_spec.rb +0 -119
  123. data/spec/integration/schema/check_with_nested_el_spec.rb +0 -37
  124. data/spec/integration/schema/check_with_nth_el_spec.rb +0 -25
  125. data/spec/integration/schema/default_settings_spec.rb +0 -11
  126. data/spec/integration/schema/defining_base_schema_spec.rb +0 -41
  127. data/spec/integration/schema/dynamic_predicate_args_spec.rb +0 -43
  128. data/spec/integration/schema/each_with_set_spec.rb +0 -70
  129. data/spec/integration/schema/extending_dsl_spec.rb +0 -27
  130. data/spec/integration/schema/form_spec.rb +0 -236
  131. data/spec/integration/schema/hash_schema_spec.rb +0 -47
  132. data/spec/integration/schema/inheriting_schema_spec.rb +0 -31
  133. data/spec/integration/schema/input_processor_spec.rb +0 -46
  134. data/spec/integration/schema/json/explicit_types_spec.rb +0 -157
  135. data/spec/integration/schema/json_spec.rb +0 -163
  136. data/spec/integration/schema/macros/confirmation_spec.rb +0 -35
  137. data/spec/integration/schema/macros/each_spec.rb +0 -268
  138. data/spec/integration/schema/macros/filled_spec.rb +0 -87
  139. data/spec/integration/schema/macros/input_spec.rb +0 -139
  140. data/spec/integration/schema/macros/maybe_spec.rb +0 -99
  141. data/spec/integration/schema/macros/rule_spec.rb +0 -75
  142. data/spec/integration/schema/macros/value_spec.rb +0 -119
  143. data/spec/integration/schema/macros/when_spec.rb +0 -62
  144. data/spec/integration/schema/nested_schemas_spec.rb +0 -236
  145. data/spec/integration/schema/nested_values_spec.rb +0 -46
  146. data/spec/integration/schema/not_spec.rb +0 -34
  147. data/spec/integration/schema/numbers_spec.rb +0 -19
  148. data/spec/integration/schema/option_with_default_spec.rb +0 -64
  149. data/spec/integration/schema/or_spec.rb +0 -87
  150. data/spec/integration/schema/params/defining_base_schema_spec.rb +0 -41
  151. data/spec/integration/schema/params/explicit_types_spec.rb +0 -195
  152. data/spec/integration/schema/params_spec.rb +0 -234
  153. data/spec/integration/schema/predicate_verification_spec.rb +0 -9
  154. data/spec/integration/schema/predicates/array_spec.rb +0 -295
  155. data/spec/integration/schema/predicates/custom_spec.rb +0 -103
  156. data/spec/integration/schema/predicates/empty_spec.rb +0 -263
  157. data/spec/integration/schema/predicates/eql_spec.rb +0 -327
  158. data/spec/integration/schema/predicates/even_spec.rb +0 -455
  159. data/spec/integration/schema/predicates/excluded_from/array_spec.rb +0 -459
  160. data/spec/integration/schema/predicates/excluded_from/range_spec.rb +0 -459
  161. data/spec/integration/schema/predicates/excludes_spec.rb +0 -391
  162. data/spec/integration/schema/predicates/filled_spec.rb +0 -467
  163. data/spec/integration/schema/predicates/format_spec.rb +0 -455
  164. data/spec/integration/schema/predicates/gt_spec.rb +0 -519
  165. data/spec/integration/schema/predicates/gteq_spec.rb +0 -519
  166. data/spec/integration/schema/predicates/hash_spec.rb +0 -69
  167. data/spec/integration/schema/predicates/included_in/array_spec.rb +0 -459
  168. data/spec/integration/schema/predicates/included_in/range_spec.rb +0 -459
  169. data/spec/integration/schema/predicates/includes_spec.rb +0 -391
  170. data/spec/integration/schema/predicates/key_spec.rb +0 -88
  171. data/spec/integration/schema/predicates/lt_spec.rb +0 -520
  172. data/spec/integration/schema/predicates/lteq_spec.rb +0 -519
  173. data/spec/integration/schema/predicates/max_size_spec.rb +0 -391
  174. data/spec/integration/schema/predicates/min_size_spec.rb +0 -391
  175. data/spec/integration/schema/predicates/none_spec.rb +0 -265
  176. data/spec/integration/schema/predicates/not_eql_spec.rb +0 -391
  177. data/spec/integration/schema/predicates/odd_spec.rb +0 -455
  178. data/spec/integration/schema/predicates/size/fixed_spec.rb +0 -398
  179. data/spec/integration/schema/predicates/size/range_spec.rb +0 -395
  180. data/spec/integration/schema/predicates/type_spec.rb +0 -413
  181. data/spec/integration/schema/reusing_schema_spec.rb +0 -33
  182. data/spec/integration/schema/using_types_spec.rb +0 -135
  183. data/spec/integration/schema/validate_spec.rb +0 -120
  184. data/spec/integration/schema/xor_spec.rb +0 -35
  185. data/spec/integration/schema_builders_spec.rb +0 -17
  186. data/spec/integration/schema_spec.rb +0 -173
  187. data/spec/shared/message_compiler.rb +0 -11
  188. data/spec/shared/predicate_helper.rb +0 -15
  189. data/spec/shared/rule_compiler.rb +0 -8
  190. data/spec/spec_helper.rb +0 -58
  191. data/spec/support/define_struct.rb +0 -25
  192. data/spec/support/matchers.rb +0 -38
  193. data/spec/support/mutant.rb +0 -9
  194. data/spec/support/predicates_integration.rb +0 -7
  195. data/spec/unit/input_processor_compiler/json_spec.rb +0 -283
  196. data/spec/unit/input_processor_compiler/params_spec.rb +0 -328
  197. data/spec/unit/message_compiler/visit_failure_spec.rb +0 -38
  198. data/spec/unit/message_compiler/visit_spec.rb +0 -16
  199. data/spec/unit/message_compiler_spec.rb +0 -7
  200. data/spec/unit/predicate_registry_spec.rb +0 -34
  201. data/spec/unit/schema/key_spec.rb +0 -38
  202. data/spec/unit/schema/rule_spec.rb +0 -42
  203. data/spec/unit/schema/value_spec.rb +0 -131
  204. data/spec/unit/schema_spec.rb +0 -35
@@ -1,103 +0,0 @@
1
- RSpec.describe 'Predicates: custom' do
2
- context 'with custom predicate' do
3
- subject(:schema) do
4
- Dry::Validation.Schema do
5
- configure do
6
- config.messages_file = 'spec/fixtures/locales/en.yml'
7
-
8
- def email?(current)
9
- !current.match(/\@/).nil?
10
- end
11
- end
12
-
13
- required(:foo) { email? }
14
- end
15
- end
16
-
17
- context 'with valid input' do
18
- let(:input) { { foo: 'test@dry-rb.org' } }
19
-
20
- it 'is successful' do
21
- expect(result).to be_successful
22
- end
23
- end
24
-
25
- context 'with invalid input' do
26
- let(:input) { { foo: 'test' } }
27
-
28
- it 'is not successful' do
29
- expect(result).to be_failing ['must be an email']
30
- end
31
- end
32
- end
33
-
34
- context 'with custom predicates as module' do
35
- subject(:schema) do
36
- Dry::Validation.Schema do
37
- configure do
38
- config.messages_file = 'spec/fixtures/locales/en.yml'
39
- predicates (Module.new do
40
- include Dry::Logic::Predicates
41
-
42
- def self.email?(current)
43
- !current.match(/\@/).nil?
44
- end
45
- end)
46
- end
47
-
48
- required(:foo) { email? }
49
- end
50
- end
51
-
52
- context 'with valid input' do
53
- let(:input) { { foo: 'test@hanamirb.org' } }
54
-
55
- it 'is successful' do
56
- expect(result).to be_successful
57
- end
58
- end
59
-
60
- context 'with invalid input' do
61
- let(:input) { { foo: 'test' } }
62
-
63
- it 'is successful' do
64
- expect(result).to be_failing ['must be an email']
65
- end
66
- end
67
- end
68
-
69
- context 'without custom predicate' do
70
- it 'raises error if try to use an unknown predicate' do
71
- expect do
72
- Dry::Validation.Schema do
73
- required(:foo) { email? }
74
- end
75
- end.to raise_error(ArgumentError, '+email?+ is not a valid predicate name')
76
- end
77
- end
78
-
79
- context 'with nested validations' do
80
- subject(:schema) do
81
- Dry::Validation.Schema do
82
- required(:details).schema do
83
- configure do
84
- config.messages_file = 'spec/fixtures/locales/en.yml'
85
-
86
- def odd?(current)
87
- current.odd?
88
- end
89
- end
90
-
91
- required(:foo) { odd? }
92
- end
93
- end
94
- end
95
-
96
- let(:input) { { details: { foo: 2 } } }
97
-
98
- it 'allows groups to define their own custom predicates' do
99
- expect(result).to_not be_success
100
- expect(result.messages[:details]).to eq(foo: ['must be odd'])
101
- end
102
- end
103
- end
@@ -1,263 +0,0 @@
1
- RSpec.describe 'Predicates: Empty' do
2
- context 'with required' do
3
- subject(:schema) do
4
- Dry::Validation.Schema 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.Schema 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.Schema 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.Schema 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.Schema 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.Schema 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.Schema 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.Schema do
257
- optional(:foo).maybe(:empty?)
258
- end }.to raise_error InvalidSchemaError
259
- end
260
- end
261
- end
262
- end
263
- end
@@ -1,327 +0,0 @@
1
- RSpec.describe 'Predicates: Eql' do
2
- context 'with required' do
3
- subject(:schema) do
4
- Dry::Validation.Schema do
5
- required(:foo) { eql?(23) }
6
- end
7
- end
8
-
9
- context 'with valid input' do
10
- let(:input) { { foo: 23 } }
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', 'must be equal to 23']
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 equal to 23']
30
- end
31
- end
32
-
33
- context 'with blank input' do
34
- let(:input) { { foo: '' } }
35
-
36
- it 'is not successful' do
37
- expect(result).to be_failing ['must be equal to 23']
38
- end
39
- end
40
- end
41
-
42
- context 'with optional' do
43
- subject(:schema) do
44
- Dry::Validation.Schema do
45
- optional(:foo) { eql?(23) }
46
- end
47
- end
48
-
49
- context 'with valid input' do
50
- let(:input) { { foo: 23 } }
51
-
52
- it 'is successful' do
53
- expect(result).to be_successful
54
- end
55
- end
56
-
57
- context 'with missing input' do
58
- let(:input) { {} }
59
-
60
- it 'is successful' do
61
- expect(result).to be_successful
62
- end
63
- end
64
-
65
- context 'with nil input' do
66
- let(:input) { { foo: nil } }
67
-
68
- it 'is not successful' do
69
- expect(result).to be_failing ['must be equal to 23']
70
- end
71
- end
72
-
73
- context 'with blank input' do
74
- let(:input) { { foo: '' } }
75
-
76
- it 'is not successful' do
77
- expect(result).to be_failing ['must be equal to 23']
78
- end
79
- end
80
- end
81
-
82
- context 'as macro' do
83
- context 'with required' do
84
- context 'with value' do
85
- subject(:schema) do
86
- Dry::Validation.Schema do
87
- required(:foo).value(eql?: 23)
88
- end
89
- end
90
-
91
- context 'with valid input' do
92
- let(:input) { { foo: 23 } }
93
-
94
- it 'is successful' do
95
- expect(result).to be_successful
96
- end
97
- end
98
-
99
- context 'with missing input' do
100
- let(:input) { {} }
101
-
102
- it 'is not successful' do
103
- expect(result).to be_failing ['is missing', 'must be equal to 23']
104
- end
105
- end
106
-
107
- context 'with nil input' do
108
- let(:input) { { foo: nil } }
109
-
110
- it 'is not successful' do
111
- expect(result).to be_failing ['must be equal to 23']
112
- end
113
- end
114
-
115
- context 'with blank input' do
116
- let(:input) { { foo: '' } }
117
-
118
- it 'is not successful' do
119
- expect(result).to be_failing ['must be equal to 23']
120
- end
121
- end
122
- end
123
-
124
- context 'with filled' do
125
- subject(:schema) do
126
- Dry::Validation.Schema do
127
- required(:foo).filled(eql?: 23)
128
- end
129
- end
130
-
131
- context 'with valid input' do
132
- let(:input) { { foo: 23 } }
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 equal to 23']
144
- end
145
- end
146
-
147
- context 'with nil input' do
148
- let(:input) { { foo: nil } }
149
-
150
- it 'is not successful' do
151
- expect(result).to be_failing ['must be filled', 'must be equal to 23']
152
- end
153
- end
154
-
155
- context 'with blank input' do
156
- let(:input) { { foo: '' } }
157
-
158
- it 'is not successful' do
159
- expect(result).to be_failing ['must be filled', 'must be equal to 23']
160
- end
161
- end
162
- end
163
-
164
- context 'with maybe' do
165
- subject(:schema) do
166
- Dry::Validation.Schema do
167
- required(:foo).maybe(eql?: 23)
168
- end
169
- end
170
-
171
- context 'with valid input' do
172
- let(:input) { { foo: 23 } }
173
-
174
- it 'is successful' do
175
- expect(result).to be_successful
176
- end
177
- end
178
-
179
- context 'with missing input' do
180
- let(:input) { {} }
181
-
182
- it 'is not successful' do
183
- expect(result).to be_failing ['is missing', 'must be equal to 23']
184
- end
185
- end
186
-
187
- context 'with nil input' do
188
- let(:input) { { foo: nil } }
189
-
190
- it 'is successful' do
191
- expect(result).to be_successful
192
- end
193
- end
194
-
195
- context 'with blank input' do
196
- let(:input) { { foo: '' } }
197
-
198
- it 'is not successful' do
199
- expect(result).to be_failing ['must be equal to 23']
200
- end
201
- end
202
- end
203
- end
204
-
205
- context 'with optional' do
206
- context 'with value' do
207
- subject(:schema) do
208
- Dry::Validation.Schema do
209
- optional(:foo).value(eql?: 23)
210
- end
211
- end
212
-
213
- context 'with valid input' do
214
- let(:input) { { foo: 23 } }
215
-
216
- it 'is successful' do
217
- expect(result).to be_successful
218
- end
219
- end
220
-
221
- context 'with missing input' do
222
- let(:input) { {} }
223
-
224
- it 'is successful' do
225
- expect(result).to be_successful
226
- end
227
- end
228
-
229
- context 'with nil input' do
230
- let(:input) { { foo: nil } }
231
-
232
- it 'is not successful' do
233
- expect(result).to be_failing ['must be equal to 23']
234
- end
235
- end
236
-
237
- context 'with blank input' do
238
- let(:input) { { foo: '' } }
239
-
240
- it 'is not successful' do
241
- expect(result).to be_failing ['must be equal to 23']
242
- end
243
- end
244
- end
245
-
246
- context 'with filled' do
247
- subject(:schema) do
248
- Dry::Validation.Schema do
249
- optional(:foo).filled(eql?: 23)
250
- end
251
- end
252
-
253
- context 'with valid input' do
254
- let(:input) { { foo: 23 } }
255
-
256
- it 'is successful' do
257
- expect(result).to be_successful
258
- end
259
- end
260
-
261
- context 'with missing input' do
262
- let(:input) { {} }
263
-
264
- it 'is successful' do
265
- expect(result).to be_successful
266
- end
267
- end
268
-
269
- context 'with nil input' do
270
- let(:input) { { foo: nil } }
271
-
272
- it 'is not successful' do
273
- expect(result).to be_failing ['must be filled', 'must be equal to 23']
274
- end
275
- end
276
-
277
- context 'with blank input' do
278
- let(:input) { { foo: '' } }
279
-
280
- it 'is not successful' do
281
- expect(result).to be_failing ['must be filled', 'must be equal to 23']
282
- end
283
- end
284
- end
285
-
286
- context 'with maybe' do
287
- subject(:schema) do
288
- Dry::Validation.Schema do
289
- optional(:foo).maybe(eql?: 23)
290
- end
291
- end
292
-
293
- context 'with valid input' do
294
- let(:input) { { foo: 23 } }
295
-
296
- it 'is successful' do
297
- expect(result).to be_successful
298
- end
299
- end
300
-
301
- context 'with missing input' do
302
- let(:input) { {} }
303
-
304
- it 'is successful' do
305
- expect(result).to be_successful
306
- end
307
- end
308
-
309
- context 'with nil input' do
310
- let(:input) { { foo: nil } }
311
-
312
- it 'is successful' do
313
- expect(result).to be_successful
314
- end
315
- end
316
-
317
- context 'with blank input' do
318
- let(:input) { { foo: '' } }
319
-
320
- it 'is not successful' do
321
- expect(result).to be_failing ['must be equal to 23']
322
- end
323
- end
324
- end
325
- end
326
- end
327
- end