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,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