dry-validation 0.13.3 → 1.0.0.alpha1

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 (196) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -25
  3. data/LICENSE +1 -1
  4. data/README.md +9 -4
  5. data/lib/dry-validation.rb +2 -0
  6. data/lib/dry/validation.rb +8 -35
  7. data/lib/dry/validation/constants.rb +12 -0
  8. data/lib/dry/validation/contract.rb +132 -0
  9. data/lib/dry/validation/contract/class_interface.rb +114 -0
  10. data/lib/dry/validation/evaluator.rb +121 -0
  11. data/lib/dry/validation/extensions/monads.rb +23 -7
  12. data/lib/dry/validation/messages.rb +50 -6
  13. data/lib/dry/validation/result.rb +109 -45
  14. data/lib/dry/validation/rule.rb +37 -0
  15. data/lib/dry/validation/version.rb +3 -1
  16. metadata +36 -337
  17. data/.codeclimate.yml +0 -17
  18. data/.gitignore +0 -9
  19. data/.rspec +0 -3
  20. data/.travis.yml +0 -29
  21. data/CONTRIBUTING.md +0 -31
  22. data/Gemfile +0 -25
  23. data/Rakefile +0 -22
  24. data/benchmarks/benchmark_form_invalid.rb +0 -64
  25. data/benchmarks/benchmark_form_valid.rb +0 -64
  26. data/benchmarks/benchmark_schema_invalid_huge.rb +0 -52
  27. data/benchmarks/profile_schema_call_invalid.rb +0 -20
  28. data/benchmarks/profile_schema_call_valid.rb +0 -20
  29. data/benchmarks/profile_schema_definition.rb +0 -14
  30. data/benchmarks/profile_schema_huge_invalid.rb +0 -30
  31. data/benchmarks/profile_schema_messages_invalid.rb +0 -20
  32. data/benchmarks/suite.rb +0 -5
  33. data/config/errors.yml +0 -89
  34. data/dry-validation.gemspec +0 -28
  35. data/examples/basic.rb +0 -15
  36. data/examples/each.rb +0 -14
  37. data/examples/json.rb +0 -12
  38. data/examples/multiple.rb +0 -27
  39. data/examples/nested.rb +0 -22
  40. data/examples/params.rb +0 -11
  41. data/lib/dry/validation/compat/form.rb +0 -67
  42. data/lib/dry/validation/deprecations.rb +0 -24
  43. data/lib/dry/validation/executor.rb +0 -91
  44. data/lib/dry/validation/extensions.rb +0 -7
  45. data/lib/dry/validation/extensions/struct.rb +0 -32
  46. data/lib/dry/validation/input_processor_compiler.rb +0 -137
  47. data/lib/dry/validation/input_processor_compiler/json.rb +0 -45
  48. data/lib/dry/validation/input_processor_compiler/params.rb +0 -49
  49. data/lib/dry/validation/input_processor_compiler/sanitizer.rb +0 -47
  50. data/lib/dry/validation/message.rb +0 -98
  51. data/lib/dry/validation/message_compiler.rb +0 -188
  52. data/lib/dry/validation/message_compiler/visitor_opts.rb +0 -37
  53. data/lib/dry/validation/message_set.rb +0 -122
  54. data/lib/dry/validation/messages/abstract.rb +0 -119
  55. data/lib/dry/validation/messages/i18n.rb +0 -47
  56. data/lib/dry/validation/messages/namespaced.rb +0 -39
  57. data/lib/dry/validation/messages/yaml.rb +0 -61
  58. data/lib/dry/validation/predicate_registry.rb +0 -115
  59. data/lib/dry/validation/predicates.rb +0 -19
  60. data/lib/dry/validation/schema.rb +0 -126
  61. data/lib/dry/validation/schema/check.rb +0 -37
  62. data/lib/dry/validation/schema/class_interface.rb +0 -190
  63. data/lib/dry/validation/schema/deprecated.rb +0 -30
  64. data/lib/dry/validation/schema/dsl.rb +0 -118
  65. data/lib/dry/validation/schema/form.rb +0 -9
  66. data/lib/dry/validation/schema/json.rb +0 -21
  67. data/lib/dry/validation/schema/key.rb +0 -71
  68. data/lib/dry/validation/schema/params.rb +0 -22
  69. data/lib/dry/validation/schema/rule.rb +0 -202
  70. data/lib/dry/validation/schema/value.rb +0 -211
  71. data/lib/dry/validation/schema_compiler.rb +0 -81
  72. data/lib/dry/validation/template.rb +0 -66
  73. data/lib/dry/validation/type_specs.rb +0 -70
  74. data/spec/extensions/monads/result_spec.rb +0 -40
  75. data/spec/extensions/struct/schema_spec.rb +0 -32
  76. data/spec/fixtures/locales/en.yml +0 -8
  77. data/spec/fixtures/locales/pl.yml +0 -22
  78. data/spec/integration/custom_error_messages_spec.rb +0 -54
  79. data/spec/integration/custom_predicates_spec.rb +0 -228
  80. data/spec/integration/hints_spec.rb +0 -170
  81. data/spec/integration/injecting_rules_spec.rb +0 -30
  82. data/spec/integration/json/defining_base_schema_spec.rb +0 -41
  83. data/spec/integration/localized_error_messages_spec.rb +0 -72
  84. data/spec/integration/message_compiler_spec.rb +0 -405
  85. data/spec/integration/messages/i18n_spec.rb +0 -104
  86. data/spec/integration/optional_keys_spec.rb +0 -28
  87. data/spec/integration/params/predicates/array_spec.rb +0 -287
  88. data/spec/integration/params/predicates/empty_spec.rb +0 -263
  89. data/spec/integration/params/predicates/eql_spec.rb +0 -327
  90. data/spec/integration/params/predicates/even_spec.rb +0 -455
  91. data/spec/integration/params/predicates/excluded_from_spec.rb +0 -455
  92. data/spec/integration/params/predicates/excludes_spec.rb +0 -391
  93. data/spec/integration/params/predicates/false_spec.rb +0 -455
  94. data/spec/integration/params/predicates/filled_spec.rb +0 -467
  95. data/spec/integration/params/predicates/format_spec.rb +0 -454
  96. data/spec/integration/params/predicates/gt_spec.rb +0 -519
  97. data/spec/integration/params/predicates/gteq_spec.rb +0 -519
  98. data/spec/integration/params/predicates/included_in_spec.rb +0 -455
  99. data/spec/integration/params/predicates/includes_spec.rb +0 -391
  100. data/spec/integration/params/predicates/key_spec.rb +0 -67
  101. data/spec/integration/params/predicates/lt_spec.rb +0 -519
  102. data/spec/integration/params/predicates/lteq_spec.rb +0 -519
  103. data/spec/integration/params/predicates/max_size_spec.rb +0 -391
  104. data/spec/integration/params/predicates/min_size_spec.rb +0 -391
  105. data/spec/integration/params/predicates/none_spec.rb +0 -265
  106. data/spec/integration/params/predicates/not_eql_spec.rb +0 -327
  107. data/spec/integration/params/predicates/odd_spec.rb +0 -455
  108. data/spec/integration/params/predicates/size/fixed_spec.rb +0 -393
  109. data/spec/integration/params/predicates/size/range_spec.rb +0 -396
  110. data/spec/integration/params/predicates/true_spec.rb +0 -455
  111. data/spec/integration/params/predicates/type_spec.rb +0 -391
  112. data/spec/integration/result_spec.rb +0 -81
  113. data/spec/integration/schema/array_schema_spec.rb +0 -59
  114. data/spec/integration/schema/check_rules_spec.rb +0 -119
  115. data/spec/integration/schema/check_with_nested_el_spec.rb +0 -37
  116. data/spec/integration/schema/check_with_nth_el_spec.rb +0 -25
  117. data/spec/integration/schema/default_settings_spec.rb +0 -11
  118. data/spec/integration/schema/defining_base_schema_spec.rb +0 -41
  119. data/spec/integration/schema/dynamic_predicate_args_spec.rb +0 -43
  120. data/spec/integration/schema/each_with_set_spec.rb +0 -70
  121. data/spec/integration/schema/extending_dsl_spec.rb +0 -27
  122. data/spec/integration/schema/form_spec.rb +0 -236
  123. data/spec/integration/schema/hash_schema_spec.rb +0 -47
  124. data/spec/integration/schema/inheriting_schema_spec.rb +0 -31
  125. data/spec/integration/schema/input_processor_spec.rb +0 -46
  126. data/spec/integration/schema/json/explicit_types_spec.rb +0 -157
  127. data/spec/integration/schema/json_spec.rb +0 -163
  128. data/spec/integration/schema/macros/confirmation_spec.rb +0 -35
  129. data/spec/integration/schema/macros/each_spec.rb +0 -268
  130. data/spec/integration/schema/macros/filled_spec.rb +0 -87
  131. data/spec/integration/schema/macros/input_spec.rb +0 -139
  132. data/spec/integration/schema/macros/maybe_spec.rb +0 -99
  133. data/spec/integration/schema/macros/rule_spec.rb +0 -75
  134. data/spec/integration/schema/macros/value_spec.rb +0 -119
  135. data/spec/integration/schema/macros/when_spec.rb +0 -62
  136. data/spec/integration/schema/nested_schemas_spec.rb +0 -236
  137. data/spec/integration/schema/nested_values_spec.rb +0 -46
  138. data/spec/integration/schema/not_spec.rb +0 -34
  139. data/spec/integration/schema/numbers_spec.rb +0 -19
  140. data/spec/integration/schema/option_with_default_spec.rb +0 -64
  141. data/spec/integration/schema/or_spec.rb +0 -87
  142. data/spec/integration/schema/params/defining_base_schema_spec.rb +0 -41
  143. data/spec/integration/schema/params/explicit_types_spec.rb +0 -195
  144. data/spec/integration/schema/params_spec.rb +0 -234
  145. data/spec/integration/schema/predicate_verification_spec.rb +0 -9
  146. data/spec/integration/schema/predicates/array_spec.rb +0 -295
  147. data/spec/integration/schema/predicates/custom_spec.rb +0 -103
  148. data/spec/integration/schema/predicates/empty_spec.rb +0 -263
  149. data/spec/integration/schema/predicates/eql_spec.rb +0 -327
  150. data/spec/integration/schema/predicates/even_spec.rb +0 -455
  151. data/spec/integration/schema/predicates/excluded_from/array_spec.rb +0 -459
  152. data/spec/integration/schema/predicates/excluded_from/range_spec.rb +0 -459
  153. data/spec/integration/schema/predicates/excludes_spec.rb +0 -391
  154. data/spec/integration/schema/predicates/filled_spec.rb +0 -467
  155. data/spec/integration/schema/predicates/format_spec.rb +0 -455
  156. data/spec/integration/schema/predicates/gt_spec.rb +0 -519
  157. data/spec/integration/schema/predicates/gteq_spec.rb +0 -519
  158. data/spec/integration/schema/predicates/hash_spec.rb +0 -69
  159. data/spec/integration/schema/predicates/included_in/array_spec.rb +0 -459
  160. data/spec/integration/schema/predicates/included_in/range_spec.rb +0 -459
  161. data/spec/integration/schema/predicates/includes_spec.rb +0 -391
  162. data/spec/integration/schema/predicates/key_spec.rb +0 -88
  163. data/spec/integration/schema/predicates/lt_spec.rb +0 -520
  164. data/spec/integration/schema/predicates/lteq_spec.rb +0 -519
  165. data/spec/integration/schema/predicates/max_size_spec.rb +0 -391
  166. data/spec/integration/schema/predicates/min_size_spec.rb +0 -391
  167. data/spec/integration/schema/predicates/none_spec.rb +0 -265
  168. data/spec/integration/schema/predicates/not_eql_spec.rb +0 -391
  169. data/spec/integration/schema/predicates/odd_spec.rb +0 -455
  170. data/spec/integration/schema/predicates/size/fixed_spec.rb +0 -398
  171. data/spec/integration/schema/predicates/size/range_spec.rb +0 -395
  172. data/spec/integration/schema/predicates/type_spec.rb +0 -413
  173. data/spec/integration/schema/reusing_schema_spec.rb +0 -33
  174. data/spec/integration/schema/using_types_spec.rb +0 -135
  175. data/spec/integration/schema/validate_spec.rb +0 -120
  176. data/spec/integration/schema/xor_spec.rb +0 -35
  177. data/spec/integration/schema_builders_spec.rb +0 -17
  178. data/spec/integration/schema_spec.rb +0 -173
  179. data/spec/shared/message_compiler.rb +0 -11
  180. data/spec/shared/predicate_helper.rb +0 -15
  181. data/spec/shared/rule_compiler.rb +0 -8
  182. data/spec/spec_helper.rb +0 -62
  183. data/spec/support/define_struct.rb +0 -25
  184. data/spec/support/matchers.rb +0 -38
  185. data/spec/support/mutant.rb +0 -9
  186. data/spec/support/predicates_integration.rb +0 -7
  187. data/spec/unit/input_processor_compiler/json_spec.rb +0 -283
  188. data/spec/unit/input_processor_compiler/params_spec.rb +0 -328
  189. data/spec/unit/message_compiler/visit_failure_spec.rb +0 -38
  190. data/spec/unit/message_compiler/visit_spec.rb +0 -16
  191. data/spec/unit/message_compiler_spec.rb +0 -7
  192. data/spec/unit/predicate_registry_spec.rb +0 -34
  193. data/spec/unit/schema/key_spec.rb +0 -38
  194. data/spec/unit/schema/rule_spec.rb +0 -42
  195. data/spec/unit/schema/value_spec.rb +0 -131
  196. data/spec/unit/schema_spec.rb +0 -35
