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.
Files changed (143) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +9 -6
  4. data/CHANGELOG.md +58 -0
  5. data/Gemfile +3 -3
  6. data/benchmarks/benchmark_form_invalid.rb +64 -0
  7. data/benchmarks/benchmark_form_valid.rb +64 -0
  8. data/benchmarks/profile_schema_call_invalid.rb +20 -0
  9. data/benchmarks/profile_schema_call_valid.rb +20 -0
  10. data/benchmarks/profile_schema_definition.rb +14 -0
  11. data/benchmarks/profile_schema_messages_invalid.rb +20 -0
  12. data/benchmarks/suite.rb +5 -0
  13. data/config/errors.yml +12 -5
  14. data/dry-validation.gemspec +2 -2
  15. data/examples/basic.rb +2 -2
  16. data/examples/form.rb +2 -2
  17. data/examples/json.rb +2 -2
  18. data/examples/nested.rb +6 -6
  19. data/lib/dry/validation.rb +22 -3
  20. data/lib/dry/validation/deprecations.rb +23 -0
  21. data/lib/dry/validation/error_compiler.rb +31 -11
  22. data/lib/dry/validation/error_compiler/input.rb +44 -57
  23. data/lib/dry/validation/hint_compiler.rb +15 -7
  24. data/lib/dry/validation/input_processor_compiler.rb +13 -6
  25. data/lib/dry/validation/input_processor_compiler/form.rb +2 -0
  26. data/lib/dry/validation/input_processor_compiler/sanitizer.rb +1 -1
  27. data/lib/dry/validation/messages/abstract.rb +9 -1
  28. data/lib/dry/validation/predicate_registry.rb +101 -0
  29. data/lib/dry/validation/result.rb +8 -1
  30. data/lib/dry/validation/schema.rb +110 -44
  31. data/lib/dry/validation/schema/check.rb +4 -2
  32. data/lib/dry/validation/schema/deprecated.rb +31 -0
  33. data/lib/dry/validation/schema/dsl.rb +18 -11
  34. data/lib/dry/validation/schema/form.rb +1 -0
  35. data/lib/dry/validation/schema/json.rb +1 -0
  36. data/lib/dry/validation/schema/key.rb +23 -10
  37. data/lib/dry/validation/schema/rule.rb +81 -20
  38. data/lib/dry/validation/schema/value.rb +110 -25
  39. data/lib/dry/validation/version.rb +1 -1
  40. data/spec/fixtures/locales/en.yml +1 -0
  41. data/spec/fixtures/locales/pl.yml +1 -1
  42. data/spec/integration/custom_error_messages_spec.rb +2 -2
  43. data/spec/integration/custom_predicates_spec.rb +98 -15
  44. data/spec/integration/error_compiler_spec.rb +111 -96
  45. data/spec/integration/form/predicates/array_spec.rb +243 -0
  46. data/spec/integration/form/predicates/empty_spec.rb +263 -0
  47. data/spec/integration/form/predicates/eql_spec.rb +327 -0
  48. data/spec/integration/form/predicates/even_spec.rb +455 -0
  49. data/spec/integration/form/predicates/excluded_from_spec.rb +455 -0
  50. data/spec/integration/form/predicates/excludes_spec.rb +391 -0
  51. data/spec/integration/form/predicates/false_spec.rb +455 -0
  52. data/spec/integration/form/predicates/filled_spec.rb +467 -0
  53. data/spec/integration/form/predicates/format_spec.rb +454 -0
  54. data/spec/integration/form/predicates/gt_spec.rb +519 -0
  55. data/spec/integration/form/predicates/gteq_spec.rb +519 -0
  56. data/spec/integration/form/predicates/included_in_spec.rb +455 -0
  57. data/spec/integration/form/predicates/includes_spec.rb +391 -0
  58. data/spec/integration/form/predicates/key_spec.rb +75 -0
  59. data/spec/integration/form/predicates/lt_spec.rb +519 -0
  60. data/spec/integration/form/predicates/lteq_spec.rb +519 -0
  61. data/spec/integration/form/predicates/max_size_spec.rb +391 -0
  62. data/spec/integration/form/predicates/min_size_spec.rb +391 -0
  63. data/spec/integration/form/predicates/none_spec.rb +265 -0
  64. data/spec/integration/form/predicates/not_eql_spec.rb +327 -0
  65. data/spec/integration/form/predicates/odd_spec.rb +455 -0
  66. data/spec/integration/form/predicates/size/fixed_spec.rb +399 -0
  67. data/spec/integration/form/predicates/size/range_spec.rb +398 -0
  68. data/spec/integration/form/predicates/true_spec.rb +455 -0
  69. data/spec/integration/form/predicates/type_spec.rb +391 -0
  70. data/spec/integration/hints_spec.rb +90 -4
  71. data/spec/integration/injecting_rules_spec.rb +2 -2
  72. data/spec/integration/localized_error_messages_spec.rb +2 -2
  73. data/spec/integration/messages/i18n_spec.rb +3 -3
  74. data/spec/integration/optional_keys_spec.rb +3 -3
  75. data/spec/integration/schema/array_schema_spec.rb +49 -13
  76. data/spec/integration/schema/check_rules_spec.rb +6 -6
  77. data/spec/integration/schema/check_with_nested_el_spec.rb +3 -3
  78. data/spec/integration/schema/check_with_nth_el_spec.rb +1 -1
  79. data/spec/integration/schema/each_with_set_spec.rb +3 -3
  80. data/spec/integration/schema/extending_dsl_spec.rb +27 -0
  81. data/spec/integration/schema/form/explicit_types_spec.rb +182 -0
  82. data/spec/integration/schema/form_spec.rb +90 -18
  83. data/spec/integration/schema/hash_schema_spec.rb +47 -0
  84. data/spec/integration/schema/inheriting_schema_spec.rb +4 -4
  85. data/spec/integration/schema/input_processor_spec.rb +8 -8
  86. data/spec/integration/schema/json/explicit_types_spec.rb +157 -0
  87. data/spec/integration/schema/json_spec.rb +18 -18
  88. data/spec/integration/schema/macros/confirmation_spec.rb +1 -1
  89. data/spec/integration/schema/macros/each_spec.rb +177 -43
  90. data/spec/integration/schema/macros/{required_spec.rb → filled_spec.rb} +34 -6
  91. data/spec/integration/schema/macros/input_spec.rb +21 -0
  92. data/spec/integration/schema/macros/maybe_spec.rb +39 -2
  93. data/spec/integration/schema/macros/value_spec.rb +105 -0
  94. data/spec/integration/schema/macros/when_spec.rb +28 -8
  95. data/spec/integration/schema/nested_values_spec.rb +11 -8
  96. data/spec/integration/schema/not_spec.rb +2 -2
  97. data/spec/integration/schema/numbers_spec.rb +1 -1
  98. data/spec/integration/schema/option_with_default_spec.rb +1 -1
  99. data/spec/integration/schema/predicate_verification_spec.rb +9 -0
  100. data/spec/integration/schema/predicates/array_spec.rb +295 -0
  101. data/spec/integration/schema/predicates/custom_spec.rb +103 -0
  102. data/spec/integration/schema/predicates/empty_spec.rb +263 -0
  103. data/spec/integration/schema/predicates/eql_spec.rb +327 -0
  104. data/spec/integration/schema/predicates/even_spec.rb +455 -0
  105. data/spec/integration/schema/predicates/excluded_from_spec.rb +455 -0
  106. data/spec/integration/schema/predicates/excludes_spec.rb +391 -0
  107. data/spec/integration/schema/predicates/filled_spec.rb +467 -0
  108. data/spec/integration/schema/predicates/format_spec.rb +455 -0
  109. data/spec/integration/schema/predicates/gt_spec.rb +519 -0
  110. data/spec/integration/schema/predicates/gteq_spec.rb +519 -0
  111. data/spec/integration/schema/predicates/hash_spec.rb +69 -0
  112. data/spec/integration/schema/predicates/included_in_spec.rb +455 -0
  113. data/spec/integration/schema/predicates/includes_spec.rb +391 -0
  114. data/spec/integration/schema/predicates/key_spec.rb +88 -0
  115. data/spec/integration/schema/predicates/lt_spec.rb +520 -0
  116. data/spec/integration/schema/predicates/lteq_spec.rb +519 -0
  117. data/spec/integration/schema/predicates/max_size_spec.rb +391 -0
  118. data/spec/integration/schema/predicates/min_size_spec.rb +391 -0
  119. data/spec/integration/schema/predicates/none_spec.rb +265 -0
  120. data/spec/integration/schema/predicates/not_eql_spec.rb +391 -0
  121. data/spec/integration/schema/predicates/odd_spec.rb +455 -0
  122. data/spec/integration/schema/predicates/size/fixed_spec.rb +401 -0
  123. data/spec/integration/schema/predicates/size/range_spec.rb +399 -0
  124. data/spec/integration/schema/predicates/type_spec.rb +391 -0
  125. data/spec/integration/schema/reusing_schema_spec.rb +4 -4
  126. data/spec/integration/schema/using_types_spec.rb +24 -6
  127. data/spec/integration/schema/xor_spec.rb +2 -2
  128. data/spec/integration/schema_builders_spec.rb +15 -0
  129. data/spec/integration/schema_spec.rb +37 -12
  130. data/spec/shared/predicate_helper.rb +13 -0
  131. data/spec/spec_helper.rb +10 -0
  132. data/spec/support/matchers.rb +38 -0
  133. data/spec/support/predicates_integration.rb +7 -0
  134. data/spec/unit/hint_compiler_spec.rb +10 -8
  135. data/spec/unit/input_processor_compiler/form_spec.rb +45 -43
  136. data/spec/unit/input_processor_compiler/json_spec.rb +37 -35
  137. data/spec/unit/predicate_registry_spec.rb +34 -0
  138. data/spec/unit/schema/key_spec.rb +12 -14
  139. data/spec/unit/schema/rule_spec.rb +4 -2
  140. data/spec/unit/schema/value_spec.rb +38 -121
  141. metadata +150 -16
  142. data/lib/dry/validation/schema/attr.rb +0 -15
  143. data/spec/integration/attr_spec.rb +0 -122
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 16d323de18e994f717e80abb07098dc2e82534af
4
- data.tar.gz: ef0e116d3f56eb249b70315bf43af0d74a249c58
3
+ metadata.gz: 16fb2c50b37c5d1aff843031ff3d7af6e87ab05a
4
+ data.tar.gz: 64f74fc7df4b183322908ec96120d4dbbb4b38c2
5
5
  SHA512:
