dry-validation 0.13.3 → 1.3.1

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 (206) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +233 -12
  3. data/LICENSE +1 -1
  4. data/README.md +13 -9
  5. data/config/errors.yml +3 -88
  6. data/lib/dry-validation.rb +2 -0
  7. data/lib/dry/validation.rb +47 -28
  8. data/lib/dry/validation/config.rb +24 -0
  9. data/lib/dry/validation/constants.rb +43 -0
  10. data/lib/dry/validation/contract.rb +160 -0
  11. data/lib/dry/validation/contract/class_interface.rb +223 -0
  12. data/lib/dry/validation/evaluator.rb +197 -0
  13. data/lib/dry/validation/extensions/hints.rb +69 -0
  14. data/lib/dry/validation/extensions/monads.rb +23 -7
  15. data/lib/dry/validation/extensions/predicates_as_macros.rb +75 -0
  16. data/lib/dry/validation/failures.rb +58 -0
  17. data/lib/dry/validation/function.rb +44 -0
  18. data/lib/dry/validation/macro.rb +38 -0
  19. data/lib/dry/validation/macros.rb +104 -0
  20. data/lib/dry/validation/message.rb +79 -79
  21. data/lib/dry/validation/message_set.rb +108 -88
  22. data/lib/dry/validation/messages/resolver.rb +79 -0
  23. data/lib/dry/validation/result.rb +154 -42
  24. data/lib/dry/validation/rule.rb +129 -0
  25. data/lib/dry/validation/schema_ext.rb +46 -0
  26. data/lib/dry/validation/values.rb +94 -0
  27. data/lib/dry/validation/version.rb +3 -1
  28. metadata +41 -336
  29. data/.codeclimate.yml +0 -17
  30. data/.gitignore +0 -9
  31. data/.rspec +0 -3
  32. data/.travis.yml +0 -29
  33. data/CONTRIBUTING.md +0 -31
  34. data/Gemfile +0 -25
  35. data/Rakefile +0 -22
  36. data/benchmarks/benchmark_form_invalid.rb +0 -64
  37. data/benchmarks/benchmark_form_valid.rb +0 -64
  38. data/benchmarks/benchmark_schema_invalid_huge.rb +0 -52
  39. data/benchmarks/profile_schema_call_invalid.rb +0 -20
  40. data/benchmarks/profile_schema_call_valid.rb +0 -20
  41. data/benchmarks/profile_schema_definition.rb +0 -14
  42. data/benchmarks/profile_schema_huge_invalid.rb +0 -30
  43. data/benchmarks/profile_schema_messages_invalid.rb +0 -20
  44. data/benchmarks/suite.rb +0 -5
  45. data/dry-validation.gemspec +0 -28
  46. data/examples/basic.rb +0 -15
  47. data/examples/each.rb +0 -14
  48. data/examples/json.rb +0 -12
  49. data/examples/multiple.rb +0 -27
  50. data/examples/nested.rb +0 -22
  51. data/examples/params.rb +0 -11
  52. data/lib/dry/validation/compat/form.rb +0 -67
  53. data/lib/dry/validation/deprecations.rb +0 -24
  54. data/lib/dry/validation/executor.rb +0 -91
  55. data/lib/dry/validation/extensions.rb +0 -7
  56. data/lib/dry/validation/extensions/struct.rb +0 -32
  57. data/lib/dry/validation/input_processor_compiler.rb +0 -137
  58. data/lib/dry/validation/input_processor_compiler/json.rb +0 -45
  59. data/lib/dry/validation/input_processor_compiler/params.rb +0 -49
  60. data/lib/dry/validation/input_processor_compiler/sanitizer.rb +0 -47
  61. data/lib/dry/validation/message_compiler.rb +0 -188
  62. data/lib/dry/validation/message_compiler/visitor_opts.rb +0 -37
  63. data/lib/dry/validation/messages.rb +0 -14
  64. data/lib/dry/validation/messages/abstract.rb +0 -119
  65. data/lib/dry/validation/messages/i18n.rb +0 -47
  66. data/lib/dry/validation/messages/namespaced.rb +0 -39
  67. data/lib/dry/validation/messages/yaml.rb +0 -61
  68. data/lib/dry/validation/predicate_registry.rb +0 -115
  69. data/lib/dry/validation/predicates.rb +0 -19
  70. data/lib/dry/validation/schema.rb +0 -126
  71. data/lib/dry/validation/schema/check.rb +0 -37
  72. data/lib/dry/validation/schema/class_interface.rb +0 -190
  73. data/lib/dry/validation/schema/deprecated.rb +0 -30
  74. data/lib/dry/validation/schema/dsl.rb +0 -118
  75. data/lib/dry/validation/schema/form.rb +0 -9
  76. data/lib/dry/validation/schema/json.rb +0 -21
  77. data/lib/dry/validation/schema/key.rb +0 -71
  78. data/lib/dry/validation/schema/params.rb +0 -22
  79. data/lib/dry/validation/schema/rule.rb +0 -202
  80. data/lib/dry/validation/schema/value.rb +0 -211
  81. data/lib/dry/validation/schema_compiler.rb +0 -81
  82. data/lib/dry/validation/template.rb +0 -66
  83. data/lib/dry/validation/type_specs.rb +0 -70
  84. data/spec/extensions/monads/result_spec.rb +0 -40
  85. data/spec/extensions/struct/schema_spec.rb +0 -32
  86. data/spec/fixtures/locales/en.yml +0 -8
  87. data/spec/fixtures/locales/pl.yml +0 -22
  88. data/spec/integration/custom_error_messages_spec.rb +0 -54
  89. data/spec/integration/custom_predicates_spec.rb +0 -228
  90. data/spec/integration/hints_spec.rb +0 -170
  91. data/spec/integration/injecting_rules_spec.rb +0 -30
  92. data/spec/integration/json/defining_base_schema_spec.rb +0 -41
  93. data/spec/integration/localized_error_messages_spec.rb +0 -72
  94. data/spec/integration/message_compiler_spec.rb +0 -405
  95. data/spec/integration/messages/i18n_spec.rb +0 -104
  96. data/spec/integration/optional_keys_spec.rb +0 -28
  97. data/spec/integration/params/predicates/array_spec.rb +0 -287
  98. data/spec/integration/params/predicates/empty_spec.rb +0 -263
  99. data/spec/integration/params/predicates/eql_spec.rb +0 -327
  100. data/spec/integration/params/predicates/even_spec.rb +0 -455
  101. data/spec/integration/params/predicates/excluded_from_spec.rb +0 -455
  102. data/spec/integration/params/predicates/excludes_spec.rb +0 -391
  103. data/spec/integration/params/predicates/false_spec.rb +0 -455
  104. data/spec/integration/params/predicates/filled_spec.rb +0 -467
  105. data/spec/integration/params/predicates/format_spec.rb +0 -454
  106. data/spec/integration/params/predicates/gt_spec.rb +0 -519
  107. data/spec/integration/params/predicates/gteq_spec.rb +0 -519
  108. data/spec/integration/params/predicates/included_in_spec.rb +0 -455
  109. data/spec/integration/params/predicates/includes_spec.rb +0 -391
  110. data/spec/integration/params/predicates/key_spec.rb +0 -67
  111. data/spec/integration/params/predicates/lt_spec.rb +0 -519
  112. data/spec/integration/params/predicates/lteq_spec.rb +0 -519
  113. data/spec/integration/params/predicates/max_size_spec.rb +0 -391
  114. data/spec/integration/params/predicates/min_size_spec.rb +0 -391
  115. data/spec/integration/params/predicates/none_spec.rb +0 -265
  116. data/spec/integration/params/predicates/not_eql_spec.rb +0 -327
  117. data/spec/integration/params/predicates/odd_spec.rb +0 -455
  118. data/spec/integration/params/predicates/size/fixed_spec.rb +0 -393
  119. data/spec/integration/params/predicates/size/range_spec.rb +0 -396
  120. data/spec/integration/params/predicates/true_spec.rb +0 -455
  121. data/spec/integration/params/predicates/type_spec.rb +0 -391
  122. data/spec/integration/result_spec.rb +0 -81
  123. data/spec/integration/schema/array_schema_spec.rb +0 -59
  124. data/spec/integration/schema/check_rules_spec.rb +0 -119
  125. data/spec/integration/schema/check_with_nested_el_spec.rb +0 -37
  126. data/spec/integration/schema/check_with_nth_el_spec.rb +0 -25
  127. data/spec/integration/schema/default_settings_spec.rb +0 -11
  128. data/spec/integration/schema/defining_base_schema_spec.rb +0 -41
  129. data/spec/integration/schema/dynamic_predicate_args_spec.rb +0 -43
  130. data/spec/integration/schema/each_with_set_spec.rb +0 -70
  131. data/spec/integration/schema/extending_dsl_spec.rb +0 -27
  132. data/spec/integration/schema/form_spec.rb +0 -236
  133. data/spec/integration/schema/hash_schema_spec.rb +0 -47
  134. data/spec/integration/schema/inheriting_schema_spec.rb +0 -31
  135. data/spec/integration/schema/input_processor_spec.rb +0 -46
  136. data/spec/integration/schema/json/explicit_types_spec.rb +0 -157
  137. data/spec/integration/schema/json_spec.rb +0 -163
  138. data/spec/integration/schema/macros/confirmation_spec.rb +0 -35
  139. data/spec/integration/schema/macros/each_spec.rb +0 -268
  140. data/spec/integration/schema/macros/filled_spec.rb +0 -87
  141. data/spec/integration/schema/macros/input_spec.rb +0 -139
  142. data/spec/integration/schema/macros/maybe_spec.rb +0 -99
  143. data/spec/integration/schema/macros/rule_spec.rb +0 -75
  144. data/spec/integration/schema/macros/value_spec.rb +0 -119
  145. data/spec/integration/schema/macros/when_spec.rb +0 -62
  146. data/spec/integration/schema/nested_schemas_spec.rb +0 -236
  147. data/spec/integration/schema/nested_values_spec.rb +0 -46
  148. data/spec/integration/schema/not_spec.rb +0 -34
  149. data/spec/integration/schema/numbers_spec.rb +0 -19
  150. data/spec/integration/schema/option_with_default_spec.rb +0 -64
  151. data/spec/integration/schema/or_spec.rb +0 -87
  152. data/spec/integration/schema/params/defining_base_schema_spec.rb +0 -41
  153. data/spec/integration/schema/params/explicit_types_spec.rb +0 -195
  154. data/spec/integration/schema/params_spec.rb +0 -234
  155. data/spec/integration/schema/predicate_verification_spec.rb +0 -9
  156. data/spec/integration/schema/predicates/array_spec.rb +0 -295
  157. data/spec/integration/schema/predicates/custom_spec.rb +0 -103
  158. data/spec/integration/schema/predicates/empty_spec.rb +0 -263
  159. data/spec/integration/schema/predicates/eql_spec.rb +0 -327
  160. data/spec/integration/schema/predicates/even_spec.rb +0 -455
  161. data/spec/integration/schema/predicates/excluded_from/array_spec.rb +0 -459
  162. data/spec/integration/schema/predicates/excluded_from/range_spec.rb +0 -459
  163. data/spec/integration/schema/predicates/excludes_spec.rb +0 -391
  164. data/spec/integration/schema/predicates/filled_spec.rb +0 -467
  165. data/spec/integration/schema/predicates/format_spec.rb +0 -455
  166. data/spec/integration/schema/predicates/gt_spec.rb +0 -519
  167. data/spec/integration/schema/predicates/gteq_spec.rb +0 -519
  168. data/spec/integration/schema/predicates/hash_spec.rb +0 -69
  169. data/spec/integration/schema/predicates/included_in/array_spec.rb +0 -459
  170. data/spec/integration/schema/predicates/included_in/range_spec.rb +0 -459
  171. data/spec/integration/schema/predicates/includes_spec.rb +0 -391
  172. data/spec/integration/schema/predicates/key_spec.rb +0 -88
  173. data/spec/integration/schema/predicates/lt_spec.rb +0 -520
  174. data/spec/integration/schema/predicates/lteq_spec.rb +0 -519
  175. data/spec/integration/schema/predicates/max_size_spec.rb +0 -391
  176. data/spec/integration/schema/predicates/min_size_spec.rb +0 -391
  177. data/spec/integration/schema/predicates/none_spec.rb +0 -265
  178. data/spec/integration/schema/predicates/not_eql_spec.rb +0 -391
  179. data/spec/integration/schema/predicates/odd_spec.rb +0 -455
  180. data/spec/integration/schema/predicates/size/fixed_spec.rb +0 -398
  181. data/spec/integration/schema/predicates/size/range_spec.rb +0 -395
  182. data/spec/integration/schema/predicates/type_spec.rb +0 -413
  183. data/spec/integration/schema/reusing_schema_spec.rb +0 -33
  184. data/spec/integration/schema/using_types_spec.rb +0 -135
  185. data/spec/integration/schema/validate_spec.rb +0 -120
  186. data/spec/integration/schema/xor_spec.rb +0 -35
  187. data/spec/integration/schema_builders_spec.rb +0 -17
  188. data/spec/integration/schema_spec.rb +0 -173
  189. data/spec/shared/message_compiler.rb +0 -11
  190. data/spec/shared/predicate_helper.rb +0 -15
  191. data/spec/shared/rule_compiler.rb +0 -8
  192. data/spec/spec_helper.rb +0 -62
  193. data/spec/support/define_struct.rb +0 -25
  194. data/spec/support/matchers.rb +0 -38
  195. data/spec/support/mutant.rb +0 -9
  196. data/spec/support/predicates_integration.rb +0 -7
  197. data/spec/unit/input_processor_compiler/json_spec.rb +0 -283
  198. data/spec/unit/input_processor_compiler/params_spec.rb +0 -328
  199. data/spec/unit/message_compiler/visit_failure_spec.rb +0 -38
  200. data/spec/unit/message_compiler/visit_spec.rb +0 -16
  201. data/spec/unit/message_compiler_spec.rb +0 -7
  202. data/spec/unit/predicate_registry_spec.rb +0 -34
  203. data/spec/unit/schema/key_spec.rb +0 -38
  204. data/spec/unit/schema/rule_spec.rb +0 -42
  205. data/spec/unit/schema/value_spec.rb +0 -131
  206. data/spec/unit/schema_spec.rb +0 -35
