dry-validation 0.12.0 → 1.6.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +696 -239
- data/LICENSE +1 -1
- data/README.md +15 -12
- data/config/errors.yml +3 -88
- data/dry-validation.gemspec +31 -17
- data/lib/dry-validation.rb +3 -1
- data/lib/dry/validation.rb +45 -28
- data/lib/dry/validation/config.rb +24 -0
- data/lib/dry/validation/constants.rb +43 -0
- data/lib/dry/validation/contract.rb +171 -0
- data/lib/dry/validation/contract/class_interface.rb +230 -0
- data/lib/dry/validation/evaluator.rb +224 -0
- data/lib/dry/validation/extensions/hints.rb +67 -0
- data/lib/dry/validation/extensions/monads.rb +24 -8
- data/lib/dry/validation/extensions/predicates_as_macros.rb +75 -0
- data/lib/dry/validation/failures.rb +70 -0
- data/lib/dry/validation/function.rb +44 -0
- data/lib/dry/validation/macro.rb +38 -0
- data/lib/dry/validation/macros.rb +104 -0
- data/lib/dry/validation/message.rb +80 -80
- data/lib/dry/validation/message_set.rb +80 -105
- data/lib/dry/validation/messages/resolver.rb +131 -0
- data/lib/dry/validation/result.rb +183 -41
- data/lib/dry/validation/rule.rb +135 -0
- data/lib/dry/validation/schema_ext.rb +19 -0
- data/lib/dry/validation/values.rb +104 -0
- data/lib/dry/validation/version.rb +3 -1
- metadata +47 -336
- data/.codeclimate.yml +0 -17
- data/.gitignore +0 -9
- data/.rspec +0 -3
- data/.travis.yml +0 -26
- data/CONTRIBUTING.md +0 -31
- data/Gemfile +0 -33
- data/Rakefile +0 -22
- data/benchmarks/benchmark_form_invalid.rb +0 -64
- data/benchmarks/benchmark_form_valid.rb +0 -64
- data/benchmarks/benchmark_schema_invalid_huge.rb +0 -52
- data/benchmarks/profile_schema_call_invalid.rb +0 -20
- data/benchmarks/profile_schema_call_valid.rb +0 -20
- data/benchmarks/profile_schema_definition.rb +0 -14
- data/benchmarks/profile_schema_huge_invalid.rb +0 -30
- data/benchmarks/profile_schema_messages_invalid.rb +0 -20
- data/benchmarks/suite.rb +0 -5
- data/examples/basic.rb +0 -15
- data/examples/each.rb +0 -14
- data/examples/json.rb +0 -12
- data/examples/multiple.rb +0 -27
- data/examples/nested.rb +0 -22
- data/examples/params.rb +0 -11
- data/lib/dry/validation/compat/form.rb +0 -67
- data/lib/dry/validation/deprecations.rb +0 -24
- data/lib/dry/validation/executor.rb +0 -91
- data/lib/dry/validation/extensions.rb +0 -7
- data/lib/dry/validation/extensions/struct.rb +0 -32
- data/lib/dry/validation/input_processor_compiler.rb +0 -135
- data/lib/dry/validation/input_processor_compiler/json.rb +0 -45
- data/lib/dry/validation/input_processor_compiler/params.rb +0 -49
- data/lib/dry/validation/input_processor_compiler/sanitizer.rb +0 -47
- data/lib/dry/validation/message_compiler.rb +0 -192
- data/lib/dry/validation/message_compiler/visitor_opts.rb +0 -37
- data/lib/dry/validation/messages.rb +0 -14
- data/lib/dry/validation/messages/abstract.rb +0 -112
- data/lib/dry/validation/messages/i18n.rb +0 -35
- data/lib/dry/validation/messages/namespaced.rb +0 -32
- data/lib/dry/validation/messages/yaml.rb +0 -54
- data/lib/dry/validation/predicate_registry.rb +0 -115
- data/lib/dry/validation/schema.rb +0 -126
- data/lib/dry/validation/schema/check.rb +0 -37
- data/lib/dry/validation/schema/class_interface.rb +0 -189
- data/lib/dry/validation/schema/deprecated.rb +0 -30
- data/lib/dry/validation/schema/dsl.rb +0 -118
- data/lib/dry/validation/schema/form.rb +0 -9
- data/lib/dry/validation/schema/json.rb +0 -21
- data/lib/dry/validation/schema/key.rb +0 -71
- data/lib/dry/validation/schema/params.rb +0 -22
- data/lib/dry/validation/schema/rule.rb +0 -202
- data/lib/dry/validation/schema/value.rb +0 -211
- data/lib/dry/validation/schema_compiler.rb +0 -81
- data/lib/dry/validation/type_specs.rb +0 -70
- data/spec/extensions/monads/result_spec.rb +0 -40
- data/spec/extensions/struct/schema_spec.rb +0 -32
- data/spec/fixtures/locales/en.yml +0 -6
- data/spec/fixtures/locales/pl.yml +0 -18
- data/spec/integration/custom_error_messages_spec.rb +0 -48
- data/spec/integration/custom_predicates_spec.rb +0 -228
- data/spec/integration/hints_spec.rb +0 -170
- data/spec/integration/injecting_rules_spec.rb +0 -30
- data/spec/integration/json/defining_base_schema_spec.rb +0 -41
- data/spec/integration/localized_error_messages_spec.rb +0 -72
- data/spec/integration/message_compiler_spec.rb +0 -405
- data/spec/integration/messages/i18n_spec.rb +0 -94
- data/spec/integration/optional_keys_spec.rb +0 -28
- data/spec/integration/params/predicates/array_spec.rb +0 -287
- data/spec/integration/params/predicates/empty_spec.rb +0 -263
- data/spec/integration/params/predicates/eql_spec.rb +0 -327
- data/spec/integration/params/predicates/even_spec.rb +0 -455
- data/spec/integration/params/predicates/excluded_from_spec.rb +0 -455
- data/spec/integration/params/predicates/excludes_spec.rb +0 -391
- data/spec/integration/params/predicates/false_spec.rb +0 -455
- data/spec/integration/params/predicates/filled_spec.rb +0 -467
- data/spec/integration/params/predicates/format_spec.rb +0 -454
- data/spec/integration/params/predicates/gt_spec.rb +0 -519
- data/spec/integration/params/predicates/gteq_spec.rb +0 -519
- data/spec/integration/params/predicates/included_in_spec.rb +0 -455
- data/spec/integration/params/predicates/includes_spec.rb +0 -391
- data/spec/integration/params/predicates/key_spec.rb +0 -67
- data/spec/integration/params/predicates/lt_spec.rb +0 -519
- data/spec/integration/params/predicates/lteq_spec.rb +0 -519
- data/spec/integration/params/predicates/max_size_spec.rb +0 -391
- data/spec/integration/params/predicates/min_size_spec.rb +0 -391
- data/spec/integration/params/predicates/none_spec.rb +0 -265
- data/spec/integration/params/predicates/not_eql_spec.rb +0 -327
- data/spec/integration/params/predicates/odd_spec.rb +0 -455
- data/spec/integration/params/predicates/size/fixed_spec.rb +0 -393
- data/spec/integration/params/predicates/size/range_spec.rb +0 -396
- data/spec/integration/params/predicates/true_spec.rb +0 -455
- data/spec/integration/params/predicates/type_spec.rb +0 -391
- data/spec/integration/result_spec.rb +0 -81
- data/spec/integration/schema/array_schema_spec.rb +0 -59
- data/spec/integration/schema/check_rules_spec.rb +0 -119
- data/spec/integration/schema/check_with_nested_el_spec.rb +0 -37
- data/spec/integration/schema/check_with_nth_el_spec.rb +0 -25
- data/spec/integration/schema/default_settings_spec.rb +0 -11
- data/spec/integration/schema/defining_base_schema_spec.rb +0 -41
- data/spec/integration/schema/dynamic_predicate_args_spec.rb +0 -43
- data/spec/integration/schema/each_with_set_spec.rb +0 -70
- data/spec/integration/schema/extending_dsl_spec.rb +0 -27
- data/spec/integration/schema/form_spec.rb +0 -236
- data/spec/integration/schema/hash_schema_spec.rb +0 -47
- data/spec/integration/schema/inheriting_schema_spec.rb +0 -31
- data/spec/integration/schema/input_processor_spec.rb +0 -46
- data/spec/integration/schema/json/explicit_types_spec.rb +0 -157
- data/spec/integration/schema/json_spec.rb +0 -163
- data/spec/integration/schema/macros/confirmation_spec.rb +0 -35
- data/spec/integration/schema/macros/each_spec.rb +0 -268
- data/spec/integration/schema/macros/filled_spec.rb +0 -87
- data/spec/integration/schema/macros/input_spec.rb +0 -139
- data/spec/integration/schema/macros/maybe_spec.rb +0 -99
- data/spec/integration/schema/macros/rule_spec.rb +0 -75
- data/spec/integration/schema/macros/value_spec.rb +0 -119
- data/spec/integration/schema/macros/when_spec.rb +0 -62
- data/spec/integration/schema/nested_schemas_spec.rb +0 -236
- data/spec/integration/schema/nested_values_spec.rb +0 -46
- data/spec/integration/schema/not_spec.rb +0 -34
- data/spec/integration/schema/numbers_spec.rb +0 -19
- data/spec/integration/schema/option_with_default_spec.rb +0 -64
- data/spec/integration/schema/or_spec.rb +0 -87
- data/spec/integration/schema/params/defining_base_schema_spec.rb +0 -41
- data/spec/integration/schema/params/explicit_types_spec.rb +0 -195
- data/spec/integration/schema/params_spec.rb +0 -234
- data/spec/integration/schema/predicate_verification_spec.rb +0 -9
- data/spec/integration/schema/predicates/array_spec.rb +0 -295
- data/spec/integration/schema/predicates/custom_spec.rb +0 -103
- data/spec/integration/schema/predicates/empty_spec.rb +0 -263
- data/spec/integration/schema/predicates/eql_spec.rb +0 -327
- data/spec/integration/schema/predicates/even_spec.rb +0 -455
- data/spec/integration/schema/predicates/excluded_from/array_spec.rb +0 -459
- data/spec/integration/schema/predicates/excluded_from/range_spec.rb +0 -459
- data/spec/integration/schema/predicates/excludes_spec.rb +0 -391
- data/spec/integration/schema/predicates/filled_spec.rb +0 -467
- data/spec/integration/schema/predicates/format_spec.rb +0 -455
- data/spec/integration/schema/predicates/gt_spec.rb +0 -519
- data/spec/integration/schema/predicates/gteq_spec.rb +0 -519
- data/spec/integration/schema/predicates/hash_spec.rb +0 -69
- data/spec/integration/schema/predicates/included_in/array_spec.rb +0 -459
- data/spec/integration/schema/predicates/included_in/range_spec.rb +0 -459
- data/spec/integration/schema/predicates/includes_spec.rb +0 -391
- data/spec/integration/schema/predicates/key_spec.rb +0 -88
- data/spec/integration/schema/predicates/lt_spec.rb +0 -520
- data/spec/integration/schema/predicates/lteq_spec.rb +0 -519
- data/spec/integration/schema/predicates/max_size_spec.rb +0 -391
- data/spec/integration/schema/predicates/min_size_spec.rb +0 -391
- data/spec/integration/schema/predicates/none_spec.rb +0 -265
- data/spec/integration/schema/predicates/not_eql_spec.rb +0 -391
- data/spec/integration/schema/predicates/odd_spec.rb +0 -455
- data/spec/integration/schema/predicates/size/fixed_spec.rb +0 -398
- data/spec/integration/schema/predicates/size/range_spec.rb +0 -395
- data/spec/integration/schema/predicates/type_spec.rb +0 -413
- data/spec/integration/schema/reusing_schema_spec.rb +0 -33
- data/spec/integration/schema/using_types_spec.rb +0 -135
- data/spec/integration/schema/validate_spec.rb +0 -120
- data/spec/integration/schema/xor_spec.rb +0 -35
- data/spec/integration/schema_builders_spec.rb +0 -17
- data/spec/integration/schema_spec.rb +0 -173
- data/spec/shared/message_compiler.rb +0 -11
- data/spec/shared/predicate_helper.rb +0 -15
- data/spec/shared/rule_compiler.rb +0 -8
- data/spec/spec_helper.rb +0 -58
- data/spec/support/define_struct.rb +0 -25
- data/spec/support/matchers.rb +0 -38
- data/spec/support/mutant.rb +0 -9
- data/spec/support/predicates_integration.rb +0 -7
- data/spec/unit/input_processor_compiler/json_spec.rb +0 -283
- data/spec/unit/input_processor_compiler/params_spec.rb +0 -328
- data/spec/unit/message_compiler/visit_failure_spec.rb +0 -38
- data/spec/unit/message_compiler/visit_spec.rb +0 -16
- data/spec/unit/message_compiler_spec.rb +0 -7
- data/spec/unit/predicate_registry_spec.rb +0 -34
- data/spec/unit/schema/key_spec.rb +0 -38
- data/spec/unit/schema/rule_spec.rb +0 -42
- data/spec/unit/schema/value_spec.rb +0 -131
- data/spec/unit/schema_spec.rb +0 -35
@@ -1,94 +0,0 @@
|
|
1
|
-
require 'dry/validation/messages/i18n'
|
2
|
-
|
3
|
-
RSpec.describe Messages::I18n do
|
4
|
-
subject(:messages) { Messages::I18n.new }
|
5
|
-
|
6
|
-
before do
|
7
|
-
I18n.config.available_locales_set << :pl
|
8
|
-
I18n.load_path.concat(%w(en pl).map { |l| SPEC_ROOT.join("fixtures/locales/#{l}.yml") })
|
9
|
-
I18n.backend.load_translations
|
10
|
-
I18n.locale = :pl
|
11
|
-
end
|
12
|
-
|
13
|
-
describe '#[]' do
|
14
|
-
context 'with the default locale' do
|
15
|
-
it 'returns nil when message is not defined' do
|
16
|
-
expect(messages[:not_here, rule: :srsly]).to be(nil)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'returns a message for a predicate' do
|
20
|
-
message = messages[:filled?, rule: :name]
|
21
|
-
|
22
|
-
expect(message).to eql("nie może być pusty")
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'returns a message for a specific rule' do
|
26
|
-
message = messages[:filled?, rule: :email]
|
27
|
-
|
28
|
-
expect(message).to eql("Proszę podać adres email")
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'returns a message for a specific val type' do
|
32
|
-
message = messages[:size?, rule: :pages, val_type: String]
|
33
|
-
|
34
|
-
expect(message).to eql("wielkość musi być równa %{size}")
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'returns a message for a specific rule and its default arg type' do
|
38
|
-
message = messages[:size?, rule: :pages]
|
39
|
-
|
40
|
-
expect(message).to eql("wielkość musi być równa %{size}")
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'returns a message for a specific rule and its arg type' do
|
44
|
-
message = messages[:size?, rule: :pages, arg_type: Range]
|
45
|
-
|
46
|
-
expect(message).to eql("wielkość musi być między %{size_left} a %{size_right}")
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context 'with a different locale' do
|
51
|
-
it 'returns a message for a predicate' do
|
52
|
-
message = messages[:filled?, rule: :name, locale: :en]
|
53
|
-
|
54
|
-
expect(message).to eql("must be filled")
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'returns a message for a specific rule' do
|
58
|
-
message = messages[:filled?, rule: :email, locale: :en]
|
59
|
-
|
60
|
-
expect(message).to eql("Please provide your email")
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'returns a message for a specific rule and its default arg type' do
|
64
|
-
message = messages[:size?, rule: :pages, locale: :en]
|
65
|
-
|
66
|
-
expect(message).to eql("size must be %{size}")
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'returns a message for a specific rule and its arg type' do
|
70
|
-
message = messages[:size?, rule: :pages, arg_type: Range, locale: :en]
|
71
|
-
|
72
|
-
expect(message).to eql("size must be within %{size_left} - %{size_right}")
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
context 'fallbacking to I18n.default_locale with fallback backend config' do
|
77
|
-
before do
|
78
|
-
require "i18n/backend/fallbacks"
|
79
|
-
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'returns a message for a predicate in the default_locale' do
|
83
|
-
message = messages[:even?, rule: :some_number]
|
84
|
-
|
85
|
-
expect(I18n.locale).to eql(:pl)
|
86
|
-
expect(message).to eql("must be even")
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
after(:all) do
|
92
|
-
I18n.locale = I18n.default_locale
|
93
|
-
end
|
94
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
RSpec.describe Dry::Validation::Schema do
|
2
|
-
describe 'defining schema with optional keys' do
|
3
|
-
subject(:schema) do
|
4
|
-
Dry::Validation.Schema do
|
5
|
-
optional(:email) { |email| email.filled? }
|
6
|
-
|
7
|
-
required(:address).schema do
|
8
|
-
required(:city, &:filled?)
|
9
|
-
required(:street, &:filled?)
|
10
|
-
|
11
|
-
optional(:phone_number) do
|
12
|
-
none? | str?
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe '#call' do
|
19
|
-
it 'skips rules when key is not present' do
|
20
|
-
expect(schema.(address: { city: 'NYC', street: 'Street 1/2' })).to be_success
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'applies rules when key is present' do
|
24
|
-
expect(schema.(email: '')).to_not be_success
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,287 +0,0 @@
|
|
1
|
-
RSpec.describe 'Predicates: Array' do
|
2
|
-
context 'with required' do
|
3
|
-
subject(:schema) do
|
4
|
-
Dry::Validation.Params do
|
5
|
-
required(:foo) { array? { each { int? } } }
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
context 'with valid input' do
|
10
|
-
let(:input) { { 'foo' => ['3'] } }
|
11
|
-
|
12
|
-
it 'is successful' do
|
13
|
-
expect(result).to be_successful
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'with missing input' do
|
18
|
-
let(:input) { {} }
|
19
|
-
|
20
|
-
it 'is not successful' do
|
21
|
-
expect(result).to be_failing ['is missing']
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'with nil input' do
|
26
|
-
let(:input) { { 'foo' => nil } }
|
27
|
-
|
28
|
-
it 'is not successful' do
|
29
|
-
expect(result).to be_failing ['must be an array']
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'with blank input' do
|
34
|
-
let(:input) { { 'foo' => '' } }
|
35
|
-
|
36
|
-
it 'is successful' do
|
37
|
-
expect(result).to be_successful
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'with invalid type' do
|
42
|
-
let(:input) { { 'foo' => { 'a' => '1' } } }
|
43
|
-
|
44
|
-
it 'is not successful' do
|
45
|
-
expect(result).to be_failing ['must be an array']
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context 'with invalid input (integer)' do
|
50
|
-
let(:input) { { 'foo' => '4' } }
|
51
|
-
|
52
|
-
it 'is not successful' do
|
53
|
-
expect(result).to be_failing ['must be an array']
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
context 'with invalid input (array with non-integers)' do
|
58
|
-
let(:input) { { 'foo' => %w(foo bar) } }
|
59
|
-
|
60
|
-
it 'is not successful' do
|
61
|
-
expect(result).to be_failing 0 => ['must be an integer'], 1 => ['must be an integer']
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context 'with invalid input (mixed array)' do
|
66
|
-
let(:input) { { 'foo' => %w(1 bar) } }
|
67
|
-
|
68
|
-
it 'is not successful' do
|
69
|
-
expect(result).to be_failing 1 => ['must be an integer']
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
context 'with optional' do
|
75
|
-
subject(:schema) do
|
76
|
-
Dry::Validation.Params do
|
77
|
-
optional(:foo) { array? { each { int? } } }
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
context 'with valid input' do
|
82
|
-
let(:input) { { 'foo' => ['3'] } }
|
83
|
-
|
84
|
-
it 'is successful' do
|
85
|
-
expect(result).to be_successful
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
context 'with missing input' do
|
90
|
-
let(:input) { {} }
|
91
|
-
|
92
|
-
it 'is successful' do
|
93
|
-
expect(result).to be_successful
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
context 'with nil input' do
|
98
|
-
let(:input) { { 'foo' => nil } }
|
99
|
-
|
100
|
-
it 'is not successful' do
|
101
|
-
expect(result).to be_failing ['must be an array']
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
context 'with blank input' do
|
106
|
-
let(:input) { { 'foo' => '' } }
|
107
|
-
|
108
|
-
it 'is successful' do
|
109
|
-
expect(result).to be_successful
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
context 'with invalid type' do
|
114
|
-
let(:input) { { 'foo' => { 'a' => '1' } } }
|
115
|
-
|
116
|
-
it 'is not successful' do
|
117
|
-
expect(result).to be_failing ['must be an array']
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
context 'with invalid input (integer)' do
|
122
|
-
let(:input) { { 'foo' => '4' } }
|
123
|
-
|
124
|
-
it 'is not successful' do
|
125
|
-
expect(result).to be_failing ['must be an array']
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
context 'with invalid input (array with non-integers)' do
|
130
|
-
let(:input) { { 'foo' => %w(foo bar) } }
|
131
|
-
|
132
|
-
it 'is not successful' do
|
133
|
-
expect(result).to be_failing 0 => ['must be an integer'], 1 => ['must be an integer']
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
context 'with invalid input (mixed array)' do
|
138
|
-
let(:input) { { 'foo' => %w(1 bar) } }
|
139
|
-
|
140
|
-
it 'is not successful' do
|
141
|
-
expect(result).to be_failing 1 => ['must be an integer']
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
context 'as macro' do
|
147
|
-
context 'with required' do
|
148
|
-
subject(:schema) do
|
149
|
-
Dry::Validation.Params do
|
150
|
-
required(:foo).each(:int?)
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
context 'with missing input' do
|
155
|
-
let(:input) { {} }
|
156
|
-
|
157
|
-
it 'is not successful' do
|
158
|
-
expect(result).to be_failing ['is missing']
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
context 'with nil input' do
|
163
|
-
let(:input) { { 'foo' => nil } }
|
164
|
-
|
165
|
-
it 'is not successful' do
|
166
|
-
expect(result).to be_failing ['must be an array']
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
context 'with blank input' do
|
171
|
-
let(:input) { { 'foo' => '' } }
|
172
|
-
|
173
|
-
it 'is successful' do
|
174
|
-
expect(result).to be_successful
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
context 'with valid input' do
|
179
|
-
let(:input) { { 'foo' => ['3'] } }
|
180
|
-
|
181
|
-
it 'is successful' do
|
182
|
-
expect(result).to be_successful
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
context 'with invalid input' do
|
187
|
-
let(:input) { { 'foo' => ['bar'] } }
|
188
|
-
|
189
|
-
it 'is not successful' do
|
190
|
-
expect(result).to be_failing 0 => ['must be an integer']
|
191
|
-
end
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
context 'with optional' do
|
196
|
-
subject(:schema) do
|
197
|
-
Dry::Validation.Params do
|
198
|
-
optional(:foo).each(:int?)
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
context 'with missing input' do
|
203
|
-
let(:input) { {} }
|
204
|
-
|
205
|
-
it 'is not successful' do
|
206
|
-
expect(result).to be_successful
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
context 'with nil input' do
|
211
|
-
let(:input) { { 'foo' => nil } }
|
212
|
-
|
213
|
-
it 'is not successful' do
|
214
|
-
expect(result).to be_failing ['must be an array']
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
context 'with blank input' do
|
219
|
-
let(:input) { { 'foo' => '' } }
|
220
|
-
|
221
|
-
it 'is successful' do
|
222
|
-
expect(result).to be_successful
|
223
|
-
end
|
224
|
-
end
|
225
|
-
|
226
|
-
context 'with valid input' do
|
227
|
-
let(:input) { { 'foo' => ['3'] } }
|
228
|
-
|
229
|
-
it 'is successful' do
|
230
|
-
expect(result).to be_successful
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
context 'with invalid input' do
|
235
|
-
let(:input) { { 'foo' => ['bar'] } }
|
236
|
-
|
237
|
-
it 'is not successful' do
|
238
|
-
expect(result).to be_failing 0 => ['must be an integer']
|
239
|
-
end
|
240
|
-
end
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
|
-
context 'with maybe macro' do
|
245
|
-
subject(:schema) { Dry::Validation.Params { required(:foo).maybe(:array?) } }
|
246
|
-
|
247
|
-
context 'with empty string' do
|
248
|
-
let(:input) { { 'foo' => '' } }
|
249
|
-
|
250
|
-
it 'is successful' do
|
251
|
-
expect(result).to be_successful
|
252
|
-
end
|
253
|
-
end
|
254
|
-
|
255
|
-
context 'with nil' do
|
256
|
-
let(:input) { { 'foo' => nil } }
|
257
|
-
|
258
|
-
it 'is successful' do
|
259
|
-
expect(result).to be_successful
|
260
|
-
end
|
261
|
-
end
|
262
|
-
|
263
|
-
context 'with empty array' do
|
264
|
-
let(:input) { { 'foo' => [] } }
|
265
|
-
|
266
|
-
it 'is successful' do
|
267
|
-
expect(result).to be_successful
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
context 'with filled array' do
|
272
|
-
let(:input) { { 'foo' => [1, 2, 3] } }
|
273
|
-
|
274
|
-
it 'is successful' do
|
275
|
-
expect(result).to be_successful
|
276
|
-
end
|
277
|
-
end
|
278
|
-
|
279
|
-
context 'with invalid value' do
|
280
|
-
let(:input) { { 'foo' => 'oops' } }
|
281
|
-
|
282
|
-
it 'is not successful' do
|
283
|
-
expect(result).to be_failing(['must be an array'])
|
284
|
-
end
|
285
|
-
end
|
286
|
-
end
|
287
|
-
end
|
@@ -1,263 +0,0 @@
|
|
1
|
-
RSpec.describe 'Predicates: Empty' do
|
2
|
-
context 'with required' do
|
3
|
-
subject(:schema) do
|
4
|
-
Dry::Validation.Params do
|
5
|
-
required(:foo) { empty? }
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
context 'with valid input (array)' do
|
10
|
-
let(:input) { { 'foo' => [] } }
|
11
|
-
|
12
|
-
it 'is successful' do
|
13
|
-
expect(result).to be_successful
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'with valid input (hash)' do
|
18
|
-
let(:input) { { 'foo' => {} } }
|
19
|
-
|
20
|
-
it 'is successful' do
|
21
|
-
expect(result).to be_successful
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'with missing input' do
|
26
|
-
let(:input) { {} }
|
27
|
-
|
28
|
-
it 'is not successful' do
|
29
|
-
expect(result).to be_failing ['is missing', 'must be empty']
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'with nil input' do
|
34
|
-
let(:input) { { 'foo' => nil } }
|
35
|
-
|
36
|
-
it 'is successful' do
|
37
|
-
expect(result).to be_successful
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'with blank input' do
|
42
|
-
let(:input) { { 'foo' => '' } }
|
43
|
-
|
44
|
-
it 'is successful' do
|
45
|
-
expect(result).to be_successful
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context 'with invalid input' do
|
50
|
-
let(:input) { { 'foo' => ['23'] } }
|
51
|
-
|
52
|
-
it 'is not successful' do
|
53
|
-
expect(result).to be_failing ['must be empty']
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
context 'with optional' do
|
59
|
-
subject(:schema) do
|
60
|
-
Dry::Validation.Params do
|
61
|
-
optional(:foo) { empty? }
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context 'with valid input (array)' do
|
66
|
-
let(:input) { { 'foo' => [] } }
|
67
|
-
|
68
|
-
it 'is successful' do
|
69
|
-
expect(result).to be_successful
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
context 'with valid input (hash)' do
|
74
|
-
let(:input) { { 'foo' => {} } }
|
75
|
-
|
76
|
-
it 'is successful' do
|
77
|
-
expect(result).to be_successful
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
context 'with missing input' do
|
82
|
-
let(:input) { {} }
|
83
|
-
|
84
|
-
it 'is successful' do
|
85
|
-
expect(result).to be_successful
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
context 'with nil input' do
|
90
|
-
let(:input) { { 'foo' => nil } }
|
91
|
-
|
92
|
-
it 'is successful' do
|
93
|
-
expect(result).to be_successful
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
context 'with blank input' do
|
98
|
-
let(:input) { { 'foo' => '' } }
|
99
|
-
|
100
|
-
it 'is successful' do
|
101
|
-
expect(result).to be_successful
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
context 'with invalid input' do
|
106
|
-
let(:input) { { 'foo' => ['23'] } }
|
107
|
-
|
108
|
-
it 'is not successful' do
|
109
|
-
expect(result).to be_failing ['must be empty']
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
context 'as macro' do
|
115
|
-
context 'with required' do
|
116
|
-
context 'with value' do
|
117
|
-
subject(:schema) do
|
118
|
-
Dry::Validation.Params do
|
119
|
-
required(:foo).value(:empty?)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
context 'with valid input (array)' do
|
124
|
-
let(:input) { { 'foo' => [] } }
|
125
|
-
|
126
|
-
it 'is successful' do
|
127
|
-
expect(result).to be_successful
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
context 'with valid input (hash)' do
|
132
|
-
let(:input) { { 'foo' => {} } }
|
133
|
-
|
134
|
-
it 'is successful' do
|
135
|
-
expect(result).to be_successful
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
context 'with missing input' do
|
140
|
-
let(:input) { {} }
|
141
|
-
|
142
|
-
it 'is not successful' do
|
143
|
-
expect(result).to be_failing ['is missing', 'must be empty']
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
context 'with nil input' do
|
148
|
-
let(:input) { { 'foo' => nil } }
|
149
|
-
|
150
|
-
it 'is successful' do
|
151
|
-
expect(result).to be_successful
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
context 'with blank input' do
|
156
|
-
let(:input) { { 'foo' => '' } }
|
157
|
-
|
158
|
-
it 'is successful' do
|
159
|
-
expect(result).to be_successful
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
context 'with invalid input' do
|
164
|
-
let(:input) { { 'foo' => ['23'] } }
|
165
|
-
|
166
|
-
it 'is not successful' do
|
167
|
-
expect(result).to be_failing ['must be empty']
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
context 'with filled' do
|
173
|
-
it "raises error" do
|
174
|
-
expect { Dry::Validation.Params do
|
175
|
-
required(:foo).filled(:empty?)
|
176
|
-
end }.to raise_error InvalidSchemaError
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
context 'with maybe' do
|
181
|
-
it "raises error" do
|
182
|
-
expect { Dry::Validation.Params do
|
183
|
-
required(:foo).maybe(:empty?)
|
184
|
-
end }.to raise_error InvalidSchemaError
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
context 'with optional' do
|
190
|
-
context 'with value' do
|
191
|
-
subject(:schema) do
|
192
|
-
Dry::Validation.Params do
|
193
|
-
optional(:foo).value(:empty?)
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
context 'with valid input (array)' do
|
198
|
-
let(:input) { { 'foo' => [] } }
|
199
|
-
|
200
|
-
it 'is successful' do
|
201
|
-
expect(result).to be_successful
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
context 'with valid input (hash)' do
|
206
|
-
let(:input) { { 'foo' => {} } }
|
207
|
-
|
208
|
-
it 'is successful' do
|
209
|
-
expect(result).to be_successful
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
context 'with missing input' do
|
214
|
-
let(:input) { {} }
|
215
|
-
|
216
|
-
it 'is successful' do
|
217
|
-
expect(result).to be_successful
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
context 'with nil input' do
|
222
|
-
let(:input) { { 'foo' => nil } }
|
223
|
-
|
224
|
-
it 'is successful' do
|
225
|
-
expect(result).to be_successful
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
context 'with blank input' do
|
230
|
-
let(:input) { { 'foo' => '' } }
|
231
|
-
|
232
|
-
it 'is successful' do
|
233
|
-
expect(result).to be_successful
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
|
-
context 'with invalid input' do
|
238
|
-
let(:input) { { 'foo' => ['23'] } }
|
239
|
-
|
240
|
-
it 'is not successful' do
|
241
|
-
expect(result).to be_failing ['must be empty']
|
242
|
-
end
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
context 'with filled' do
|
247
|
-
it "raises error" do
|
248
|
-
expect { Dry::Validation.Params do
|
249
|
-
optional(:foo).filled(:empty?)
|
250
|
-
end }.to raise_error InvalidSchemaError
|
251
|
-
end
|
252
|
-
end
|
253
|
-
|
254
|
-
context 'with maybe' do
|
255
|
-
it "raises error" do
|
256
|
-
expect { Dry::Validation.Params do
|
257
|
-
optional(:foo).maybe(:empty?)
|
258
|
-
end }.to raise_error InvalidSchemaError
|
259
|
-
end
|
260
|
-
end
|
261
|
-
end
|
262
|
-
end
|
263
|
-
end
|