6
- metadata.gz: 2b9690fa21b55e46d09db96f93d4d58f07d7d5fe7291219d3107f154eda2597e6e7209049403fcb1f518936d025a62d31ed2315e8795a02e7bd017c9ead52b33
7
- data.tar.gz: b8ac25905f1f1d602c0f930cc2895b9e6fd27d53fae3dfcc2794e46f255034417e14ce9407491ba19fd2c86276b3e820783890bdac10fb42bf190f72e9577ec3
6
+ metadata.gz: 244e25e33c6a1795436fc015cab5d4c23961c974eaf7208144faf69a81c040ede351c54e7225efc1695283f061225b0543e2ee6120fce29c00069725fc0ee791
7
+ data.tar.gz: fc89edb2c0f6862d1771b46a77863b644947db429861a34d944cab9799d328df01e7bb0554291fa23f12d67ba545a276fe8f3c98435837485fb002bee55b5101
data/.gitignore CHANGED
@@ -3,6 +3,7 @@ coverage
3
3
  /.bundle
4
4
  vendor/bundle
5
5
  bin/
6
+ log/
6
7
  tmp/
7
8
  .idea/
8
9
  Gemfile.lock
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.0
9
+ - 2.1.10
10
+ - 2.2.5
11
+ - 2.3.1
12
12
  - rbx-2