@@ -1,104 +0,0 @@
1
- require 'dry/validation/messages/i18n'
2
-
3
- RSpec.describe Messages::I18n do
4
- subject(:messages) { Messages::I18n.new }
5
-
6
- before do
7
- I18n.config.available_locales_set << :pl
8
- I18n.load_path.concat(%w(en pl).map { |l| SPEC_ROOT.join("fixtures/locales/#{l}.yml") })
9
- I18n.backend.load_translations
10
- I18n.locale = :pl
11
- end
12
-
13
- describe '#[]' do
14
- context 'with the default locale' do
15
- it 'returns nil when message is not defined' do
16
- expect(messages[:not_here, rule: :srsly]).to be(nil)
17
- end
18
-
19
- it 'returns a message for a predicate' do
20
- message = messages[:filled?, rule: :name].text
21
-
22
- expect(message).to eql("nie może być pusty")
23
- end
24
-
25
- it 'returns a message for a specific rule' do
26
- message = messages[:filled?, rule: :email].text
27
-
28
- expect(message).to eql("Proszę podać adres email")
29
- end
30
-
31
- it 'returns a message for a specific val type' do
32
- message = messages[:size?, rule: :pages, val_type: String].text
33
-
34
- expect(message).to eql("wielkość musi być równa \#{size}")
35
- end
36
-
37
- it 'returns a message for a specific rule and its default arg type' do
38
- message = messages[:size?, rule: :pages].text
39
-
40
- expect(message).to eql("wielkość musi być równa \#{size}")
41
- end
42
-
43
- it 'returns a message for a specific rule and its arg type' do
44
- message = messages[:size?, rule: :pages, arg_type: Range].text
45
-
46
- expect(message).to eql("wielkość musi być między \#{size_left} a \#{size_right}")
47
- end
48
- end
49
-
50
- context 'rule name translations' do
51
- it 'translates rule name' do
52
- msg = messages.rule('email')
53
-
54
- expect(msg).to eql('Adres email')
55
- end
56
- end
57
-
58
- context 'with a different locale' do
59
- it 'returns a message for a predicate' do
60
- message = messages[:filled?, rule: :name, locale: :en].text
61
-
62
- expect(message).to eql("must be filled")
63
- end
64
-
65
- it 'returns a message for a specific rule' do
66
- message = messages[:filled?, rule: :email, locale: :en].text
67
-
68
- expect(message).to eql("Please provide your email")
69
- end
70
-
71
- it 'returns a message for a specific rule and its default arg type' do
72
- message = messages[:size?, rule: :pages, locale: :en].text
73
-
74
- expect(message).to eql("size must be \#{size}")
75
- end
76
-
77
- it 'returns a message for a specific rule and its arg type' do
78
- message = messages[:size?, rule: :pages, arg_type: Range, locale: :en].text
79
-
80
- expect(message).to eql("size must be within \#{size_left} - \#{size_right}")
81
- end
82
- end
83
-
84
- context 'fallbacking to I18n.default_locale with fallback backend config' do
85
- before do
86
- require "i18n/backend/fallbacks"
87
- I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
88
- end
89
-
90
- it 'returns a message for a predicate in the default_locale' do
91
- pending 'FIXME: this got broken for some reason, probably an I18n issue'
92
-
93
- message = messages[:even?, rule: :some_number].text
94
-
95
- expect(I18n.locale).to eql(:pl)
96
- expect(message).to eql("must be even")
97
- end
98
- end
99
- end
100
-
101
- after(:all) do
102
- I18n.locale = I18n.default_locale
103
- end
104
- end
@@ -1,28 +0,0 @@
1
- RSpec.describe Dry::Validation::Schema do
2
- describe 'defining schema with optional keys' do
3
- subject(:schema) do
4
- Dry::Validation.Schema do
5
- optional(:email) { |email| email.filled? }
6
-
7
- required(:address).schema do
8
- required(:city, &:filled?)
9
- required(:street, &:filled?)
10
-
11
- optional(:phone_number) do
12
- none? | str?
13
- end
14
- end
15
- end
16
- end
17
-
18
- describe '#call' do
19
- it 'skips rules when key is not present' do
20
- expect(schema.(address: { city: 'NYC', street: 'Street 1/2' })).to be_success
21
- end
22
-
23
- it 'applies rules when key is present' do
24
- expect(schema.(email: '')).to_not be_success
25
- end
26
- end
27
- end
28
- end
@@ -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