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,38 +0,0 @@
1
- RSpec.describe Dry::Validation::MessageCompiler, '#visit_failure' do
2
- include_context :message_compiler
3
-
4
- let(:visitor) { :visit_failure }
5
-
6
- context 'with :int? predicate' do
7
- let(:node) do
8
- [:age, [:key, [:age, [:predicate, [:int?, [[:input, '17']]]]]]]
9
- end
10
-
11
- it 'returns a message for :int? failure with :rule name inferred from key-rule' do
12
- expect(result.rule).to be(:age)
13
- expect(result.path).to eql([:age])
14
- expect(result).to eql('must be an integer')
15
- end
16
- end
17
-
18
- context 'with set failure and :int? predicate' do
19
- let(:node) do
20
- [:items, [:key, [:items, [:set, [
21
- [:key, [0, [:predicate, [:int?, [[:input, 'foo']]]]]],
22
- [:key, [2, [:predicate, [:int?, [[:input, 'bar']]]]]]
23
- ]]]]]
24
- end
25
-
26
- it 'returns a message for the first element that failed' do
27
- expect(result[0].rule).to be(:items)
28
- expect(result[0].path).to eql([:items, 0])
29
- expect(result[0]).to eql('must be an integer')
30
- end
31
-
32
- it 'returns a message for the third element that failed' do
33
- expect(result[1].rule).to be(:items)
34
- expect(result[1].path).to eql([:items, 2])
35
- expect(result[1]).to eql('must be an integer')
36
- end
37
- end
38
- end
@@ -1,16 +0,0 @@
1
- RSpec.describe Dry::Validation::MessageCompiler, '#visit' do
2
- include_context :message_compiler
3
-
4
- let(:visitor) { :visit }
5
-
6
- context 'with an anonymous :failure' do
7
- let(:node) do
8
- [:failure, [:age, [:key, [:age, [:predicate, [:int?, [[:input, '17']]]]]]]]
9
- end
10
-
11
- it 'returns a message for :int? failure with :rule name inferred from key-rule' do
12
- expect(result.rule).to be(:age)
13
- expect(result).to eql('must be an integer')
14
- end
15
- end
16
- end
@@ -1,7 +0,0 @@
1
- RSpec.describe MessageCompiler, '#call' do
2
- subject(:message_compiler) { MessageCompiler.new( Messages.default ) }
3
-
4
- it 'returns an empty hash when there are no errors' do
5
- expect(message_compiler.([])).to be_empty
6
- end
7
- end
@@ -1,34 +0,0 @@
1
- require 'dry/validation/predicate_registry'
2
-
3
- RSpec.describe PredicateRegistry do
4
- subject!(:predicate_registry) { schema_class.registry }
5
-
6
- let(:schema_class) { Class.new(Schema) }
7
- let(:schema) { schema_class.new }
8
-
9
- before do
10
- schema_class.class_eval { def dis_ok?; true; end }
11
- end
12
-
13
- describe '.[]' do
14
- it 'returns a registry which collects predicate methods' do
15
- expect(predicate_registry[:dis_ok?]).to be_instance_of(UnboundMethod)
16
- end
17
- end
18
-
19
- describe '#[]' do
20
- it 'gives access to built-in predicates' do
21
- expect(predicate_registry[:filled?].("sutin")).to be(true)
22
- end
23
- end
24
-
25
- describe '#bind' do
26
- it 'binds unbound predicates and return finalized registry' do
27
- registry = predicate_registry.bind(schema)
28
-
29
- expect(registry).to be_frozen
30
- expect(registry[:dis_ok?]).to be_a(Method)
31
- expect(registry[:dis_ok?].()).to be(true)
32
- end
33
- end
34
- end
@@ -1,38 +0,0 @@
1
- RSpec.describe Schema::Key do
2
- include_context 'predicate helper'
3
-
4
- let(:registry) { PredicateRegistry.new(predicates) }
5
-
6
- describe '#str?' do
7
- subject(:user) { Schema::Key[:user, registry: registry] }
8
-
9
- it 'returns a key rule' do
10
- expect(user.str?.to_ast).to eql(
11
- [:rule, [:user, [:key, [:user, [:predicate, [:str?, [[:input, Undefined]]]]]]]]
12
- )
13
- end
14
-
15
- it 'returns a key rule & disjunction rule created within the block' do
16
- user.hash? do
17
- required(:email) { none? | filled? }
18
- end
19
-
20
- expect(user.to_ast).to eql(
21
- [:key, [:user, [:rule, [:user,
22
- [:and, [
23
- [:rule, [:user, [:predicate, [:hash?, [[:input, Undefined]]]]]],
24
- [:rule, [:user, [:key, [:user, [:rule, [:email,
25
- [:and, [
26
- [:rule, [:email, [:predicate, [:key?, [[:name, :email], [:input, Undefined]]]]]],
27
- [:rule, [:user, [:rule, [:email,
28
- [:or, [
29
- [:rule, [:email, [:key, [:email, [:predicate, [:none?, [[:input, Undefined]]]]]]]],
30
- [:rule, [:email, [:key, [:email, [:predicate, [:filled?, [[:input, Undefined]]]]]]]]
31
- ]]]]]]
32
- ]]]]]]]
33
- ]]]
34
- ]]]]
35
- )
36
- end
37
- end
38
- end
@@ -1,42 +0,0 @@
1
- RSpec.describe Schema::Rule do
2
- include_context 'predicate helper'
3
-
4
- let(:filled) { p(:filled?) }
5
- let(:format) { p(:format?, /regex/) }
6
-
7
- let(:left) { Schema::Rule.new(filled, name: :email, target: target) }
8
- let(:right) { Schema::Rule.new(format, name: :email, target: target) }
9
- let(:target) { double(:target, id: :user) }
10
-
11
- describe '#and' do
12
- it 'returns a conjunction' do
13
- expect(left.and(right).to_ast).to match_array(
14
- [:rule, [:email, [:and, [[:rule, [:email, filled]], [:rule, [:email, format]]]]]]
15
- )
16
- end
17
- end
18
-
19
- describe '#or' do
20
- it 'returns a disjunction' do
21
- expect(left.or(right).to_ast).to match_array(
22
- [:rule, [:email, [:or, [[:rule, [:email, filled]], [:rule, [:email, format]]]]]]
23
- )
24
- end
25
- end
26
-
27
- describe '#xor' do
28
- it 'returns an exclusive disjunction' do
29
- expect(left.xor(right).to_ast).to match_array(
30
- [:rule, [:email, [:xor, [[:rule, [:email, filled]], [:rule, [:email, format]]]]]]
31
- )
32
- end
33
- end
34
-
35
- describe '#then' do
36
- it 'returns an implication' do
37
- expect(left.then(right).to_ast).to match_array(
38
- [:rule, [:email, [:implication, [[:rule, [:email, filled]], [:rule, [:email, format]]]]]]
39
- )
40
- end
41
- end
42
- end
@@ -1,131 +0,0 @@
1
- RSpec.describe Schema::Value do
2
- include_context 'rule compiler'
3
- include_context 'predicate helper'
4
-
5
- let(:registry) { PredicateRegistry.new(predicates) }
6
-
7
- describe '#required' do
8
- subject(:value) { Schema::Value.new(registry: registry) }
9
-
10
- let(:expected_ast) do
11
- [:rule, [:address, [:and, [
12
- [:rule, [:address, [:predicate, [:key?, [[:name, :address], [:input, Undefined]]]]]],
13
- [:rule, [:address, [:key, [:address, [:predicate, [:filled?, [[:input, Undefined]]]]]]]]
14
- ]]]]
15
- end
16
-
17
- it 'creates a rule for a specified key using a block' do
18
- rule = value.required(:address, &:filled?)
19
- expect(rule.to_ast).to eql(expected_ast)
20
- end
21
-
22
- it 'creates a rule for a specified key using a macro' do
23
- rule = value.required(:address).filled
24
- expect(rule.to_ast).to eql(expected_ast)
25
- end
26
- end
27
-
28
- describe '#each' do
29
- subject(:value) { Schema::Value.new(registry: registry) }
30
-
31
- it 'creates an each rule with another rule returned from the block' do
32
- rule = value.each { key?(:method) }
33
-
34
- expect(rule.to_ast).to eql(
35
- [:and, [
36
- [:predicate, [:array?, [[:input, Undefined]]]],
37
- [:each, [:predicate, [:key?, [[:name, :method], [:input, Undefined]]]]]
38
- ]]
39
- )
40
- end
41
-
42
- it 'creates an each rule with other rules returned from the block' do
43
- rule = value.each do
44
- required(:method) { str? }
45
- required(:amount) { float? }
46
- end
47
-
48
- expect(rule.to_ast).to eql(
49
- [:and, [
50
- [:predicate, [:array?, [[:input, Undefined]]]],
51
- [:each, [:set, [
52
- [:rule, [:method, [:and, [
53
- [:rule, [:method, [:predicate, [:key?, [[:name, :method], [:input, Undefined]]]]]],
54
- [:rule, [:method, [:key, [:method, [:predicate, [:str?, [[:input, Undefined]]]]]]]]]
55
- ]]],
56
- [:rule, [:amount, [:and, [
57
- [:rule, [:amount, [:predicate, [:key?, [[:name, :amount], [:input, Undefined]]]]]],
58
- [:rule, [:amount, [:key, [:amount, [:predicate, [:float?, [[:input, Undefined]]]]]]]]
59
- ]]]]
60
- ]]]
61
- ]]
62
- )
63
- end
64
- end
65
-
66
- describe '#hash? with block' do
67
- subject(:user) { Schema::Value.new(registry: registry) }
68
-
69
- it 'builds hash? & rule created within the block' do
70
- rule = user.hash? { required(:email).filled }
71
-
72
- expect(rule.to_ast).to eql(
73
- [:and, [
74
- [:predicate, [:hash?, [[:input, Undefined]]]],
75
- [:rule, [:email, [:and, [
76
- [:rule, [:email, [:predicate, [:key?, [[:name, :email], [:input, Undefined]]]]]],
77
- [:rule, [:email, [:key, [:email, [:predicate, [:filled?, [[:input, Undefined]]]]]]]]
78
- ]]]]
79
- ]]
80
- )
81
- end
82
-
83
- it 'builds hash? & rule created within the block with deep nesting' do
84
- rule = user.hash? do
85
- required(:address) do
86
- hash? do
87
- required(:city).filled
88
- required(:zipcode).filled
89
- end
90
- end
91
- end
92
-
93
- expect(rule.to_ast).to eql(
94
- [:and, [
95
- [:predicate, [:hash?, [[:input, Undefined]]]],
96
- [:rule, [:address, [:and, [
97
- [:rule, [:address, [:predicate, [:key?, [[:name, :address], [:input, Undefined]]]]]],
98
- [:rule, [:address, [:and, [
99
- [:rule, [:address, [:predicate, [:hash?, [[:input, Undefined]]]]]],
100
- [:rule, [:address, [:key, [:address, [:set, [
101
- [:rule, [:city, [:and, [
102
- [:rule, [:city, [:predicate, [:key?, [[:name, :city], [:input, Undefined]]]]]],
103
- [:rule, [:city, [:key, [:city, [:predicate, [:filled?, [[:input, Undefined]]]]]]]]
104
- ]]]],
105
- [:rule, [:zipcode, [:and, [
106
- [:rule, [:zipcode, [:predicate, [:key?, [[:name, :zipcode], [:input, Undefined]]]]]],
107
- [:rule, [:zipcode, [:key, [:zipcode, [:predicate, [:filled?, [[:input, Undefined]]]]]]]]
108
- ]]]]
109
- ]]]]]]
110
- ]]]]
111
- ]]]]
112
- ]]
113
- )
114
- end
115
- end
116
-
117
- describe '#not' do
118
- subject(:user) { Schema::Value.new(registry: registry) }
119
-
120
- it 'builds a negated rule' do
121
- not_email = user.required(:email) { str?.not }
122
-
123
- expect(not_email.to_ast).to eql(
124
- [:rule, [:email, [:and, [
125
- [:rule, [:email, [:predicate, [:key?, [[:name, :email], [:input, Undefined]]]]]],
126
- [:rule, [:email, [:not, [:key, [:email, [:predicate, [:str?, [[:input, Undefined]]]]]]]]]]
127
- ]]]
128
- )
129
- end
130
- end
131
- end
@@ -1,35 +0,0 @@
1
- require 'dry/validation/messages/i18n'
2
-
3
- RSpec.describe Schema do
4
- describe '.messages' do
5
- context 'with default setting' do
6
- let(:schema) do
7
- Class.new(Schema)
8
- end
9
-
10
- it 'returns default yaml messages' do
11
- expect(schema.messages).to be_instance_of(Messages::YAML)
12
- end
13
- end
14
-
15
- context 'with i18n setting' do
16
- let(:schema) do
17
- Class.new(Schema) { configure { config.messages = :i18n } }
18
- end
19
-
20
- it 'returns default i18n messages' do
21
- expect(schema.messages).to be_instance_of(Messages::I18n)
22
- end
23
- end
24
-
25
- context 'with an invalid setting' do
26
- let(:schema) do
27
- Class.new(Schema) { configure { config.messages = :oops } }
28
- end
29
-
30
- it 'returns default i18n messages' do
31
- expect { schema.messages }.to raise_error(RuntimeError, /oops/)
32
- end
33
- end
34
- end
35
- end