13
- - jruby-9000
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.beta3'
18
- gem 'actionpack', '5.0.0.beta3'
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
@@ -0,0 +1,5 @@
1
+ require 'i18n'
2
+ require 'dry-validation'
3
+
4
+ I18n.locale = :en
5
+ I18n.backend.load_translations
data/config/errors.yml CHANGED
@@ -4,9 +4,13 @@ en:
4
4
 
5
5
  empty?: "must be empty"
6
6
 
7
- exclusion?: "must not be one of: %{list}"
7
+ excludes?: "must not include %{value}"
8
8
 
9
- eql?: "must be equal to %{eql_value}"
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} (%{value} was given)"
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 %{num}"
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 %{num}"
80
+ default: "length must be %{size}"
74
81
  range: "length must be within %{left} - %{right}"
@@ -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.2', '>= 0.2.2'
23
- spec.add_runtime_dependency 'dry-types', '~> 0.6', '>= 0.6.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
- key(:email).required
4
+ required(:email).filled
5
5
 
6
- key(:age).required(:int?, gt?: 18)
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
@@ -1,9 +1,9 @@
1
1
  require 'dry-validation'
2
2
 
3
3
  schema = Dry::Validation.Form do
4
- key(:email).required
4
+ required(:email).filled
5
5
 
6
- key(:age).required(:int?, gt?: 18)
6
+ required(:age).filled(:int?, gt?: 18)
7
7
  end
8
8
 
9
9
  errors = schema.call('email' => '', 'age' => '18').messages
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
- key(:email).required
5
+ required(:email).filled
6
6
 
7
- key(:age).required(:int?, gt?: 18)
7
+ required(:age).filled(:int?, gt?: 18)
8
8
  end
9
9
 
10
10
  errors = schema.call(JSON.parse('{"email": "", "age": "18"}')).messages