dry-validation 0.1.0 → 1.8.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 (82) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +969 -1
  3. data/LICENSE +1 -1
  4. data/README.md +19 -286
  5. data/config/errors.yml +4 -35
  6. data/dry-validation.gemspec +38 -22
  7. data/lib/dry/validation/config.rb +24 -0
  8. data/lib/dry/validation/constants.rb +43 -0
  9. data/lib/dry/validation/contract/class_interface.rb +230 -0
  10. data/lib/dry/validation/contract.rb +173 -0
  11. data/lib/dry/validation/evaluator.rb +233 -0
  12. data/lib/dry/validation/extensions/hints.rb +67 -0
  13. data/lib/dry/validation/extensions/monads.rb +34 -0
  14. data/lib/dry/validation/extensions/predicates_as_macros.rb +75 -0
  15. data/lib/dry/validation/failures.rb +70 -0
  16. data/lib/dry/validation/function.rb +43 -0
  17. data/lib/dry/validation/macro.rb +38 -0
  18. data/lib/dry/validation/macros.rb +104 -0
  19. data/lib/dry/validation/message.rb +100 -0
  20. data/lib/dry/validation/message_set.rb +97 -0
  21. data/lib/dry/validation/messages/resolver.rb +129 -0
  22. data/lib/dry/validation/result.rb +206 -38
  23. data/lib/dry/validation/rule.rb +116 -106
  24. data/lib/dry/validation/schema_ext.rb +19 -0
  25. data/lib/dry/validation/values.rb +108 -0
  26. data/lib/dry/validation/version.rb +3 -1
  27. data/lib/dry/validation.rb +55 -7
  28. data/lib/dry-validation.rb +3 -1
  29. metadata +80 -106
  30. data/.gitignore +0 -8
  31. data/.rspec +0 -3
  32. data/.rubocop.yml +0 -16
  33. data/.rubocop_todo.yml +0 -7
  34. data/.travis.yml +0 -29
  35. data/Gemfile +0 -11
  36. data/Rakefile +0 -12
  37. data/examples/basic.rb +0 -21
  38. data/examples/nested.rb +0 -30
  39. data/examples/rule_ast.rb +0 -33
  40. data/lib/dry/validation/error.rb +0 -43
  41. data/lib/dry/validation/error_compiler.rb +0 -116
  42. data/lib/dry/validation/messages.rb +0 -71
  43. data/lib/dry/validation/predicate.rb +0 -39
  44. data/lib/dry/validation/predicate_set.rb +0 -22
  45. data/lib/dry/validation/predicates.rb +0 -88
  46. data/lib/dry/validation/rule_compiler.rb +0 -57
  47. data/lib/dry/validation/schema/definition.rb +0 -15
  48. data/lib/dry/validation/schema/key.rb +0 -39
  49. data/lib/dry/validation/schema/rule.rb +0 -28
  50. data/lib/dry/validation/schema/value.rb +0 -31
  51. data/lib/dry/validation/schema.rb +0 -74
  52. data/rakelib/rubocop.rake +0 -18
  53. data/spec/fixtures/errors.yml +0 -4
  54. data/spec/integration/custom_error_messages_spec.rb +0 -35
  55. data/spec/integration/custom_predicates_spec.rb +0 -57
  56. data/spec/integration/validation_spec.rb +0 -118
  57. data/spec/shared/predicates.rb +0 -31
  58. data/spec/spec_helper.rb +0 -18
  59. data/spec/unit/error_compiler_spec.rb +0 -165
  60. data/spec/unit/predicate_spec.rb +0 -37
  61. data/spec/unit/predicates/empty_spec.rb +0 -38
  62. data/spec/unit/predicates/eql_spec.rb +0 -21
  63. data/spec/unit/predicates/exclusion_spec.rb +0 -35
  64. data/spec/unit/predicates/filled_spec.rb +0 -38
  65. data/spec/unit/predicates/format_spec.rb +0 -21
  66. data/spec/unit/predicates/gt_spec.rb +0 -40
  67. data/spec/unit/predicates/gteq_spec.rb +0 -40
  68. data/spec/unit/predicates/inclusion_spec.rb +0 -35
  69. data/spec/unit/predicates/int_spec.rb +0 -34
  70. data/spec/unit/predicates/key_spec.rb +0 -29
  71. data/spec/unit/predicates/lt_spec.rb +0 -40
  72. data/spec/unit/predicates/lteq_spec.rb +0 -40
  73. data/spec/unit/predicates/max_size_spec.rb +0 -49
  74. data/spec/unit/predicates/min_size_spec.rb +0 -49
  75. data/spec/unit/predicates/nil_spec.rb +0 -28
  76. data/spec/unit/predicates/size_spec.rb +0 -49
  77. data/spec/unit/predicates/str_spec.rb +0 -32
  78. data/spec/unit/rule/each_spec.rb +0 -20
  79. data/spec/unit/rule/key_spec.rb +0 -27
  80. data/spec/unit/rule/set_spec.rb +0 -32
  81. data/spec/unit/rule/value_spec.rb +0 -42
  82. data/spec/unit/rule_compiler_spec.rb +0 -86
