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.
Files changed (204) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +696 -239
  3. data/LICENSE +1 -1
  4. data/README.md +15 -12
  5. data/config/errors.yml +3 -88
  6. data/dry-validation.gemspec +31 -17
  7. data/lib/dry-validation.rb +3 -1
  8. data/lib/dry/validation.rb +45 -28
  9. data/lib/dry/validation/config.rb +24 -0
  10. data/lib/dry/validation/constants.rb +43 -0
  11. data/lib/dry/validation/contract.rb +171 -0
  12. data/lib/dry/validation/contract/class_interface.rb +230 -0
  13. data/lib/dry/validation/evaluator.rb +224 -0
  14. data/lib/dry/validation/extensions/hints.rb +67 -0
  15. data/lib/dry/validation/extensions/monads.rb +24 -8
  16. data/lib/dry/validation/extensions/predicates_as_macros.rb +75 -0
  17. data/lib/dry/validation/failures.rb +70 -0
  18. data/lib/dry/validation/function.rb +44 -0
  19. data/lib/dry/validation/macro.rb +38 -0
  20. data/lib/dry/validation/macros.rb +104 -0
  21. data/lib/dry/validation/message.rb +80 -80
  22. data/lib/dry/validation/message_set.rb +80 -105
  23. data/lib/dry/validation/messages/resolver.rb +131 -0
  24. data/lib/dry/validation/result.rb +183 -41
  25. data/lib/dry/validation/rule.rb +135 -0
  26. data/lib/dry/validation/schema_ext.rb +19 -0
  27. data/lib/dry/validation/values.rb +104 -0
  28. data/lib/dry/validation/version.rb +3 -1
  29. metadata +47 -336
  30. data/.codeclimate.yml +0 -17
  31. data/.gitignore +0 -9
  32. data/.rspec +0 -3
  33. data/.travis.yml +0 -26
  34. data/CONTRIBUTING.md +0 -31
  35. data/Gemfile +0 -33
  36. data/Rakefile +0 -22
  37. data/benchmarks/benchmark_form_invalid.rb +0 -64
  38. data/benchmarks/benchmark_form_valid.rb +0 -64
  39. data/benchmarks/benchmark_schema_invalid_huge.rb +0 -52
  40. data/benchmarks/profile_schema_call_invalid.rb +0 -20
  41. data/benchmarks/profile_schema_call_valid.rb +0 -20
  42. data/benchmarks/profile_schema_definition.rb +0 -14
  43. data/benchmarks/profile_schema_huge_invalid.rb +0 -30
  44. data/benchmarks/profile_schema_messages_invalid.rb +0 -20
  45. data/benchmarks/suite.rb +0 -5
  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 -135
  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 -192
  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 -112
  65. data/lib/dry/validation/messages/i18n.rb +0 -35
  66. data/lib/dry/validation/messages/namespaced.rb +0 -32
  67. data/lib/dry/validation/messages/yaml.rb +0 -54
  68. data/lib/dry/validation/predicate_registry.rb +0 -115
  69. data/lib/dry/validation/schema.rb +0 -126
  70. data/lib/dry/validation/schema/check.rb +0 -37
  71. data/lib/dry/validation/schema/class_interface.rb +0 -189
  72. data/lib/dry/validation/schema/deprecated.rb +0 -30
  73. data/lib/dry/validation/schema/dsl.rb +0 -118
  74. data/lib/dry/validation/schema/form.rb +0 -9
  75. data/lib/dry/validation/schema/json.rb +0 -21
  76. data/lib/dry/validation/schema/key.rb +0 -71
  77. data/lib/dry/validation/schema/params.rb +0 -22
  78. data/lib/dry/validation/schema/rule.rb +0 -202
  79. data/lib/dry/validation/schema/value.rb +0 -211
  80. data/lib/dry/validation/schema_compiler.rb +0 -81
  81. data/lib/dry/validation/type_specs.rb +0 -70
  82. data/spec/extensions/monads/result_spec.rb +0 -40
  83. data/spec/extensions/struct/schema_spec.rb +0 -32
  84. data/spec/fixtures/locales/en.yml +0 -6
  85. data/spec/fixtures/locales/pl.yml +0 -18
  86. data/spec/integration/custom_error_messages_spec.rb +0 -48
  87. data/spec/integration/custom_predicates_spec.rb +0 -228
  88. data/spec/integration/hints_spec.rb +0 -170
  89. data/spec/integration/injecting_rules_spec.rb +0 -30
  90. data/spec/integration/json/defining_base_schema_spec.rb +0 -41
  91. data/spec/integration/localized_error_messages_spec.rb +0 -72
  92. data/spec/integration/message_compiler_spec.rb +0 -405
  93. data/spec/integration/messages/i18n_spec.rb +0 -94
  94. data/spec/integration/optional_keys_spec.rb +0 -28
  95. data/spec/integration/params/predicates/array_spec.rb +0 -287
  96. data/spec/integration/params/predicates/empty_spec.rb +0 -263
  97. data/spec/integration/params/predicates/eql_spec.rb +0 -327
  98. data/spec/integration/params/predicates/even_spec.rb +0 -455
  99. data/spec/integration/params/predicates/excluded_from_spec.rb +0 -455
  100. data/spec/integration/params/predicates/excludes_spec.rb +0 -391
  101. data/spec/integration/params/predicates/false_spec.rb +0 -455
  102. data/spec/integration/params/predicates/filled_spec.rb +0 -467
  103. data/spec/integration/params/predicates/format_spec.rb +0 -454
  104. data/spec/integration/params/predicates/gt_spec.rb +0 -519
  105. data/spec/integration/params/predicates/gteq_spec.rb +0 -519
  106. data/spec/integration/params/predicates/included_in_spec.rb +0 -455
  107. data/spec/integration/params/predicates/includes_spec.rb +0 -391
  108. data/spec/integration/params/predicates/key_spec.rb +0 -67
  109. data/spec/integration/params/predicates/lt_spec.rb +0 -519
  110. data/spec/integration/params/predicates/lteq_spec.rb +0 -519
  111. data/spec/integration/params/predicates/max_size_spec.rb +0 -391
  112. data/spec/integration/params/predicates/min_size_spec.rb +0 -391
  113. data/spec/integration/params/predicates/none_spec.rb +0 -265
  114. data/spec/integration/params/predicates/not_eql_spec.rb +0 -327
  115. data/spec/integration/params/predicates/odd_spec.rb +0 -455
  116. data/spec/integration/params/predicates/size/fixed_spec.rb +0 -393
  117. data/spec/integration/params/predicates/size/range_spec.rb +0 -396
  118. data/spec/integration/params/predicates/true_spec.rb +0 -455
  119. data/spec/integration/params/predicates/type_spec.rb +0 -391
  120. data/spec/integration/result_spec.rb +0 -81
  121. data/spec/integration/schema/array_schema_spec.rb +0 -59
  122. data/spec/integration/schema/check_rules_spec.rb +0 -119
  123. data/spec/integration/schema/check_with_nested_el_spec.rb +0 -37
  124. data/spec/integration/schema/check_with_nth_el_spec.rb +0 -25
  125. data/spec/integration/schema/default_settings_spec.rb +0 -11
  126. data/spec/integration/schema/defining_base_schema_spec.rb +0 -41
  127. data/spec/integration/schema/dynamic_predicate_args_spec.rb +0 -43
  128. data/spec/integration/schema/each_with_set_spec.rb +0 -70
  129. data/spec/integration/schema/extending_dsl_spec.rb +0 -27
  130. data/spec/integration/schema/form_spec.rb +0 -236
  131. data/spec/integration/schema/hash_schema_spec.rb +0 -47
  132. data/spec/integration/schema/inheriting_schema_spec.rb +0 -31
  133. data/spec/integration/schema/input_processor_spec.rb +0 -46
  134. data/spec/integration/schema/json/explicit_types_spec.rb +0 -157
  135. data/spec/integration/schema/json_spec.rb +0 -163
  136. data/spec/integration/schema/macros/confirmation_spec.rb +0 -35
  137. data/spec/integration/schema/macros/each_spec.rb +0 -268
  138. data/spec/integration/schema/macros/filled_spec.rb +0 -87
  139. data/spec/integration/schema/macros/input_spec.rb +0 -139
  140. data/spec/integration/schema/macros/maybe_spec.rb +0 -99
  141. data/spec/integration/schema/macros/rule_spec.rb +0 -75
  142. data/spec/integration/schema/macros/value_spec.rb +0 -119
  143. data/spec/integration/schema/macros/when_spec.rb +0 -62
  144. data/spec/integration/schema/nested_schemas_spec.rb +0 -236
  145. data/spec/integration/schema/nested_values_spec.rb +0 -46
  146. data/spec/integration/schema/not_spec.rb +0 -34
  147. data/spec/integration/schema/numbers_spec.rb +0 -19
  148. data/spec/integration/schema/option_with_default_spec.rb +0 -64
  149. data/spec/integration/schema/or_spec.rb +0 -87
  150. data/spec/integration/schema/params/defining_base_schema_spec.rb +0 -41
  151. data/spec/integration/schema/params/explicit_types_spec.rb +0 -195
  152. data/spec/integration/schema/params_spec.rb +0 -234
  153. data/spec/integration/schema/predicate_verification_spec.rb +0 -9
  154. data/spec/integration/schema/predicates/array_spec.rb +0 -295
  155. data/spec/integration/schema/predicates/custom_spec.rb +0 -103
  156. data/spec/integration/schema/predicates/empty_spec.rb +0 -263
  157. data/spec/integration/schema/predicates/eql_spec.rb +0 -327
  158. data/spec/integration/schema/predicates/even_spec.rb +0 -455
  159. data/spec/integration/schema/predicates/excluded_from/array_spec.rb +0 -459
  160. data/spec/integration/schema/predicates/excluded_from/range_spec.rb +0 -459
  161. data/spec/integration/schema/predicates/excludes_spec.rb +0 -391
  162. data/spec/integration/schema/predicates/filled_spec.rb +0 -467
  163. data/spec/integration/schema/predicates/format_spec.rb +0 -455
  164. data/spec/integration/schema/predicates/gt_spec.rb +0 -519
  165. data/spec/integration/schema/predicates/gteq_spec.rb +0 -519
  166. data/spec/integration/schema/predicates/hash_spec.rb +0 -69
  167. data/spec/integration/schema/predicates/included_in/array_spec.rb +0 -459
  168. data/spec/integration/schema/predicates/included_in/range_spec.rb +0 -459
  169. data/spec/integration/schema/predicates/includes_spec.rb +0 -391
  170. data/spec/integration/schema/predicates/key_spec.rb +0 -88
  171. data/spec/integration/schema/predicates/lt_spec.rb +0 -520
  172. data/spec/integration/schema/predicates/lteq_spec.rb +0 -519
  173. data/spec/integration/schema/predicates/max_size_spec.rb +0 -391
  174. data/spec/integration/schema/predicates/min_size_spec.rb +0 -391
  175. data/spec/integration/schema/predicates/none_spec.rb +0 -265
  176. data/spec/integration/schema/predicates/not_eql_spec.rb +0 -391
  177. data/spec/integration/schema/predicates/odd_spec.rb +0 -455
  178. data/spec/integration/schema/predicates/size/fixed_spec.rb +0 -398
  179. data/spec/integration/schema/predicates/size/range_spec.rb +0 -395
  180. data/spec/integration/schema/predicates/type_spec.rb +0 -413
  181. data/spec/integration/schema/reusing_schema_spec.rb +0 -33
  182. data/spec/integration/schema/using_types_spec.rb +0 -135
  183. data/spec/integration/schema/validate_spec.rb +0 -120
  184. data/spec/integration/schema/xor_spec.rb +0 -35
  185. data/spec/integration/schema_builders_spec.rb +0 -17
  186. data/spec/integration/schema_spec.rb +0 -173
  187. data/spec/shared/message_compiler.rb +0 -11
  188. data/spec/shared/predicate_helper.rb +0 -15
  189. data/spec/shared/rule_compiler.rb +0 -8
  190. data/spec/spec_helper.rb +0 -58
  191. data/spec/support/define_struct.rb +0 -25
  192. data/spec/support/matchers.rb +0 -38
  193. data/spec/support/mutant.rb +0 -9
  194. data/spec/support/predicates_integration.rb +0 -7
  195. data/spec/unit/input_processor_compiler/json_spec.rb +0 -283
  196. data/spec/unit/input_processor_compiler/params_spec.rb +0 -328
  197. data/spec/unit/message_compiler/visit_failure_spec.rb +0 -38
  198. data/spec/unit/message_compiler/visit_spec.rb +0 -16
  199. data/spec/unit/message_compiler_spec.rb +0 -7
  200. data/spec/unit/predicate_registry_spec.rb +0 -34
  201. data/spec/unit/schema/key_spec.rb +0 -38
  202. data/spec/unit/schema/rule_spec.rb +0 -42
  203. data/spec/unit/schema/value_spec.rb +0 -131
  204. data/spec/unit/schema_spec.rb +0 -35