@@ -1,17 +0,0 @@
1
- engines:
2
- rubocop:
3
- enabled: true
4
- checks:
5
- Rubocop/Style/LambdaCall:
6
- enabled: false
7
- Rubocop/Style/StabbyLambdaParentheses:
8
- enabled: false
9
- Rubocop/Metrics/CyclomaticComplexity:
10
- enabled: true
11
- Max: 10
12
- ratings:
13
- paths:
14
- - lib/**/*.rb
15
- exclude_paths:
16
- - spec/**/*
17
- - examples/**/*
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- .DS_Store
2
- coverage
3
- /.bundle
4
- vendor/bundle
5
- bin/
6
- log/
7
- tmp/
8
- .idea/
9
- Gemfile.lock
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --color
2
- --require spec_helper
3
- --order random
@@ -1,29 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- sudo: false
4
- bundler_args: --without benchmarks tools
5
- before_install: gem update --system
6
- before_script:
7
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
8
- - chmod +x ./cc-test-reporter
9
- - ./cc-test-reporter before-build
10
- after_script:
11
- - "[ -d coverage ] && ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
12
- script:
13
- - bundle exec rake
14
- rvm:
15
- - 2.6.1
16
- - 2.5.3
17
- - 2.4.5
18
- - jruby-9.2.6.0
19
- env:
20
- global:
21
- - COVERAGE=true
22
- notifications:
23
- email: false
24
- webhooks:
25
- urls:
26
- - https://webhooks.gitter.im/e/19098b4253a72c9796db
27
- on_success: change # options: [always|never|change] default: always
28
- on_failure: always # options: [always|never|change] default: always
29
- on_start: false # default: false
@@ -1,31 +0,0 @@
1
- # Issue Guidelines
2
-
3
- ## Reporting bugs
4
-
5
- If you found a bug, report an issue and describe what's the expected behavior versus what actually happens. If the bug causes a crash, attach a full backtrace. If possible, a reproduction script showing the problem is highly appreciated.
6
-
7
- ## Reporting feature requests
8
-
9
- Report a feature request **only after discussing it first on [the discussion forum][1]** where it was accepted. Please provide a concise description of the feature, don't link to a discussion thread, and instead summarize what was discussed.
10
-
11
- ## Reporting questions, support requests, ideas, concerns etc.
12
-
13
- **PLEASE DON'T** - use [the discussion forum][1] instead.
14
-
15
- # Pull Request Guidelines
16
-
17
- A Pull Request will only be accepted if it addresses a specific issue that was reported previously, or fixes typos, mistakes in documentation etc.
18
-
19
- Other requirements:
20
-
21
- 1) Do not open a pull request if you can't provide tests along with it. If you have problems writing tests, ask for help in the related issue.
22
- 2) Follow the style conventions of the surrounding code. In most cases, this is standard ruby style.
23
- 3) Add API documentation if it's a new feature
24
- 4) Update API documentation if it changes an existing feature
25
- 5) Bonus points for sending a PR to [github.com/dry-rb/dry-rb.org](https://github.com/dry-rb/dry-rb.org) which updates user documentation and guides
26
-
27
- # Asking for help
28
-
29
- If these guidelines aren't helpful, and you're stuck, please post a message on [the discussion forum][1].
30
-
31
- [1]: https://discourse.dry-rb.org/
data/Gemfile DELETED
@@ -1,25 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
4
-
5
- group :test do
6
- gem 'i18n', require: false
7
- platform :mri do
8
- gem 'simplecov', require: false
9
- end
10
- gem 'dry-monads', '>= 0.4.0', require: false
11
- gem 'dry-struct'
12
- end
13
-
14
- group :tools do
15
- gem 'pry-byebug', platform: :mri
16
- gem 'pry', platform: :jruby
17
- end
18
-
19
- group :benchmarks do
20
- gem 'hotch', platform: :mri
21
- gem 'activemodel', '~> 5.0.0.rc'
22
- gem 'actionpack', '~> 5.0.0.rc'
23
- gem 'benchmark-ips'
24
- gem 'virtus'
25
- end
data/Rakefile DELETED
@@ -1,22 +0,0 @@
1
- #!/usr/bin/env rake
2
- require 'bundler/gem_tasks'
3
-
4
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib'))
5
-
6
- require 'rspec/core'
7
- require 'rspec/core/rake_task'
8
-
9
- desc 'Run all specs in spec directory'
10
- task :run_specs do
11
- core_result = RSpec::Core::Runner.run(['spec/integration', 'spec/unit'])
12
- RSpec.clear_examples
13
-
14
- Dir[SPEC_ROOT.join('shared/**/*.rb')].each(&method(:load))
15
-
16
- Dry::Validation.load_extensions(:monads, :struct)
17
- ext_result = RSpec::Core::Runner.run(['spec'])
18
-
19
- exit [core_result, ext_result].max
20
- end
21
-
22
- task default: :run_specs
@@ -1,64 +0,0 @@
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.Params do
32
- configure do
33
- config.messages = :i18n
34
- config.type_specs = true
35
- end
36
-
37
- required(:email, :string).filled
38
- required(:age, :integer).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
@@ -1,64 +0,0 @@
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.Params do
32
- configure do
33
- config.messages = :i18n
34
- config.type_specs = true
35
- end
36
-
37
- required(:email, :string).filled
38
- required(:age, :integer).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
@@ -1,52 +0,0 @@
1
- require 'benchmark/ips'
2
-
3
- require 'active_model'
4
- require 'dry-validation'
5
-
6
- I18n.locale = :en
7
- I18n.backend.load_translations
8
-
9
- COUNT = ENV['COUNT'].to_i
10
- FIELDS = COUNT.times.map { |i| :"field_#{i}" }
11
-
12
- class User
13
- include ActiveModel::Validations
14
-
15
- attr_reader(*FIELDS)
16
- validates(*FIELDS, presence: true, numericality: { greater_than: FIELDS.size / 2 })
17
-
18
- def initialize(attrs)
19
- attrs.each do |field, value|
20
- instance_variable_set(:"@#{field}", value)
21
- end
22
- end
23
- end
24
-
25
- schema = Dry::Validation.Schema do
26
- configure do
27
- config.messages = :i18n
28
- end
29
-
30
- FIELDS.each do |field|
31
- required(field).value(:int?, gt?: FIELDS.size / 2)
32
- end
33
- end
34
-
35
- data = FIELDS.reduce({}) { |h, f| h.update(f => FIELDS.index(f) + 1) }
36
-
37
- puts schema.(data).inspect
38
- puts User.new(data).validate
39
-
40
- Benchmark.ips do |x|
41
- x.report('ActiveModel::Validations') do
42
- user = User.new(data)
43
- user.validate
44
- user.errors
45
- end
46
-
47
- x.report('dry-validation / schema') do
48
- schema.(data).messages
49
- end
50
-
51
- x.compare!
52
- end
@@ -1,20 +0,0 @@
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
@@ -1,20 +0,0 @@
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
@@ -1,14 +0,0 @@
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
@@ -1,30 +0,0 @@
1
- require_relative 'suite'
2
- require 'hotch'
3
-
4
- require 'dry-validation'
5
-
6
- I18n.locale = :en
7
- I18n.backend.load_translations
8
-
9
- COUNT = ENV['COUNT'].to_i
10
- FIELDS = COUNT.times.map { |i| :"field_#{i}" }
11
-
12
- schema = Dry::Validation.Schema do
13
- configure do
14
- config.messages = :i18n
15
- end
16
-
17
- FIELDS.each do |field|
18
- required(field).filled(gt?: FIELDS.size / 2)
19
- end
20
- end
21
-
22
- data = FIELDS.reduce({}) { |h, f| h.update(f => FIELDS.index(f) + 1) }
23
-
24
- puts schema.(data).inspect
25
-
26
- Hotch() do
27
- 100.times do
28
- schema.(data).messages
29
- end
30
- end
@@ -1,20 +0,0 @@
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
@@ -1,5 +0,0 @@
1
- require 'i18n'
2
- require 'dry-validation'
3
-
4
- I18n.locale = :en
5
- I18n.backend.load_translations