@@ -1,118 +0,0 @@
1
- RSpec.describe Dry::Validation do
2
- subject(:validation) { schema.new }
3
-
4
- describe 'defining schema' do
5
- let(:schema) do
6
- Class.new(Dry::Validation::Schema) do
7
- key(:email) { |email| email.filled? }
8
-
9
- key(:age) do |age|
10
- age.int? & age.gt?(18)
11
- end
12
-
13
- key(:address) do |address|
14
- address.key(:city) do |city|
15
- city.min_size?(3)
16
- end
17
-
18
- address.key(:street) do |street|
19
- street.filled?
20
- end
21
-
22
- address.key(:country) do |country|
23
- country.key(:name, &:filled?)
24
- country.key(:code, &:filled?)
25
- end
26
- end
27
-
28
- key(:phone_numbers) do |phone_numbers|
29
- phone_numbers.each(&:str?)
30
- end
31
- end
32
- end
33
-
34
- let(:attrs) do
35
- {
36
- email: 'jane@doe.org',
37
- age: 19,
38
- address: { city: 'NYC', street: 'Street 1/2', country: { code: 'US', name: 'USA' } },
39
- phone_numbers: [
40
- '123456', '234567'
41
- ]
42
- }.freeze
43
- end
44
-
45
- describe '#messages' do
46
- it 'returns compiled error messages' do
47
- expect(validation.messages(attrs.merge(email: ''))).to eql([
48
- [:email, ["email must be filled"]]
49
- ])
50
- end
51
- end
52
-
53
- describe '#call' do
54
- it 'passes when attributes are valid' do
55
- expect(validation.(attrs)).to be_empty
56
- end
57
-
58
- it 'validates presence of an email and min age value' do
59
- expect(validation.(attrs.merge(email: '', age: 18))).to match_array([
60
- [:error, [:input, [:age, 18, [[:val, [:age, [:predicate, [:gt?, [18]]]]]]]]],
61
- [:error, [:input, [:email, "", [[:val, [:email, [:predicate, [:filled?, []]]]]]]]]
62
- ])
63
- end
64
-
65
- it 'validates presence of the email key and type of age value' do
66
- expect(validation.(name: 'Jane', age: '18', address: attrs[:address], phone_numbers: attrs[:phone_numbers])).to match_array([
67
- [:error, [:input, [:age, "18", [[:val, [:age, [:predicate, [:int?, []]]]]]]]],
68
- [:error, [:input, [:email, nil, [[:key, [:email, [:predicate, [:key?, [:email]]]]]]]]]
69
- ])
70
- end
71
-
72
- it 'validates presence of the address and phone_number keys' do
73
- expect(validation.(email: 'jane@doe.org', age: 19)).to match_array([
74
- [:error, [:input, [:address, nil, [[:key, [:address, [:predicate, [:key?, [:address]]]]]]]]],
75
- [:error, [:input, [:phone_numbers, nil, [[:key, [:phone_numbers, [:predicate, [:key?, [:phone_numbers]]]]]]]]]
76
- ])
77
- end
78
-
79
- it 'validates presence of keys under address and min size of the city value' do
80
- expect(validation.(attrs.merge(address: { city: 'NY' }))).to match_array([
81
- [:error, [
82
- :input, [
83
- :address, {city: "NY"},
84
- [
85
- [:input, [:city, "NY", [[:val, [:city, [:predicate, [:min_size?, [3]]]]]]]],
86
- [:input, [:street, nil, [[:key, [:street, [:predicate, [:key?, [:street]]]]]]]],
87
- [:input, [:country, nil, [[:key, [:country, [:predicate, [:key?, [:country]]]]]]]]
88
- ]
89
- ]
90
- ]]
91
- ])
92
- end
93
-
94
- it 'validates address code and name values' do
95
- expect(validation.(attrs.merge(address: attrs[:address].merge(country: { code: 'US', name: '' })))).to match_array([
96
- [:error, [
97
- :input, [
98
- :address, {city: "NYC", street: "Street 1/2", country: {code: "US", name: ""}},
99
- [
100
- [
101
- :input, [
102
- :country, {code: "US", name: ""}, [
103
- [
104
- :input, [
105
- :name, "", [[:val, [:name, [:predicate, [:filled?, []]]]]]
106
- ]
107
- ]
108
- ]
109
- ]
110
- ]
111
- ]
112
- ]
113
- ]]
114
- ])
115
- end
116
- end
117
- end
118
- end
@@ -1,31 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.shared_examples 'predicates' do
4
- let(:nil?) { Dry::Validation::Predicates[:nil?] }
5
-
6
- let(:str?) { Dry::Validation::Predicates[:str?] }
7
-
8
- let(:min_size?) { Dry::Validation::Predicates[:min_size?] }
9
-
10
- let(:key?) { Dry::Validation::Predicates[:key?] }
11
- end
12
-
13
- RSpec.shared_examples 'a passing predicate' do
14
- let(:predicate) { Dry::Validation::Predicates[predicate_name] }
15
-
16
- it do
17
- arguments_list.each do |args|
18
- expect(predicate.call(*args)).to be true
19
- end
20
- end
21
- end
22
-
23
- RSpec.shared_examples 'a failing predicate' do
24
- let(:predicate) { Dry::Validation::Predicates[predicate_name] }
25
-
26
- it do
27
- arguments_list.each do |args|
28
- expect(predicate.call(*args)).to be false
29
- end
30
- end
31
- end
data/spec/spec_helper.rb DELETED
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'dry-validation'
4
-
5
- begin
6
- require 'byebug'
7
- rescue LoadError; end
8
-
9
- SPEC_ROOT = Pathname(__dir__)
10
-
11
- Dir[SPEC_ROOT.join('shared/**/*.rb')].each(&method(:require))
12
- Dir[SPEC_ROOT.join('support/**/*.rb')].each(&method(:require))
13
-
14
- include Dry::Validation
15
-
16
- RSpec.configure do |config|
17
- config.disable_monkey_patching!
18
- end
@@ -1,165 +0,0 @@
1
- require 'dry/validation/messages'
2
- require 'dry/validation/error_compiler'
3
-
4
- RSpec.describe Dry::Validation::ErrorCompiler do
5
- subject(:error_compiler) { ErrorCompiler.new(messages) }
6
-
7
- let(:messages) do
8
- Messages.default.merge(
9
- key?: '+%{name}+ key is missing in the hash',
10
- attributes: {
11
- address: {
12
- filled?: 'Please provide your address'
13
- }
14
- }
15
- )
16
- end
17
-
18
- describe '#call' do
19
- let(:ast) do
20
- [
21
- [:error, [:input, [:name, nil, [[:key, [:name, [:predicate, [:key?, []]]]]]]]],
22
- [:error, [:input, [:age, 18, [[:val, [:age, [:predicate, [:gt?, [18]]]]]]]]],
23
- [:error, [:input, [:email, "", [[:val, [:email, [:predicate, [:filled?, []]]]]]]]],
24
- [:error, [:input, [:address, "", [[:val, [:address, [:predicate, [:filled?, []]]]]]]]]
25
- ]
26
- end
27
-
28
- it 'converts error ast into another format' do
29
- expect(error_compiler.(ast)).to eql([
30
- [:name, ["+name+ key is missing in the hash"]],
31
- [:age, ["age must be greater than 18 (18 was given)"]],
32
- [:email, ["email must be filled"]],
33
- [:address, ["Please provide your address"]]
34
- ])
35
- end
36
- end
37
-
38
- describe '#visit_predicate' do
39
- describe ':empty?' do
40
- it 'returns valid message' do
41
- msg = error_compiler.visit_predicate([:empty?, []], [], :tags)
42
-
43
- expect(msg).to eql('tags cannot be empty')
44
- end
45
- end
46
-
47
- describe ':exclusion?' do
48
- it 'returns valid message' do
49
- msg = error_compiler.visit_predicate([:exclusion?, [[1, 2, 3]]], 2, :num)
50
-
51
- expect(msg).to eql('num must not be one of: 1, 2, 3')
52
- end
53
- end
54
-
55
- describe ':inclusion?' do
56
- it 'returns valid message' do
57
- msg = error_compiler.visit_predicate([:inclusion?, [[1, 2, 3]]], 2, :num)
58
-
59
- expect(msg).to eql('num must be one of: 1, 2, 3')
60
- end
61
- end
62
-
63
- describe ':gt?' do
64
- it 'returns valid message' do
65
- msg = error_compiler.visit_predicate([:gt?, [3]], 2, :num)
66
-
67
- expect(msg).to eql('num must be greater than 3 (2 was given)')
68
- end
69
- end
70
-
71
- describe ':gteq?' do
72
- it 'returns valid message' do
73
- msg = error_compiler.visit_predicate([:gteq?, [3]], 2, :num)
74
-
75
- expect(msg).to eql('num must be greater than or equal to 3')
76
- end
77
- end
78
-
79
- describe ':lt?' do
80
- it 'returns valid message' do
81
- msg = error_compiler.visit_predicate([:lt?, [3]], 2, :num)
82
-
83
- expect(msg).to eql('num must be less than 3 (2 was given)')
84
- end
85
- end
86
-
87
- describe ':lteq?' do
88
- it 'returns valid message' do
89
- msg = error_compiler.visit_predicate([:lteq?, [3]], 2, :num)
90
-
91
- expect(msg).to eql('num must be less than or equal to 3')
92
- end
93
- end
94
-
95
- describe ':int?' do
96
- it 'returns valid message' do
97
- msg = error_compiler.visit_predicate([:int?, []], '2', :num)
98
-
99
- expect(msg).to eql('num must be an integer')
100
- end
101
- end
102
-
103
- describe ':max_size?' do
104
- it 'returns valid message' do
105
- msg = error_compiler.visit_predicate([:max_size?, [3]], 'abcd', :num)
106
-
107
- expect(msg).to eql('num size cannot be greater than 3')
108
- end
109
- end
110
-
111
- describe ':min_size?' do
112
- it 'returns valid message' do
113
- msg = error_compiler.visit_predicate([:min_size?, [3]], 'ab', :num)
114
-
115
- expect(msg).to eql('num size cannot be less than 3')
116
- end
117
- end
118
-
119
- describe ':nil?' do
120
- it 'returns valid message' do
121
- msg = error_compiler.visit_predicate([:nil?, []], nil, :num)
122
-
123
- expect(msg).to eql('num cannot be nil')
124
- end
125
- end
126
-
127
- describe ':size?' do
128
- it 'returns valid message when arg is int' do
129
- msg = error_compiler.visit_predicate([:size?, [3]], 'ab', :num)
130
-
131
- expect(msg).to eql('num size must be 3')
132
- end
133
-
134
- it 'returns valid message when arg is range' do
135
- msg = error_compiler.visit_predicate([:size?, [3..4]], 'ab', :num)
136
-
137
- expect(msg).to eql('num size must be within 3 - 4')
138
- end
139
- end
140
-
141
- describe ':str?' do
142
- it 'returns valid message' do
143
- msg = error_compiler.visit_predicate([:str?, []], 3, :num)
144
-
145
- expect(msg).to eql('num must be a string')
146
- end
147
- end
148
-
149
- describe ':format?' do
150
- it 'returns valid message' do
151
- msg = error_compiler.visit_predicate([:format?, [/^F/]], 'Bar', :str)
152
-
153
- expect(msg).to eql('str is in invalid format')
154
- end
155
- end
156
-
157
- describe ':eql?' do
158
- it 'returns valid message' do
159
- msg = error_compiler.visit_predicate([:eql?, ['Bar']], 'Foo', :str)
160
-
161
- expect(msg).to eql('str must be equal to Bar')
162
- end
163
- end
164
- end
165
- end
@@ -1,37 +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 '#negation' do
15
- it 'returns a negated version of a predicate' do
16
- is_empty = Dry::Validation::Predicate.new(:is_empty) { |str| str.empty? }
17
- is_filled = is_empty.negation
18
-
19
- expect(is_filled.('')).to be(false)
20
- expect(is_filled.('filled')).to be(true)
21
- end
22
- end
23
-
24
- describe '#curry' do
25
- it 'returns curried predicate' do
26
- min_age = Dry::Validation::Predicate.new(:min_age) { |age, input| input >= age }
27
-
28
- min_age_18 = min_age.curry(18)
29
-
30
- expect(min_age_18.args).to eql([18])
31
-
32
- expect(min_age_18.(18)).to be(true)
33
- expect(min_age_18.(19)).to be(true)
34
- expect(min_age_18.(17)).to be(false)
35
- end
36
- end
37
- 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
@@ -1,21 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.describe Dry::Validation::Predicates, '#format?' do
4
- let(:predicate_name) { :format? }
5
-
6
- context 'when value matches provided regexp' do
7
- let(:arguments_list) do
8
- [['Foo', /^F/]]
9
- end
10
-
11
- it_behaves_like 'a passing predicate'
12
- end
13
-
14
- context 'when value does not match provided regexp' do
15
- let(:arguments_list) do
16
- [['Bar', /^F/]]
17
- end
18
-
19
- it_behaves_like 'a failing predicate'
20
- end
21
- end
@@ -1,40 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.describe Dry::Validation::Predicates do
4
- describe '#gt?' do
5
- let(:predicate_name) { :gt? }
6
-
7
- context 'when value is greater than n' do
8
- let(:arguments_list) do
9
- [
10
- [13, 14],
11
- [13.37, 13.38]
12
- ]
13
- end
14
-
15
- it_behaves_like 'a passing predicate'
16
- end
17
-
18
- context 'when value is equal to n' do
19
- let(:arguments_list) do
20
- [
21
- [13, 13],
22
- [13.37, 13.37]
23
- ]
24
- end
25
-
26
- it_behaves_like 'a failing predicate'
27
- end
28
-
29
- context 'with value is less than n' do
30
- let(:arguments_list) do
31
- [
32
- [13, 12],
33
- [13.37, 13.36]
34
- ]
35
- end
36
-
37
- it_behaves_like 'a failing predicate'
38
- end
39
- end
40
- end
@@ -1,40 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.describe Dry::Validation::Predicates do
4
- describe '#gteq?' do
5
- let(:predicate_name) { :gteq? }
6
-
7
- context 'when value is greater than n' do
8
- let(:arguments_list) do
9
- [
10
- [13, 14],
11
- [13.37, 13.38]
12
- ]
13
- end
14
-
15
- it_behaves_like 'a passing predicate'
16
- end
17
-
18
- context 'when value is equal to n' do
19
- let(:arguments_list) do
20
- [
21
- [13, 13],
22
- [13.37, 13.37]
23
- ]
24
- end
25
-
26
- it_behaves_like 'a passing predicate'
27
- end
28
-
29
- context 'with value is less than n' do
30
- let(:arguments_list) do
31
- [
32
- [13, 12],
33
- [13.37, 13.36]
34
- ]
35
- end
36
-
37
- it_behaves_like 'a failing predicate'
38
- end
39
- end
40
- end
@@ -1,35 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.describe Dry::Validation::Predicates do
4
- describe '#inclusion?' do
5
- let(:predicate_name) { :inclusion? }
6
-
7
- context 'when value is present in list' do
8
- let(:arguments_list) do
9
- [
10
- [['Jill', 'John'], 'Jill'],
11
- [['Jill', 'John'], 'John'],
12
- [1..2, 1],
13
- [1..2, 2],
14
- [[nil, false], nil],
15
- [[nil, false], false]
16
- ]
17
- end
18
-
19
- it_behaves_like 'a passing predicate'
20
- end
21
-
22
- context 'with value is not present in list' do
23
- let(:arguments_list) do
24
- [
25
- [['Jill', 'John'], 'Jack'],
26
- [1..2, 0],
27
- [1..2, 3],
28
- [[nil, false], true]
29
- ]
30
- end
31
-
32
- it_behaves_like 'a failing predicate'
33
- end
34
- end
35
- end
@@ -1,34 +0,0 @@
1
- require 'dry/validation/predicates'
2
-
3
- RSpec.describe Dry::Validation::Predicates do
4
- describe '#int?' do
5
- let(:predicate_name) { :int? }
6
-
7
- context 'when value is an integer' do
8
- let(:arguments_list) do
9
- [
10
- [1],
11
- [33],
12
- [7]
13
- ]
14
- end
15
-
16
- it_behaves_like 'a passing predicate'
17
- end
18
-
19
- context 'with value is not an integer' do
20
- let(:arguments_list) do
21
- [
22
- [''],
23
- [[]],
24
- [{}],
25
- [nil],
26
- [:symbol],
27
- [String]
28
- ]
29
- end
30
-
31
- it_behaves_like 'a failing predicate'
32
- end
33
- end
34
- end