data/.codeclimate.yml DELETED
@@ -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
data/.travis.yml DELETED
@@ -1,26 +0,0 @@
1
- language: ruby
2
- dist: trusty
3
- sudo: required
4
- cache: bundler
5
- bundler_args: --without benchmarks tools
6
- after_success:
7
- - '[ -d coverage ] && bundle exec codeclimate-test-reporter'
8
- script:
9
- - bundle exec rake
10
- rvm:
11
- - 2.2
12
- - 2.3
13
- - 2.4.1
14
- - jruby-9.1.13.0
15
- env:
16
- global:
17
- - COVERAGE=true
18
- - JRUBY_OPTS='--dev -J-Xmx1024M'
19
- notifications:
20
- email: false
21
- webhooks:
22
- urls:
23
- - https://webhooks.gitter.im/e/19098b4253a72c9796db
24
- on_success: change # options: [always|never|change] default: always
25
- on_failure: always # options: [always|never|change] default: always
26
- on_start: false # default: false
data/CONTRIBUTING.md DELETED
@@ -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,33 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
4
-
5
- gem 'dry-logic', git: 'https://github.com/dry-rb/dry-logic', branch: 'master'
6
-
7
- group :test do
8
- gem 'i18n', require: false
9
- platform :mri do
10
- gem 'codeclimate-test-reporter', require: false
11
- gem 'simplecov', require: false
12
- end
13
- gem 'dry-monads', '>= 0.4.0', require: false
14
- gem 'dry-struct', require: false
15
- end
16
-
17
- group :tools do
18
- gem 'pry-byebug', platform: :mri
19
- gem 'pry', platform: :jruby
20
-
21
- unless ENV['TRAVIS']
22
- gem 'mutant', git: 'https://github.com/mbj/mutant'
23
- gem 'mutant-rspec', git: 'https://github.com/mbj/mutant'
24
- end
25
- end
26
-
27
- group :benchmarks do
28
- gem 'hotch', platform: :mri
29
- gem 'activemodel', '~> 5.0.0.rc'
30
- gem 'actionpack', '~> 5.0.0.rc'
31
- gem 'benchmark-ips'
32
- gem 'virtus'
33
- 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