dry-validation 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/LICENSE +1 -1
  4. data/README.md +9 -9
  5. data/dry-validation.gemspec +2 -1
  6. data/lib/dry/validation.rb +1 -0
  7. data/lib/dry/validation/input_type_compiler.rb +2 -2
  8. data/lib/dry/validation/schema.rb +7 -6
  9. data/lib/dry/validation/schema/key.rb +0 -2
  10. data/lib/dry/validation/version.rb +1 -1
  11. data/spec/integration/custom_predicates_spec.rb +1 -1
  12. data/spec/integration/schema_form_spec.rb +0 -2
  13. data/spec/unit/input_type_compiler_spec.rb +57 -0
  14. metadata +20 -89
  15. data/lib/dry/validation/predicate.rb +0 -35
  16. data/lib/dry/validation/predicate_set.rb +0 -22
  17. data/lib/dry/validation/predicates.rb +0 -125
  18. data/lib/dry/validation/rule.rb +0 -90
  19. data/lib/dry/validation/rule/check.rb +0 -15
  20. data/lib/dry/validation/rule/composite.rb +0 -63
  21. data/lib/dry/validation/rule/each.rb +0 -13
  22. data/lib/dry/validation/rule/group.rb +0 -21
  23. data/lib/dry/validation/rule/key.rb +0 -17
  24. data/lib/dry/validation/rule/result.rb +0 -119
  25. data/lib/dry/validation/rule/set.rb +0 -22
  26. data/lib/dry/validation/rule/value.rb +0 -13
  27. data/lib/dry/validation/rule_compiler.rb +0 -81
  28. data/spec/shared/predicates.rb +0 -35
  29. data/spec/unit/predicate_spec.rb +0 -27
  30. data/spec/unit/predicates/bool_spec.rb +0 -34
  31. data/spec/unit/predicates/date_spec.rb +0 -31
  32. data/spec/unit/predicates/date_time_spec.rb +0 -31
  33. data/spec/unit/predicates/decimal_spec.rb +0 -32
  34. data/spec/unit/predicates/empty_spec.rb +0 -38
  35. data/spec/unit/predicates/eql_spec.rb +0 -21
  36. data/spec/unit/predicates/exclusion_spec.rb +0 -35
  37. data/spec/unit/predicates/filled_spec.rb +0 -38
  38. data/spec/unit/predicates/float_spec.rb +0 -31
  39. data/spec/unit/predicates/format_spec.rb +0 -21
  40. data/spec/unit/predicates/gt_spec.rb +0 -40
  41. data/spec/unit/predicates/gteq_spec.rb +0 -40
  42. data/spec/unit/predicates/inclusion_spec.rb +0 -35
  43. data/spec/unit/predicates/int_spec.rb +0 -34
  44. data/spec/unit/predicates/key_spec.rb +0 -29
  45. data/spec/unit/predicates/lt_spec.rb +0 -40
  46. data/spec/unit/predicates/lteq_spec.rb +0 -40
  47. data/spec/unit/predicates/max_size_spec.rb +0 -49
  48. data/spec/unit/predicates/min_size_spec.rb +0 -49
  49. data/spec/unit/predicates/none_spec.rb +0 -28
  50. data/spec/unit/predicates/size_spec.rb +0 -55
  51. data/spec/unit/predicates/str_spec.rb +0 -32
  52. data/spec/unit/predicates/time_spec.rb +0 -31
  53. data/spec/unit/rule/check_spec.rb +0 -29
  54. data/spec/unit/rule/conjunction_spec.rb +0 -28
  55. data/spec/unit/rule/disjunction_spec.rb +0 -36
  56. data/spec/unit/rule/each_spec.rb +0 -20
  57. data/spec/unit/rule/group_spec.rb +0 -12
  58. data/spec/unit/rule/implication_spec.rb +0 -14
  59. data/spec/unit/rule/key_spec.rb +0 -27
  60. data/spec/unit/rule/set_spec.rb +0 -32
  61. data/spec/unit/rule/value_spec.rb +0 -42
  62. data/spec/unit/rule_compiler_spec.rb +0 -123
