dry-validation 0.13.3 → 1.3.1

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 (206) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +233 -12
  3. data/LICENSE +1 -1
  4. data/README.md +13 -9
  5. data/config/errors.yml +3 -88
  6. data/lib/dry-validation.rb +2 -0
  7. data/lib/dry/validation.rb +47 -28
  8. data/lib/dry/validation/config.rb +24 -0
  9. data/lib/dry/validation/constants.rb +43 -0
  10. data/lib/dry/validation/contract.rb +160 -0
  11. data/lib/dry/validation/contract/class_interface.rb +223 -0
  12. data/lib/dry/validation/evaluator.rb +197 -0
  13. data/lib/dry/validation/extensions/hints.rb +69 -0
  14. data/lib/dry/validation/extensions/monads.rb +23 -7
  15. data/lib/dry/validation/extensions/predicates_as_macros.rb +75 -0
  16. data/lib/dry/validation/failures.rb +58 -0
  17. data/lib/dry/validation/function.rb +44 -0
  18. data/lib/dry/validation/macro.rb +38 -0
  19. data/lib/dry/validation/macros.rb +104 -0
  20. data/lib/dry/validation/message.rb +79 -79
  21. data/lib/dry/validation/message_set.rb +108 -88
  22. data/lib/dry/validation/messages/resolver.rb +79 -0
  23. data/lib/dry/validation/result.rb +154 -42
  24. data/lib/dry/validation/rule.rb +129 -0
  25. data/lib/dry/validation/schema_ext.rb +46 -0
  26. data/lib/dry/validation/values.rb +94 -0
  27. data/lib/dry/validation/version.rb +3 -1
  28. metadata +41 -336
  29. data/.codeclimate.yml +0 -17
  30. data/.gitignore +0 -9
  31. data/.rspec +0 -3
  32. data/.travis.yml +0 -29
  33. data/CONTRIBUTING.md +0 -31
  34. data/Gemfile +0 -25
  35. data/Rakefile +0 -22
  36. data/benchmarks/benchmark_form_invalid.rb +0 -64
  37. data/benchmarks/benchmark_form_valid.rb +0 -64
  38. data/benchmarks/benchmark_schema_invalid_huge.rb +0 -52
  39. data/benchmarks/profile_schema_call_invalid.rb +0 -20
  40. data/benchmarks/profile_schema_call_valid.rb +0 -20
  41. data/benchmarks/profile_schema_definition.rb +0 -14
  42. data/benchmarks/profile_schema_huge_invalid.rb +0 -30
  43. data/benchmarks/profile_schema_messages_invalid.rb +0 -20
  44. data/benchmarks/suite.rb +0 -5
  45. data/dry-validation.gemspec +0 -28
  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 -137
  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 -188
  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 -119
  65. data/lib/dry/validation/messages/i18n.rb +0 -47
  66. data/lib/dry/validation/messages/namespaced.rb +0 -39
  67. data/lib/dry/validation/messages/yaml.rb +0 -61
  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.rb +0 -126
  71. data/lib/dry/validation/schema/check.rb +0 -37
  72. data/lib/dry/validation/schema/class_interface.rb +0 -190
  73. data/lib/dry/validation/schema/deprecated.rb +0 -30
  74. data/lib/dry/validation/schema/dsl.rb +0 -118
  75. data/lib/dry/validation/schema/form.rb +0 -9
  76. data/lib/dry/validation/schema/json.rb +0 -21
  77. data/lib/dry/validation/schema/key.rb +0 -71
  78. data/lib/dry/validation/schema/params.rb +0 -22
  79. data/lib/dry/validation/schema/rule.rb +0 -202
  80. data/lib/dry/validation/schema/value.rb +0 -211
  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/spec/extensions/monads/result_spec.rb +0 -40
  85. data/spec/extensions/struct/schema_spec.rb +0 -32
  86. data/spec/fixtures/locales/en.yml +0 -8
  87. data/spec/fixtures/locales/pl.yml +0 -22
  88. data/spec/integration/custom_error_messages_spec.rb +0 -54
  89. data/spec/integration/custom_predicates_spec.rb +0 -228
  90. data/spec/integration/hints_spec.rb +0 -170
  91. data/spec/integration/injecting_rules_spec.rb +0 -30
  92. data/spec/integration/json/defining_base_schema_spec.rb +0 -41
  93. data/spec/integration/localized_error_messages_spec.rb +0 -72
  94. data/spec/integration/message_compiler_spec.rb +0 -405
  95. data/spec/integration/messages/i18n_spec.rb +0 -104
  96. data/spec/integration/optional_keys_spec.rb +0 -28
  97. data/spec/integration/params/predicates/array_spec.rb +0 -287
  98. data/spec/integration/params/predicates/empty_spec.rb +0 -263
  99. data/spec/integration/params/predicates/eql_spec.rb +0 -327
  100. data/spec/integration/params/predicates/even_spec.rb +0 -455
  101. data/spec/integration/params/predicates/excluded_from_spec.rb +0 -455
  102. data/spec/integration/params/predicates/excludes_spec.rb +0 -391
  103. data/spec/integration/params/predicates/false_spec.rb +0 -455
  104. data/spec/integration/params/predicates/filled_spec.rb +0 -467
  105. data/spec/integration/params/predicates/format_spec.rb +0 -454
  106. data/spec/integration/params/predicates/gt_spec.rb +0 -519
  107. data/spec/integration/params/predicates/gteq_spec.rb +0 -519
  108. data/spec/integration/params/predicates/included_in_spec.rb +0 -455
  109. data/spec/integration/params/predicates/includes_spec.rb +0 -391
  110. data/spec/integration/params/predicates/key_spec.rb +0 -67
  111. data/spec/integration/params/predicates/lt_spec.rb +0 -519
  112. data/spec/integration/params/predicates/lteq_spec.rb +0 -519
  113. data/spec/integration/params/predicates/max_size_spec.rb +0 -391
  114. data/spec/integration/params/predicates/min_size_spec.rb +0 -391
  115. data/spec/integration/params/predicates/none_spec.rb +0 -265
  116. data/spec/integration/params/predicates/not_eql_spec.rb +0 -327
  117. data/spec/integration/params/predicates/odd_spec.rb +0 -455
  118. data/spec/integration/params/predicates/size/fixed_spec.rb +0 -393
  119. data/spec/integration/params/predicates/size/range_spec.rb +0 -396
  120. data/spec/integration/params/predicates/true_spec.rb +0 -455
  121. data/spec/integration/params/predicates/type_spec.rb +0 -391
  122. data/spec/integration/result_spec.rb +0 -81
  123. data/spec/integration/schema/array_schema_spec.rb +0 -59
  124. data/spec/integration/schema/check_rules_spec.rb +0 -119
  125. data/spec/integration/schema/check_with_nested_el_spec.rb +0 -37
  126. data/spec/integration/schema/check_with_nth_el_spec.rb +0 -25
  127. data/spec/integration/schema/default_settings_spec.rb +0 -11
  128. data/spec/integration/schema/defining_base_schema_spec.rb +0 -41
  129. data/spec/integration/schema/dynamic_predicate_args_spec.rb +0 -43
  130. data/spec/integration/schema/each_with_set_spec.rb +0 -70
  131. data/spec/integration/schema/extending_dsl_spec.rb +0 -27
  132. data/spec/integration/schema/form_spec.rb +0 -236
  133. data/spec/integration/schema/hash_schema_spec.rb +0 -47
  134. data/spec/integration/schema/inheriting_schema_spec.rb +0 -31
  135. data/spec/integration/schema/input_processor_spec.rb +0 -46
  136. data/spec/integration/schema/json/explicit_types_spec.rb +0 -157
  137. data/spec/integration/schema/json_spec.rb +0 -163
  138. data/spec/integration/schema/macros/confirmation_spec.rb +0 -35
  139. data/spec/integration/schema/macros/each_spec.rb +0 -268
  140. data/spec/integration/schema/macros/filled_spec.rb +0 -87
  141. data/spec/integration/schema/macros/input_spec.rb +0 -139
  142. data/spec/integration/schema/macros/maybe_spec.rb +0 -99
  143. data/spec/integration/schema/macros/rule_spec.rb +0 -75
  144. data/spec/integration/schema/macros/value_spec.rb +0 -119
  145. data/spec/integration/schema/macros/when_spec.rb +0 -62
  146. data/spec/integration/schema/nested_schemas_spec.rb +0 -236
  147. data/spec/integration/schema/nested_values_spec.rb +0 -46
  148. data/spec/integration/schema/not_spec.rb +0 -34
  149. data/spec/integration/schema/numbers_spec.rb +0 -19
  150. data/spec/integration/schema/option_with_default_spec.rb +0 -64
  151. data/spec/integration/schema/or_spec.rb +0 -87
  152. data/spec/integration/schema/params/defining_base_schema_spec.rb +0 -41
  153. data/spec/integration/schema/params/explicit_types_spec.rb +0 -195
  154. data/spec/integration/schema/params_spec.rb +0 -234
  155. data/spec/integration/schema/predicate_verification_spec.rb +0 -9
  156. data/spec/integration/schema/predicates/array_spec.rb +0 -295
  157. data/spec/integration/schema/predicates/custom_spec.rb +0 -103
  158. data/spec/integration/schema/predicates/empty_spec.rb +0 -263
  159. data/spec/integration/schema/predicates/eql_spec.rb +0 -327
  160. data/spec/integration/schema/predicates/even_spec.rb +0 -455
  161. data/spec/integration/schema/predicates/excluded_from/array_spec.rb +0 -459
  162. data/spec/integration/schema/predicates/excluded_from/range_spec.rb +0 -459
  163. data/spec/integration/schema/predicates/excludes_spec.rb +0 -391
  164. data/spec/integration/schema/predicates/filled_spec.rb +0 -467
  165. data/spec/integration/schema/predicates/format_spec.rb +0 -455
  166. data/spec/integration/schema/predicates/gt_spec.rb +0 -519
  167. data/spec/integration/schema/predicates/gteq_spec.rb +0 -519
  168. data/spec/integration/schema/predicates/hash_spec.rb +0 -69
  169. data/spec/integration/schema/predicates/included_in/array_spec.rb +0 -459
  170. data/spec/integration/schema/predicates/included_in/range_spec.rb +0 -459
  171. data/spec/integration/schema/predicates/includes_spec.rb +0 -391
  172. data/spec/integration/schema/predicates/key_spec.rb +0 -88
  173. data/spec/integration/schema/predicates/lt_spec.rb +0 -520
  174. data/spec/integration/schema/predicates/lteq_spec.rb +0 -519
  175. data/spec/integration/schema/predicates/max_size_spec.rb +0 -391
  176. data/spec/integration/schema/predicates/min_size_spec.rb +0 -391
  177. data/spec/integration/schema/predicates/none_spec.rb +0 -265
  178. data/spec/integration/schema/predicates/not_eql_spec.rb +0 -391
  179. data/spec/integration/schema/predicates/odd_spec.rb +0 -455
  180. data/spec/integration/schema/predicates/size/fixed_spec.rb +0 -398
  181. data/spec/integration/schema/predicates/size/range_spec.rb +0 -395
  182. data/spec/integration/schema/predicates/type_spec.rb +0 -413
  183. data/spec/integration/schema/reusing_schema_spec.rb +0 -33
  184. data/spec/integration/schema/using_types_spec.rb +0 -135
  185. data/spec/integration/schema/validate_spec.rb +0 -120
  186. data/spec/integration/schema/xor_spec.rb +0 -35
  187. data/spec/integration/schema_builders_spec.rb +0 -17
  188. data/spec/integration/schema_spec.rb +0 -173
  189. data/spec/shared/message_compiler.rb +0 -11
  190. data/spec/shared/predicate_helper.rb +0 -15
  191. data/spec/shared/rule_compiler.rb +0 -8
  192. data/spec/spec_helper.rb +0 -62
  193. data/spec/support/define_struct.rb +0 -25
  194. data/spec/support/matchers.rb +0 -38
  195. data/spec/support/mutant.rb +0 -9
  196. data/spec/support/predicates_integration.rb +0 -7
  197. data/spec/unit/input_processor_compiler/json_spec.rb +0 -283
  198. data/spec/unit/input_processor_compiler/params_spec.rb +0 -328
  199. data/spec/unit/message_compiler/visit_failure_spec.rb +0 -38
  200. data/spec/unit/message_compiler/visit_spec.rb +0 -16
  201. data/spec/unit/message_compiler_spec.rb +0 -7
  202. data/spec/unit/predicate_registry_spec.rb +0 -34
  203. data/spec/unit/schema/key_spec.rb +0 -38
  204. data/spec/unit/schema/rule_spec.rb +0 -42
  205. data/spec/unit/schema/value_spec.rb +0 -131
  206. data/spec/unit/schema_spec.rb +0 -35
