dry-validation 0.7.4 → 0.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +9 -6
- data/CHANGELOG.md +58 -0
- data/Gemfile +3 -3
- data/benchmarks/benchmark_form_invalid.rb +64 -0
- data/benchmarks/benchmark_form_valid.rb +64 -0
- data/benchmarks/profile_schema_call_invalid.rb +20 -0
- data/benchmarks/profile_schema_call_valid.rb +20 -0
- data/benchmarks/profile_schema_definition.rb +14 -0
- data/benchmarks/profile_schema_messages_invalid.rb +20 -0
- data/benchmarks/suite.rb +5 -0
- data/config/errors.yml +12 -5
- data/dry-validation.gemspec +2 -2
- data/examples/basic.rb +2 -2
- data/examples/form.rb +2 -2
- data/examples/json.rb +2 -2
- data/examples/nested.rb +6 -6
- data/lib/dry/validation.rb +22 -3
- data/lib/dry/validation/deprecations.rb +23 -0
- data/lib/dry/validation/error_compiler.rb +31 -11
- data/lib/dry/validation/error_compiler/input.rb +44 -57
- data/lib/dry/validation/hint_compiler.rb +15 -7
- data/lib/dry/validation/input_processor_compiler.rb +13 -6
- data/lib/dry/validation/input_processor_compiler/form.rb +2 -0
- data/lib/dry/validation/input_processor_compiler/sanitizer.rb +1 -1
- data/lib/dry/validation/messages/abstract.rb +9 -1
- data/lib/dry/validation/predicate_registry.rb +101 -0
- data/lib/dry/validation/result.rb +8 -1
- data/lib/dry/validation/schema.rb +110 -44
- data/lib/dry/validation/schema/check.rb +4 -2
- data/lib/dry/validation/schema/deprecated.rb +31 -0
- data/lib/dry/validation/schema/dsl.rb +18 -11
- data/lib/dry/validation/schema/form.rb +1 -0
- data/lib/dry/validation/schema/json.rb +1 -0
- data/lib/dry/validation/schema/key.rb +23 -10
- data/lib/dry/validation/schema/rule.rb +81 -20
- data/lib/dry/validation/schema/value.rb +110 -25
- data/lib/dry/validation/version.rb +1 -1
- data/spec/fixtures/locales/en.yml +1 -0
- data/spec/fixtures/locales/pl.yml +1 -1
- data/spec/integration/custom_error_messages_spec.rb +2 -2
- data/spec/integration/custom_predicates_spec.rb +98 -15
- data/spec/integration/error_compiler_spec.rb +111 -96
- data/spec/integration/form/predicates/array_spec.rb +243 -0
- data/spec/integration/form/predicates/empty_spec.rb +263 -0
- data/spec/integration/form/predicates/eql_spec.rb +327 -0
- data/spec/integration/form/predicates/even_spec.rb +455 -0
- data/spec/integration/form/predicates/excluded_from_spec.rb +455 -0
- data/spec/integration/form/predicates/excludes_spec.rb +391 -0
- data/spec/integration/form/predicates/false_spec.rb +455 -0
- data/spec/integration/form/predicates/filled_spec.rb +467 -0
- data/spec/integration/form/predicates/format_spec.rb +454 -0
- data/spec/integration/form/predicates/gt_spec.rb +519 -0
- data/spec/integration/form/predicates/gteq_spec.rb +519 -0
- data/spec/integration/form/predicates/included_in_spec.rb +455 -0
- data/spec/integration/form/predicates/includes_spec.rb +391 -0
- data/spec/integration/form/predicates/key_spec.rb +75 -0
- data/spec/integration/form/predicates/lt_spec.rb +519 -0
- data/spec/integration/form/predicates/lteq_spec.rb +519 -0
- data/spec/integration/form/predicates/max_size_spec.rb +391 -0
- data/spec/integration/form/predicates/min_size_spec.rb +391 -0
- data/spec/integration/form/predicates/none_spec.rb +265 -0
- data/spec/integration/form/predicates/not_eql_spec.rb +327 -0
- data/spec/integration/form/predicates/odd_spec.rb +455 -0
- data/spec/integration/form/predicates/size/fixed_spec.rb +399 -0
- data/spec/integration/form/predicates/size/range_spec.rb +398 -0
- data/spec/integration/form/predicates/true_spec.rb +455 -0
- data/spec/integration/form/predicates/type_spec.rb +391 -0
- data/spec/integration/hints_spec.rb +90 -4
- data/spec/integration/injecting_rules_spec.rb +2 -2
- data/spec/integration/localized_error_messages_spec.rb +2 -2
- data/spec/integration/messages/i18n_spec.rb +3 -3
- data/spec/integration/optional_keys_spec.rb +3 -3
- data/spec/integration/schema/array_schema_spec.rb +49 -13
- data/spec/integration/schema/check_rules_spec.rb +6 -6
- data/spec/integration/schema/check_with_nested_el_spec.rb +3 -3
- data/spec/integration/schema/check_with_nth_el_spec.rb +1 -1
- data/spec/integration/schema/each_with_set_spec.rb +3 -3
- data/spec/integration/schema/extending_dsl_spec.rb +27 -0
- data/spec/integration/schema/form/explicit_types_spec.rb +182 -0
- data/spec/integration/schema/form_spec.rb +90 -18
- data/spec/integration/schema/hash_schema_spec.rb +47 -0
- data/spec/integration/schema/inheriting_schema_spec.rb +4 -4
- data/spec/integration/schema/input_processor_spec.rb +8 -8
- data/spec/integration/schema/json/explicit_types_spec.rb +157 -0
- data/spec/integration/schema/json_spec.rb +18 -18
- data/spec/integration/schema/macros/confirmation_spec.rb +1 -1
- data/spec/integration/schema/macros/each_spec.rb +177 -43
- data/spec/integration/schema/macros/{required_spec.rb → filled_spec.rb} +34 -6
- data/spec/integration/schema/macros/input_spec.rb +21 -0
- data/spec/integration/schema/macros/maybe_spec.rb +39 -2
- data/spec/integration/schema/macros/value_spec.rb +105 -0
- data/spec/integration/schema/macros/when_spec.rb +28 -8
- data/spec/integration/schema/nested_values_spec.rb +11 -8
- data/spec/integration/schema/not_spec.rb +2 -2
- data/spec/integration/schema/numbers_spec.rb +1 -1
- data/spec/integration/schema/option_with_default_spec.rb +1 -1
- data/spec/integration/schema/predicate_verification_spec.rb +9 -0
- data/spec/integration/schema/predicates/array_spec.rb +295 -0
- data/spec/integration/schema/predicates/custom_spec.rb +103 -0
- data/spec/integration/schema/predicates/empty_spec.rb +263 -0
- data/spec/integration/schema/predicates/eql_spec.rb +327 -0
- data/spec/integration/schema/predicates/even_spec.rb +455 -0
- data/spec/integration/schema/predicates/excluded_from_spec.rb +455 -0
- data/spec/integration/schema/predicates/excludes_spec.rb +391 -0
- data/spec/integration/schema/predicates/filled_spec.rb +467 -0
- data/spec/integration/schema/predicates/format_spec.rb +455 -0
- data/spec/integration/schema/predicates/gt_spec.rb +519 -0
- data/spec/integration/schema/predicates/gteq_spec.rb +519 -0
- data/spec/integration/schema/predicates/hash_spec.rb +69 -0
- data/spec/integration/schema/predicates/included_in_spec.rb +455 -0
- data/spec/integration/schema/predicates/includes_spec.rb +391 -0
- data/spec/integration/schema/predicates/key_spec.rb +88 -0
- data/spec/integration/schema/predicates/lt_spec.rb +520 -0
- data/spec/integration/schema/predicates/lteq_spec.rb +519 -0
- data/spec/integration/schema/predicates/max_size_spec.rb +391 -0
- data/spec/integration/schema/predicates/min_size_spec.rb +391 -0
- data/spec/integration/schema/predicates/none_spec.rb +265 -0
- data/spec/integration/schema/predicates/not_eql_spec.rb +391 -0
- data/spec/integration/schema/predicates/odd_spec.rb +455 -0
- data/spec/integration/schema/predicates/size/fixed_spec.rb +401 -0
- data/spec/integration/schema/predicates/size/range_spec.rb +399 -0
- data/spec/integration/schema/predicates/type_spec.rb +391 -0
- data/spec/integration/schema/reusing_schema_spec.rb +4 -4
- data/spec/integration/schema/using_types_spec.rb +24 -6
- data/spec/integration/schema/xor_spec.rb +2 -2
- data/spec/integration/schema_builders_spec.rb +15 -0
- data/spec/integration/schema_spec.rb +37 -12
- data/spec/shared/predicate_helper.rb +13 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/support/matchers.rb +38 -0
- data/spec/support/predicates_integration.rb +7 -0
- data/spec/unit/hint_compiler_spec.rb +10 -8
- data/spec/unit/input_processor_compiler/form_spec.rb +45 -43
- data/spec/unit/input_processor_compiler/json_spec.rb +37 -35
- data/spec/unit/predicate_registry_spec.rb +34 -0
- data/spec/unit/schema/key_spec.rb +12 -14
- data/spec/unit/schema/rule_spec.rb +4 -2
- data/spec/unit/schema/value_spec.rb +38 -121
- metadata +150 -16
- data/lib/dry/validation/schema/attr.rb +0 -15
- data/spec/integration/attr_spec.rb +0 -122
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16fb2c50b37c5d1aff843031ff3d7af6e87ab05a
|
4
|
+
data.tar.gz: 64f74fc7df4b183322908ec96120d4dbbb4b38c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 244e25e33c6a1795436fc015cab5d4c23961c974eaf7208144faf69a81c040ede351c54e7225efc1695283f061225b0543e2ee6120fce29c00069725fc0ee791
|
7
|
+
data.tar.gz: fc89edb2c0f6862d1771b46a77863b644947db429861a34d944cab9799d328df01e7bb0554291fa23f12d67ba545a276fe8f3c98435837485fb002bee55b5101
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
language: ruby
|
2
2
|
sudo: false
|
3
3
|
cache: bundler
|
4
|
-
bundler_args: --without console benchmarks
|
4
|
+
bundler_args: --full-index --without console benchmarks
|
5
5
|
script:
|
6
6
|
- bundle exec rake spec
|
7
7
|
rvm:
|
8
8
|
- 2.0
|
9
|
-
- 2.1
|
10
|
-
- 2.2
|
11
|
-
- 2.3.
|
9
|
+
- 2.1.10
|
10
|
+
- 2.2.5
|
11
|
+
- 2.3.1
|
12
12
|
- rbx-2
|
13
|
-
- jruby-
|
13
|
+
- jruby-9.1.1.0
|
14
14
|
- ruby-head
|
15
|
-
- jruby-head
|
16
15
|
env:
|
17
16
|
global:
|
18
17
|
- JRUBY_OPTS='--dev -J-Xmx1024M'
|
@@ -21,6 +20,10 @@ matrix:
|
|
21
20
|
- rvm: rbx-2
|
22
21
|
- rvm: ruby-head
|
23
22
|
- rvm: jruby-head
|
23
|
+
include:
|
24
|
+
- rvm: jruby-head
|
25
|
+
before_install: gem install bundler --no-ri --no-rdoc
|
26
|
+
|
24
27
|
notifications:
|
25
28
|
email: false
|
26
29
|
webhooks:
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,61 @@
|
|
1
|
+
# v0.8.0 2016-07-01
|
2
|
+
|
3
|
+
### Added
|
4
|
+
|
5
|
+
* Explicit interface for type specs used to set up coercions, ie `required(:age, :int)` (solnic)
|
6
|
+
* Support new dry-logic predicates: `:excluded_from?`, `:excludes?`, `:included_in?`, `:includes?`, `:not_eql?`, `:odd?`, `:even?` (jodosha, fran-worley)
|
7
|
+
* Support for blocks in `value`, `filled` and `maybe` macros (solnic)
|
8
|
+
* Support for passing a schema to `value|filled|maybe` macros ie `maybe(SomeSchema)` (solnic)
|
9
|
+
* Support for `each(SomeSchema)` (solnic)
|
10
|
+
* Support for `value|filled|maybe` macros + `each` inside a block ie: `maybe(:filled?) { each(:int?) }` (solnic)
|
11
|
+
* Support for dedicated hint messages via `en.errors.#{predicate}.(hint|failure)` look-up paths (solnic)
|
12
|
+
* Support for configuring custom DSL extensions via `dsl_extensions` setting on Schema class (solnic)
|
13
|
+
* Support for preconfiguring a predicate for the input value ie `value :hash?` used for prerequisite-checks (solnic)
|
14
|
+
* Infer coercion from constrained types (solnic)
|
15
|
+
* Add value macro (coop)
|
16
|
+
* Enable .schema to accept objects that respond to #schema (ttdonovan)
|
17
|
+
* Support for schema predicates which don't need any arguments (fran-worley)
|
18
|
+
* Error and hint messages have access to all predicate arguments by default (fran-worley+solnic)
|
19
|
+
* Invalid predicate name in DSL will raise an error (solnic)
|
20
|
+
* Predicate with invalid arity in DSL will raise an error (solnic)
|
21
|
+
|
22
|
+
### Fixed
|
23
|
+
|
24
|
+
* Support for jRuby 9.1.1.0 (flash-gordon)
|
25
|
+
* Fix bug when using predicates with options in each and when (fran-worley)
|
26
|
+
* Fix bug when validating custom types (coop)
|
27
|
+
* Fix depending on deeply nested values in high-lvl rules (solnic)
|
28
|
+
* Fix duplicated error message for lt? when hint was used (solnic)
|
29
|
+
* Fix hints for nested schemas (solnic)
|
30
|
+
* Fix an issue where rules with same names inside nested schemas have incorrect hints (solnic)
|
31
|
+
* Fix a bug where hints were being generated 4 times (solnic)
|
32
|
+
* Fix duplicated error messages when message is different than a hint (solnic)
|
33
|
+
|
34
|
+
### Changed
|
35
|
+
|
36
|
+
* Uses new `:weak` hash constructor from dry-types 0.8.0 which can partially coerce invalid hash (solnic)
|
37
|
+
* `key` has been deprecated in favor of `required` (coop)
|
38
|
+
* `required` has been deprecated in favor of `filled` (coop)
|
39
|
+
* Now relies on dry-logic v0.3.0 and dry-types v0.8.0 (fran-worley)
|
40
|
+
* Tring to use illogical predicates with maybe and filled macros now raise InvalidSchemaError (fran-worley)
|
41
|
+
* Enable coercion on form.true and form.false (fran-worley)
|
42
|
+
* Remove attr (will be extracted to a separate gem) (coop)
|
43
|
+
* Deprecate required in favour of filled (coop)
|
44
|
+
* Deprecate key in favor of required (coop)
|
45
|
+
* Remove nested key syntax (solnic)
|
46
|
+
|
47
|
+
### Internal
|
48
|
+
|
49
|
+
* ~15% performance boost via various optimizations (solnic)
|
50
|
+
* When using explicit type specs building a schema is ~80-85x faster (solnic)
|
51
|
+
* No longer uses `Dry::Types::Predicates` as `:type?` predicate was moved to dry-logic (solnic)
|
52
|
+
* Integration specs covering predicates with Form and Schema (jodosha)
|
53
|
+
* Use latest ruby versions on travis (flash-gordon)
|
54
|
+
* Make pry console optional with IRB as a default (flash-gordon)
|
55
|
+
* Remove wrapping rules in :set nodes (solnic)
|
56
|
+
|
57
|
+
[Compare v0.7.4...master](https://github.com/dryrb/dry-validation/compare/v0.7.4...master)
|
58
|
+
|
1
59
|
# v0.7.4 2016-04-06
|
2
60
|
|
3
61
|
### Added
|
data/Gemfile
CHANGED
@@ -13,9 +13,9 @@ group :tools do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
group :benchmarks do
|
16
|
-
gem 'hotch'
|
17
|
-
gem 'activemodel', '5.0.0.
|
18
|
-
gem 'actionpack', '5.0.0.
|
16
|
+
gem 'hotch', platform: :mri
|
17
|
+
gem 'activemodel', '~> 5.0.0.rc'
|
18
|
+
gem 'actionpack', '~> 5.0.0.rc'
|
19
19
|
gem 'benchmark-ips'
|
20
20
|
gem 'virtus'
|
21
21
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'benchmark/ips'
|
2
|
+
require 'active_model'
|
3
|
+
|
4
|
+
require 'dry-validation'
|
5
|
+
|
6
|
+
I18n.locale = :en
|
7
|
+
I18n.backend.load_translations
|
8
|
+
|
9
|
+
class User
|
10
|
+
include ActiveModel::Validations
|
11
|
+
|
12
|
+
attr_reader :email, :age
|
13
|
+
|
14
|
+
validates :email, :age, presence: true
|
15
|
+
validates :age, numericality: { greater_than: 18 }
|
16
|
+
|
17
|
+
def initialize(attrs)
|
18
|
+
@email, @age = attrs.values_at('email', 'age')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
schema = Dry::Validation.Schema do
|
23
|
+
configure do
|
24
|
+
config.messages = :i18n
|
25
|
+
end
|
26
|
+
|
27
|
+
required(:email).filled
|
28
|
+
required(:age).filled(:int?, gt?: 18)
|
29
|
+
end
|
30
|
+
|
31
|
+
form = Dry::Validation.Form do
|
32
|
+
configure do
|
33
|
+
config.messages = :i18n
|
34
|
+
config.type_specs = true
|
35
|
+
end
|
36
|
+
|
37
|
+
required(:email, :string).filled
|
38
|
+
required(:age, :int).filled(:int?, gt?: 18)
|
39
|
+
end
|
40
|
+
|
41
|
+
params = { 'email' => '', 'age' => '18' }
|
42
|
+
coerced = { email: nil, age: 18 }
|
43
|
+
|
44
|
+
puts schema.(coerced).inspect
|
45
|
+
puts form.(params).inspect
|
46
|
+
puts User.new(params).validate
|
47
|
+
|
48
|
+
Benchmark.ips do |x|
|
49
|
+
x.report('ActiveModel::Validations') do
|
50
|
+
user = User.new(params)
|
51
|
+
user.validate
|
52
|
+
user.errors
|
53
|
+
end
|
54
|
+
|
55
|
+
x.report('dry-validation / schema') do
|
56
|
+
schema.(coerced).messages
|
57
|
+
end
|
58
|
+
|
59
|
+
x.report('dry-validation / form') do
|
60
|
+
form.(params).messages
|
61
|
+
end
|
62
|
+
|
63
|
+
x.compare!
|
64
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'benchmark/ips'
|
2
|
+
require 'active_model'
|
3
|
+
|
4
|
+
require 'dry-validation'
|
5
|
+
|
6
|
+
I18n.locale = :en
|
7
|
+
I18n.backend.load_translations
|
8
|
+
|
9
|
+
class User
|
10
|
+
include ActiveModel::Validations
|
11
|
+
|
12
|
+
attr_reader :email, :age
|
13
|
+
|
14
|
+
validates :email, :age, presence: true
|
15
|
+
validates :age, numericality: { greater_than: 18 }
|
16
|
+
|
17
|
+
def initialize(attrs)
|
18
|
+
@email, @age = attrs.values_at('email', 'age')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
schema = Dry::Validation.Schema do
|
23
|
+
configure do
|
24
|
+
config.messages = :i18n
|
25
|
+
end
|
26
|
+
|
27
|
+
required(:email).filled
|
28
|
+
required(:age).filled(:int?, gt?: 18)
|
29
|
+
end
|
30
|
+
|
31
|
+
form = Dry::Validation.Form do
|
32
|
+
configure do
|
33
|
+
config.messages = :i18n
|
34
|
+
config.type_specs = true
|
35
|
+
end
|
36
|
+
|
37
|
+
required(:email, :string).filled
|
38
|
+
required(:age, :int).filled(:int?, gt?: 18)
|
39
|
+
end
|
40
|
+
|
41
|
+
params = { 'email' => 'foo@bar.baz', 'age' => '19' }
|
42
|
+
coerced = { email: 'foo@bar.baz', age: 19 }
|
43
|
+
|
44
|
+
puts schema.(coerced).inspect
|
45
|
+
puts form.(params).inspect
|
46
|
+
puts User.new(params).validate
|
47
|
+
|
48
|
+
Benchmark.ips do |x|
|
49
|
+
x.report('ActiveModel::Validations') do
|
50
|
+
user = User.new(params)
|
51
|
+
user.validate
|
52
|
+
user.errors
|
53
|
+
end
|
54
|
+
|
55
|
+
x.report('dry-validation / schema') do
|
56
|
+
schema.(coerced).messages
|
57
|
+
end
|
58
|
+
|
59
|
+
x.report('dry-validation / form') do
|
60
|
+
form.(params).messages
|
61
|
+
end
|
62
|
+
|
63
|
+
x.compare!
|
64
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative 'suite'
|
2
|
+
require 'hotch'
|
3
|
+
|
4
|
+
schema = Dry::Validation.Schema do
|
5
|
+
configure { config.messages = :i18n }
|
6
|
+
|
7
|
+
required(:email).filled
|
8
|
+
required(:age).filled(:int?, gt?: 18)
|
9
|
+
required(:address).filled(:hash?)
|
10
|
+
end
|
11
|
+
|
12
|
+
input = { email: '', age: 18, address: {} }
|
13
|
+
|
14
|
+
puts schema.(input).inspect
|
15
|
+
|
16
|
+
Hotch() do
|
17
|
+
10_000.times do
|
18
|
+
schema.(input)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative 'suite'
|
2
|
+
require 'hotch'
|
3
|
+
|
4
|
+
schema = Dry::Validation.Schema do
|
5
|
+
configure { config.messages = :i18n }
|
6
|
+
|
7
|
+
required(:email).filled
|
8
|
+
required(:age).filled(:int?, gt?: 18)
|
9
|
+
required(:address).filled(:hash?)
|
10
|
+
end
|
11
|
+
|
12
|
+
input = { email: 'jane@doe.org', age: 19, address: { city: 'Krakow' } }
|
13
|
+
|
14
|
+
puts schema.(input).inspect
|
15
|
+
|
16
|
+
Hotch() do
|
17
|
+
10_000.times do
|
18
|
+
schema.(input)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'suite'
|
2
|
+
require 'hotch'
|
3
|
+
|
4
|
+
Hotch() do
|
5
|
+
1000.times do
|
6
|
+
Dry::Validation.Schema do
|
7
|
+
configure { config.messages = :i18n }
|
8
|
+
|
9
|
+
required(:email).filled
|
10
|
+
required(:age).filled(:int?, gt?: 18)
|
11
|
+
required(:address).filled(:hash?)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative 'suite'
|
2
|
+
require 'hotch'
|
3
|
+
|
4
|
+
schema = Dry::Validation.Schema do
|
5
|
+
configure { config.messages = :i18n }
|
6
|
+
|
7
|
+
required(:email).filled
|
8
|
+
required(:age).filled(:int?, gt?: 18)
|
9
|
+
required(:address).filled(:hash?)
|
10
|
+
end
|
11
|
+
|
12
|
+
input = { email: '', age: 18, address: {} }
|
13
|
+
|
14
|
+
puts schema.(input).inspect
|
15
|
+
|
16
|
+
Hotch() do
|
17
|
+
10_000.times do
|
18
|
+
schema.(input).messages
|
19
|
+
end
|
20
|
+
end
|
data/benchmarks/suite.rb
ADDED
data/config/errors.yml
CHANGED
@@ -4,9 +4,13 @@ en:
|
|
4
4
|
|
5
5
|
empty?: "must be empty"
|
6
6
|
|
7
|
-
|
7
|
+
excludes?: "must not include %{value}"
|
8
8
|
|
9
|
-
|
9
|
+
excluded_from?: "must not be one of: %{list}"
|
10
|
+
|
11
|
+
eql?: "must be equal to %{left}"
|
12
|
+
|
13
|
+
not_eql?: "must not be equal to %{left}"
|
10
14
|
|
11
15
|
filled?: "must be filled"
|
12
16
|
|
@@ -24,8 +28,11 @@ en:
|
|
24
28
|
|
25
29
|
hash?: "must be a hash"
|
26
30
|
|
31
|
+
included_in?: "must be one of: %{list}"
|
27
32
|
inclusion?: "must be one of: %{list}"
|
28
33
|
|
34
|
+
includes?: "must include %{value}"
|
35
|
+
|
29
36
|
bool?: "must be boolean"
|
30
37
|
|
31
38
|
true?: "must be true"
|
@@ -48,7 +55,7 @@ en:
|
|
48
55
|
|
49
56
|
attr?: "is missing"
|
50
57
|
|
51
|
-
lt?: "must be less than %{num}
|
58
|
+
lt?: "must be less than %{num}"
|
52
59
|
|
53
60
|
lteq?: "must be less than or equal to %{num}"
|
54
61
|
|
@@ -64,11 +71,11 @@ en:
|
|
64
71
|
|
65
72
|
size?:
|
66
73
|
arg:
|
67
|
-
default: "size must be %{
|
74
|
+
default: "size must be %{size}"
|
68
75
|
range: "size must be within %{left} - %{right}"
|
69
76
|
|
70
77
|
value:
|
71
78
|
string:
|
72
79
|
arg:
|
73
|
-
default: "length must be %{
|
80
|
+
default: "length must be %{size}"
|
74
81
|
range: "length must be within %{left} - %{right}"
|
data/dry-validation.gemspec
CHANGED
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.add_runtime_dependency 'dry-configurable', '~> 0.1', '>= 0.1.3'
|
20
20
|
spec.add_runtime_dependency 'dry-container', '~> 0.2', '>= 0.2.8'
|
21
21
|
spec.add_runtime_dependency 'dry-equalizer', '~> 0.2'
|
22
|
-
spec.add_runtime_dependency 'dry-logic', '~> 0.
|
23
|
-
spec.add_runtime_dependency 'dry-types', '~> 0.
|
22
|
+
spec.add_runtime_dependency 'dry-logic', '~> 0.3', '>= 0.3.0'
|
23
|
+
spec.add_runtime_dependency 'dry-types', '~> 0.8', '>= 0.8.0'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bundler'
|
26
26
|
spec.add_development_dependency 'rake'
|
data/examples/basic.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'dry-validation'
|
2
2
|
|
3
3
|
schema = Dry::Validation.Schema do
|
4
|
-
|
4
|
+
required(:email).filled
|
5
5
|
|
6
|
-
|
6
|
+
required(:age).filled(:int?, gt?: 18)
|
7
7
|
end
|
8
8
|
|
9
9
|
errors = schema.call(email: 'jane@doe.org', age: 19).messages
|
data/examples/form.rb
CHANGED
data/examples/json.rb
CHANGED
@@ -2,9 +2,9 @@ require 'json'
|
|
2
2
|
require 'dry-validation'
|
3
3
|
|
4
4
|
schema = Dry::Validation.JSON do
|
5
|
-
|
5
|
+
required(:email).filled
|
6
6
|
|
7
|
-
|
7
|
+
required(:age).filled(:int?, gt?: 18)
|
8
8
|
end
|
9
9
|
|
10
10
|
errors = schema.call(JSON.parse('{"email": "", "age": "18"}')).messages
|