@@ -1,22 +0,0 @@
1
- module Dry
2
- module Validation
3
- class Rule::Set < Rule
4
- def call(input)
5
- Validation.Result(input, predicate.map { |rule| rule.(input) }, self)
6
- end
7
-
8
- def type
9
- :set
10
- end
11
-
12
- def at(*args)
13
- self.class.new(name, predicate.values_at(*args))
14
- end
15
-
16
- def to_ary
17
- [type, [name, predicate.map(&:to_ary)]]
18
- end
19
- alias_method :to_a, :to_ary
20
- end
21
- end
22
- end
@@ -1,13 +0,0 @@
1
- module Dry
2
- module Validation
3
- class Rule::Value < Rule
4
- def call(input)
5
- Validation.Result(input, predicate.(input), self)
6
- end
7
-
8
- def type
9
- :val
10
- end
11
- end
12
- end
13
- end
@@ -1,81 +0,0 @@
1
- require 'dry/validation/rule'
2
-
3
- module Dry
4
- module Validation
5
- class RuleCompiler
6
- attr_reader :predicates
7
-
8
- def initialize(predicates)
9
- @predicates = predicates
10
- end
11
-
12
- def call(ast)
13
- ast.map { |node| visit(node) }
14
- end
15
-
16
- def visit(node)
17
- name, nodes = node
18
- send(:"visit_#{name}", nodes)
19
- end
20
-
21
- def visit_check(node)
22
- name, predicate = node
23
- Rule::Check.new(name, visit(predicate))
24
- end
25
-
26
- def visit_not(node)
27
- visit(node).negation
28
- end
29
-
30
- def visit_key(node)
31
- name, predicate = node
32
- Rule::Key.new(name, visit(predicate))
33
- end
34
-
35
- def visit_val(node)
36
- name, predicate = node
37
- Rule::Value.new(name, visit(predicate))
38
- end
39
-
40
- def visit_set(node)
41
- name, rules = node
42
- Rule::Set.new(name, call(rules))
43
- end
44
-
45
- def visit_each(node)
46
- name, rule = node
47
- Rule::Each.new(name, visit(rule))
48
- end
49
-
50
- def visit_predicate(node)
51
- name, args = node
52
- predicates[name].curry(*args)
53
- end
54
-
55
- def visit_and(node)
56
- left, right = node
57
- visit(left) & visit(right)
58
- end
59
-
60
- def visit_or(node)
61
- left, right = node
62
- visit(left) | visit(right)
63
- end
64
-
65
- def visit_xor(node)
66
- left, right = node
67
- visit(left) ^ visit(right)
68
- end
69
-
70
- def visit_implication(node)
71
- left, right = node
72
- visit(left) > visit(right)
73
- end
74
-
75
- def visit_group(node)
76
- identifier, predicate = node
77
- Rule::Group.new(identifier, visit(predicate))
78
- end
79
- end
80
- end
81
- end
@@ -1,35 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.shared_examples 'predicates' do
4
- let(:none?) { Dry::Validation::Predicates[:none?] }
5
-
6
- let(:str?) { Dry::Validation::Predicates[:str?] }
7
-
8
- let(:filled?) { Dry::Validation::Predicates[:filled?] }
9
-
10
- let(:min_size?) { Dry::Validation::Predicates[:min_size?] }
11
-
12
- let(:key?) { Dry::Validation::Predicates[:key?] }
13
-
14
- let(:eql?) { Dry::Validation::Predicates[:eql?] }
15
- end
16
-
17
- RSpec.shared_examples 'a passing predicate' do
18
- let(:predicate) { Dry::Validation::Predicates[predicate_name] }
19
-
20
- it do
21
- arguments_list.each do |(left, right)|
22
- expect(predicate.call(left, right)).to be(true)
23
- end
24
- end
25
- end
26
-
27
- RSpec.shared_examples 'a failing predicate' do
28
- let(:predicate) { Dry::Validation::Predicates[predicate_name] }
29
-
30
- it do
31
- arguments_list.each do |(left, right)|
32
- expect(predicate.call(left, right)).to be(false)
33
- end
34
- end
35
- end
@@ -1,27 +0,0 @@
1
- require 'dry/validation/predicate'
2
-
3
- RSpec.describe Dry::Validation::Predicate do
4
- describe '#call' do
5
- it 'returns result of the predicate function' do
6
- is_empty = Dry::Validation::Predicate.new(:is_empty) { |str| str.empty? }
7
-
8
- expect(is_empty.('')).to be(true)
9
-
10
- expect(is_empty.('filled')).to be(false)
11
- end
12
- end
13
-
14
- describe '#curry' do
15
- it 'returns curried predicate' do
16
- min_age = Dry::Validation::Predicate.new(:min_age) { |age, input| input >= age }
17
-
18
- min_age_18 = min_age.curry(18)
19
-
20
- expect(min_age_18.args).to eql([18])
21
-
22
- expect(min_age_18.(18)).to be(true)
23
- expect(min_age_18.(19)).to be(true)
24
- expect(min_age_18.(17)).to be(false)
25
- end
26
- end
27
- end
@@ -1,34 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.describe Dry::Validation::Predicates do
4
- describe '#bool?' do
5
- let(:predicate_name) { :bool? }
6
-
7
- context 'when value is a date' do
8
- let(:arguments_list) do
9
- [[true], [false]]
10
- end
11
-
12
- it_behaves_like 'a passing predicate'
13
- end
14
-
15
- context 'with value is not an integer' do
16
- let(:arguments_list) do
17
- [
18
- [''],
19
- [[]],
20
- [{}],
21
- [nil],
22
- [:symbol],
23
- [String],
24
- [1],
25
- [0],
26
- ['true'],
27
- ['false']
28
- ]
29
- end
30
-
31
- it_behaves_like 'a failing predicate'
32
- end
33
- end
34
- end
@@ -1,31 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.describe Dry::Validation::Predicates do
4
- describe '#date?' do
5
- let(:predicate_name) { :date? }
6
-
7
- context 'when value is a date' do
8
- let(:arguments_list) do
9
- [[Date.today]]
10
- end
11
-
12
- it_behaves_like 'a passing predicate'
13
- end
14
-
15
- context 'with value is not an integer' do
16
- let(:arguments_list) do
17
- [
18
- [''],
19
- [[]],
20
- [{}],
21
- [nil],
22
- [:symbol],
23
- [String],
24
- [1]
25
- ]
26
- end
27
-
28
- it_behaves_like 'a failing predicate'
29
- end
30
- end
31
- end
@@ -1,31 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.describe Dry::Validation::Predicates do
4
- describe '#date_time?' do
5
- let(:predicate_name) { :date_time? }
6
-
7
- context 'when value is a date' do
8
- let(:arguments_list) do
9
- [[DateTime.now]]
10
- end
11
-
12
- it_behaves_like 'a passing predicate'
13
- end
14
-
15
- context 'with value is not an integer' do
16
- let(:arguments_list) do
17
- [
18
- [''],
19
- [[]],
20
- [{}],
21
- [nil],
22
- [:symbol],
23
- [String],
24
- [1]
25
- ]
26
- end
27
-
28
- it_behaves_like 'a failing predicate'
29
- end
30
- end
31
- end
@@ -1,32 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.describe Dry::Validation::Predicates do
4
- describe '#decimal?' do
5
- let(:predicate_name) { :decimal? }
6
-
7
- context 'when value is a date' do
8
- let(:arguments_list) do
9
- [[1.2.to_d]]
10
- end
11
-
12
- it_behaves_like 'a passing predicate'
13
- end
14
-
15
- context 'with value is not an integer' do
16
- let(:arguments_list) do
17
- [
18
- [''],
19
- [[]],
20
- [{}],
21
- [nil],
22
- [:symbol],
23
- [String],
24
- [1],
25
- [1.0]
26
- ]
27
- end
28
-
29
- it_behaves_like 'a failing predicate'
30
- end
31
- end
32
- end
@@ -1,38 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.describe Dry::Validation::Predicates do
4
- describe '#empty?' do
5
- let(:predicate_name) { :empty? }
6
-
7
- context 'when value is empty' do
8
- let(:arguments_list) do
9
- [
10
- [''],
11
- [[]],
12
- [{}],
13
- [nil]
14
- ]
15
- end
16
-
17
- it_behaves_like 'a passing predicate'
18
- end
19
-
20
- context 'with value is not empty' do
21
- let(:arguments_list) do
22
- [
23
- ['Jill'],
24
- [[1, 2, 3]],
25
- [{ name: 'John' }],
26
- [true],
27
- [false],
28
- ['1'],
29
- ['0'],
30
- [:symbol],
31
- [String]
32
- ]
33
- end
34
-
35
- it_behaves_like 'a failing predicate'
36
- end
37
- end
38
- end
@@ -1,21 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.describe Dry::Validation::Predicates, '#eql?' do
4
- let(:predicate_name) { :eql? }
5
-
6
- context 'when value is equal to the arg' do
7
- let(:arguments_list) do
8
- [['Foo', 'Foo']]
9
- end
10
-
11
- it_behaves_like 'a passing predicate'
12
- end
13
-
14
- context 'with value is not empty' do
15
- let(:arguments_list) do
16
- [['Bar', 'Foo']]
17
- end
18
-
19
- it_behaves_like 'a failing predicate'
20
- end
21
- end
@@ -1,35 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.describe Dry::Validation::Predicates do
4
- describe '#exclusion?' do
5
- let(:predicate_name) { :exclusion? }
6
-
7
- context 'when value is not present in list' do
8
- let(:arguments_list) do
9
- [
10
- [['Jill', 'John'], 'Jack'],
11
- [1..2, 0],
12
- [1..2, 3],
13
- [[nil, false], true]
14
- ]
15
- end
16
-
17
- it_behaves_like 'a passing predicate'
18
- end
19
-
20
- context 'with value is present in list' do
21
- let(:arguments_list) do
22
- [
23
- [['Jill', 'John'], 'Jill'],
24
- [['Jill', 'John'], 'John'],
25
- [1..2, 1],
26
- [1..2, 2],
27
- [[nil, false], nil],
28
- [[nil, false], false]
29
- ]
30
- end
31
-
32
- it_behaves_like 'a failing predicate'
33
- end
34
- end
35
- end
@@ -1,38 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.describe Dry::Validation::Predicates do
4
- describe '#filled?' do
5
- let(:predicate_name) { :filled? }
6
-
7
- context 'when value is filled' do
8
- let(:arguments_list) do
9
- [
10
- ['Jill'],
11
- [[1, 2, 3]],
12
- [{ name: 'John' }],
13
- [true],
14
- [false],
15
- ['1'],
16
- ['0'],
17
- [:symbol],
18
- [String]
19
- ]
20
- end
21
-
22
- it_behaves_like 'a passing predicate'
23
- end
24
-
25
- context 'with value is not filled' do
26
- let(:arguments_list) do
27
- [
28
- [''],
29
- [[]],
30
- [{}],
31
- [nil]
32
- ]
33
- end
34
-
35
- it_behaves_like 'a failing predicate'
36
- end
37
- end
38
- end