@@ -1,120 +0,0 @@
1
- RSpec.describe Dry::Validation::Schema, 'arbitrary validation blocks' do
2
- context 'with a single value' do
3
- subject(:schema) do
4
- Dry::Validation.Schema do
5
- configure do
6
- option :email_regex, /@/
7
-
8
- def self.messages
9
- super.merge(en: { errors: { email?: '%{value} looks like an invalid email' } })
10
- end
11
- end
12
-
13
- required(:email).filled
14
-
15
- validate(email?: :email) do |value|
16
- email_regex.match(value)
17
- end
18
- end
19
- end
20
-
21
- it 'returns success for valid input' do
22
- expect(schema.(email: 'jane@doe.org')).to be_success
23
- end
24
-
25
- it 'returns failure for invalid input' do
26
- expect(schema.(email: 'jane')).to be_failure
27
- end
28
-
29
- it 'adds correct error message' do
30
- expect(schema.(email: 'jane').messages).to eql(
31
- email: ['jane looks like an invalid email']
32
- )
33
- end
34
-
35
- it 'is not executed when deps are invalid' do
36
- expect(schema.(email: nil)).to be_failure
37
- end
38
- end
39
-
40
- context 'with more than one value' do
41
- subject(:schema) do
42
- Dry::Validation.Schema do
43
- configure do
44
- def self.messages
45
- super.merge(en: { errors: { email_required: 'provide email' }})
46
- end
47
- end
48
-
49
- required(:email).maybe(:str?)
50
- required(:newsletter).value(:bool?)
51
-
52
- validate(email_required: %i[newsletter email]) do |newsletter, email|
53
- if newsletter == true
54
- !email.nil?
55
- else
56
- true
57
- end
58
- end
59
- end
60
- end
61
-
62
- it 'returns success for valid input' do
63
- expect(schema.(newsletter: false, email: nil)).to be_success
64
- expect(schema.(newsletter: true, email: 'jane@doe.org')).to be_success
65
- end
66
-
67
- it 'returns failure for invalid input' do
68
- expect(schema.(newsletter: true, email: nil)).to be_failure
69
- end
70
-
71
- it 'adds correct error message' do
72
- expect(schema.(newsletter: true, email: nil).errors).to eql(
73
- email_required: ['provide email']
74
- )
75
- end
76
-
77
- it 'is not executed when deps are invalid' do
78
- expect(schema.(newsletter: 'oops', email: '').errors).to eql(
79
- newsletter: ['must be boolean']
80
- )
81
- end
82
- end
83
-
84
- context 'with more than one validation' do
85
- subject(:schema) do
86
- Dry::Validation.Schema do
87
- configure do
88
- option :email_regex, /@/
89
-
90
- def self.messages
91
- super.merge(en: {
92
- errors: {
93
- email?: '%{value} looks like an invalid email',
94
- google_email?: '%{value} is not a google email'
95
- } })
96
- end
97
- end
98
-
99
- required(:email).filled
100
-
101
- validate(email?: :email) do |value|
102
- email_regex.match(value)
103
- end
104
-
105
- validate(google_email?: :email) do |value|
106
- value.end_with?('@google.com')
107
- end
108
- end
109
- end
110
-
111
- it 'returns errors message for both validate' do
112
- expect(schema.(email: 'jane').messages).to eql(
113
- email: [
114
- 'jane looks like an invalid email',
115
- 'jane is not a google email'
116
- ]
117
- )
118
- end
119
- end
120
- end
@@ -1,35 +0,0 @@
1
- RSpec.describe 'Schema with xor rules' do
2
- subject(:schema) do
3
- Dry::Validation.Schema do
4
- configure do
5
- def self.messages
6
- Messages.default.merge(
7
- en: { errors: { be_reasonable: 'you cannot eat cake and have cake!' } }
8
- )
9
- end
10
- end
11
-
12
- required(:eat_cake).filled
13
-
14
- required(:have_cake).filled
15
-
16
- rule(be_reasonable: %i[eat_cake have_cake]) do |ec, hc|
17
- ec.eql?('yes!') ^ hc.eql?('yes!')
18
- end
19
- end
20
- end
21
-
22
- describe '#messages' do
23
- it 'passes when only one option is selected' do
24
- messages = schema.(eat_cake: 'yes!', have_cake: 'no!').messages[:be_reasonable]
25
-
26
- expect(messages).to be(nil)
27
- end
28
-
29
- it 'fails when both options are selected' do
30
- expect(schema.(eat_cake: 'yes!', have_cake: 'yes!').messages).to eql(
31
- be_reasonable: ['you cannot eat cake and have cake!']
32
- )
33
- end
34
- end
35
- end
@@ -1,17 +0,0 @@
1
- RSpec.describe 'Building schemas' do
2
- describe 'Dry::Validation.Schema' do
3
- it 'builds a schema class with custom predicate set' do
4
- predicates = Module.new do
5
- include Dry::Logic::Predicates
6
-
7
- def zomg?(*)
8
- true
9
- end
10
- end
11
-
12
- schema = Dry::Validation.Schema(predicates: predicates, build: false)
13
-
14
- expect(schema.predicates[:key?]).to be_a(Method)
15
- end
16
- end
17
- end
@@ -1,173 +0,0 @@
1
- RSpec.describe Dry::Validation::Schema, 'defining key-based schema' do
2
- describe 'with a flat structure' do
3
- subject(:schema) do
4
- Dry::Validation.Schema do
5
- configure do
6
- config.input_processor = :params
7
- config.type_specs = true
8
- end
9
-
10
- required(:email, :string).filled
11
- required(:age, [:nil, :integer]) { none? | (int? & gt?(18)) }
12
- end
13
- end
14
-
15
- it 'passes when input is valid' do
16
- expect(schema.(email: 'jane@doe', age: 19)).to be_success
17
- expect(schema.(email: 'jane@doe', age: nil)).to be_success
18
- end
19
-
20
- it 'fails when input is not valid' do
21
- expect(schema.(email: 'jane@doe', age: 17)).to_not be_success
22
- end
23
-
24
- it 'returns result which quacks like hash' do
25
- input = { email: 'jane@doe', age: 19 }
26
- result = schema.(input)
27
-
28
- expect(result[:email]).to eql('jane@doe')
29
- expect(Hash[result]).to eql(input)
30
-
31
- expect(result.to_a).to eql([[:email, 'jane@doe'], [:age, 19]])
32
- end
33
-
34
- describe '#type_map' do
35
- it 'returns key=>type map' do
36
- expect(schema.type_map).to eql(
37
- email: Types::String, age: Types::Params::Nil | Types::Params::Integer
38
- )
39
- end
40
-
41
- it 'uses type_map for input processor when it is not empty' do
42
- expect(schema.(email: 'jane@doe.org', age: '18').to_h).to eql(
43
- email: 'jane@doe.org', age: 18
44
- )
45
- end
46
- end
47
- end
48
-
49
- describe 'with nested structures' do
50
- subject(:schema) do
51
- class Test::CountrySchema
52
- def self.schema
53
- Dry::Validation.Schema do
54
- required(:name).filled
55
- required(:code).filled
56
- end
57
- end
58
- end
59
-
60
- Dry::Validation.Schema do
61
- required(:email).filled
62
-
63
- required(:age).maybe(:int?, gt?: 18)
64
-
65
- required(:address).schema do
66
- required(:city).filled(min_size?: 3)
67
-
68
- required(:street).filled
69
-
70
- required(:country).schema(Test::CountrySchema)
71
- end
72
-
73
- required(:phone_numbers).each(:str?)
74
- end
75
- end
76
-
77
- let(:input) do
78
- {
79
- email: 'jane@doe.org',
80
- age: 19,
81
- address: { city: 'NYC', street: 'Street 1/2', country: { code: 'US', name: 'USA' } },
82
- phone_numbers: [
83
- '123456', '234567'
84
- ]
85
- }.freeze
86
- end
87
-
88
- describe '#messages' do
89
- it 'returns compiled error messages' do
90
- expect(schema.(input.merge(email: '')).messages).to eql(
91
- email: ['must be filled']
92
- )
93
- end
94
- end
95
-
96
- describe '#call' do
97
- it 'passes when attributes are valid' do
98
- expect(schema.(input)).to be_success
99
- end
100
-
101
- it 'validates presence of an email and min age value' do
102
- expect(schema.(input.merge(email: '', age: 18)).messages).to eql(
103
- email: ['must be filled'], age: ['must be greater than 18']
104
- )
105
- end
106
-
107
- it 'validates presence of the email key and type of age value' do
108
- attrs = {
109
- name: 'Jane',
110
- age: '18',
111
- address: input[:address], phone_numbers: input[:phone_numbers]
112
- }
113
-
114
- expect(schema.(attrs).messages).to eql(
115
- email: ['is missing'],
116
- age: ['must be an integer', 'must be greater than 18']
117
- )
118
- end
119
-
120
- it 'validates presence of the address and phone_number keys' do
121
- attrs = { email: 'jane@doe.org', age: 19 }
122
-
123
- expect(schema.(attrs).messages).to eql(
124
- address: ['is missing'], phone_numbers: ['is missing']
125
- )
126
- end
127
-
128
- it 'validates presence of keys under address and min size of the city value' do
129
- attrs = input.merge(address: { city: 'NY' })
130
-
131
- expect(schema.(attrs).messages).to eql(
132
- address: {
133
- street: ['is missing'],
134
- country: ['is missing'],
135
- city: ['size cannot be less than 3']
136
- }
137
- )
138
- end
139
-
140
- it 'validates address type' do
141
- expect(schema.(input.merge(address: 'totally not a hash')).messages).to eql(
142
- address: ['must be a hash']
143
- )
144
- end
145
-
146
- it 'validates address code and name values' do
147
- attrs = input.merge(
148
- address: input[:address].merge(country: { code: 'US', name: '' })
149
- )
150
-
151
- expect(schema.(attrs).messages).to eql(
152
- address: { country: { name: ['must be filled'] } }
153
- )
154
- end
155
-
156
- it 'validates each phone number' do
157
- attrs = input.merge(phone_numbers: ['123', 312])
158
-
159
- expect(schema.(attrs).messages).to eql(
160
- phone_numbers: { 1 => ['must be a string'] }
161
- )
162
- end
163
- end
164
- end
165
-
166
- context 'nested keys' do
167
- it 'raises error when defining nested keys without `schema` block`' do
168
- expect {
169
- Dry::Validation.Schema { required(:foo).value { required(:bar).value(:str?) } }
170
- }.to raise_error(ArgumentError, /required/)
171
- end
172
- end
173
- end
@@ -1,11 +0,0 @@
1
- RSpec.shared_context :message_compiler do
2
- subject(:compiler) { Dry::Validation::MessageCompiler.new(messages) }
3
-
4
- let(:messages) do
5
- Dry::Validation::Messages.default
6
- end
7
-
8
- let(:result) do
9
- compiler.public_send(visitor, node)
10
- end
11
- end
@@ -1,15 +0,0 @@
1
- RSpec.shared_context 'predicate helper' do
2
- def p(name, *args)
3
- Dry::Logic::Rule::Predicate.new(predicates[name], args: args).to_ast
4
- end
5
-
6
- let!(:predicates) do
7
- Module.new {
8
- include Dry::Logic::Predicates
9
-
10
- def self.email?(value)
11
- true
12
- end
13
- }
14
- end
15
- end
@@ -1,8 +0,0 @@
1
- require 'dry/logic/rule_compiler'
2
- require 'dry/logic/predicates'
3
-
4
- RSpec.shared_context 'rule compiler' do
5
- let(:rule_compiler) do
6
- Dry::Logic::RuleCompiler.new(Dry::Logic::Predicates)
7
- end
8
- end
@@ -1,62 +0,0 @@
1
- if ENV['COVERAGE'] == 'true' && RUBY_ENGINE == 'ruby' && RUBY_VERSION == '2.3.1'
2
- require "simplecov"
3
- SimpleCov.start do
4
- add_filter '/spec/'
5
- end
6
- end
7
-
8
- begin
9
- require 'pry'
10
- require 'pry-byebug'
11
- rescue LoadError
12
- end
13
-
14
- require 'dry-validation'
15
- require 'dry/core/constants'
16
- require 'ostruct'
17
-
18
- SPEC_ROOT = Pathname(__dir__)
19
-
20
- Dir[SPEC_ROOT.join('shared/**/*.rb')].each(&method(:require))
21
- Dir[SPEC_ROOT.join('support/**/*.rb')].each(&method(:require))
22
-
23
- include Dry::Validation
24
-
25
- module Types
26
- include Dry::Types.module
27
- end
28
-
29
- Dry::Validation::Deprecations.configure do |config|
30
- config.logger = Logger.new(SPEC_ROOT.join('../log/deprecations.log'))
31
- end
32
-
33
- RSpec.configure do |config|
34
- config.disable_monkey_patching!
35
- config.warnings = true
36
-
37
- config.after do
38
- if defined?(I18n)
39
- I18n.load_path = Dry::Validation.messages_paths.dup
40
- I18n.backend.reload!
41
- end
42
- end
43
-
44
- config.include PredicatesIntegration
45
-
46
- config.before do
47
- module Test
48
- def self.remove_constants
49
- constants.each { |const| remove_const(const) }
50
- self
51
- end
52
- end
53
-
54
- Dry::Validation::Messages::Abstract.instance_variable_set('@cache', nil)
55
- Dry::Validation::Messages::YAML.instance_variable_set('@cache', nil)
56
- Dry::Validation::Messages::I18n.instance_variable_set('@cache', nil) if defined?(I18n)
57
- end
58
-
59
- config.after do
60
- Object.send(:remove_const, Test.remove_constants.name)
61
- end
62
- end