dry-validation 1.5.5 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ab7416252f8c05238652ca9116ec461448e2024c8d68f7c588e3ef401f7a2ed6
4
- data.tar.gz: 4137cfee57067480713402f0dd571cb06fde1ef6cafa6feb717596939cbfac1d
3
+ metadata.gz: 5c0ec5ac402da094ae496a120274c13f2a251300df9b178adb0b688968687082
4
+ data.tar.gz: b07231e7542c689d1d02cf2e8de3837592cb7867cc7772c4968034129bb65012
5
5
  SHA512:
6
- metadata.gz: 01cae726d99151eed0bb1ef1514e8db05f9d10c8d341ffdb8ef7329de9456b63511f5eb390b25113c4da06241dfb1070ca1110ae24a5e050b6c6d5e03e2100a5
7
- data.tar.gz: 849817760314b9a9e4cc120bc618fc42a302cc08150dcc23eb20c726b1a9b79481b19ca0013674f544608600d7d573d5cf1d1436e826bbcf7d25cf9bd3bad3e6
6
+ metadata.gz: 7d4835f01c7c8e02d63e1583f6e140efb8db33582800c2c276c94865f6841d8533b91b3fd5832944f57ad8e59f7660dcdff930dfe77e0ae17537c18f0caa14c6
7
+ data.tar.gz: e8b2cba4863b18461a8f64e6581654aecaca6525b603e40e6896199faecd5a735f8e5d1a8dbd9d6bb1ac43d562d8bb09ff3bbf77cd01d9b21d9cdef8da4f8e36
data/CHANGELOG.md CHANGED
@@ -1,13 +1,62 @@
1
- ## 1.5.5
1
+ <!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
2
+
3
+ ## 1.8.0 2022-02-17
4
+
5
+
6
+ ### Added
7
+
8
+ - New rule helper `base_rule_error?` which checks if there's any base error set (via #690) (@wuarmin)
9
+
10
+ ### Changed
11
+
12
+ - Dependency on dry-schema was bumped to 1.9.1 (@solnic)
13
+
14
+ [Compare v1.7.0...v1.8.0](https://github.com/dry-rb/dry-validation/compare/v1.7.0...v1.8.0)
15
+
16
+ ## 1.7.0 2021-09-12
17
+
18
+
19
+ ### Changed
20
+
21
+ - [internal] Upgraded to new `setting` API provided in dry-configurable 0.13.0 (@timriley in #686 and 3f8f7d8)
22
+ - Bumped dry-schema dependency to 1.8.0 (in part, to ensure dry-configurable 0.13.0 is available) (@timriley)
23
+
24
+ [Compare v1.6.0...v1.7.0](https://github.com/dry-rb/dry-validation/compare/v1.6.0...v1.7.0)
25
+
26
+ ## 1.6.0 2020-12-05
27
+
28
+
29
+ ### Added
30
+
31
+ - You can now pass a key name or path to `rule_error?` predicate (issue #658 closed via #673) (@moofkit)
32
+ - You can now pass initial context object to `Contract#call` (issue #674 via #675) (@pyromaniac)
33
+
34
+ ### Fixed
35
+
36
+ - Checking `key?` within a rule no longer crashes when value is `nil` or an empty string (issue #670 fixed via #672) (@alexxty7)
37
+
38
+
39
+ [Compare v1.5.6...v1.6.0](https://github.com/dry-rb/dry-validation/compare/v1.5.6...v1.6.0)
40
+
41
+ ## 1.5.6 2020-09-04
42
+
43
+
44
+ ### Fixed
45
+
46
+ - Dependency on dry-schema was bumped to >= 1.5.1. This time for real (@solnic)
47
+
48
+
49
+ [Compare v1.5.5...v1.5.6](https://github.com/dry-rb/dry-validation/compare/v1.5.5...v1.5.6)
50
+
51
+ ## 1.5.5 2020-09-03
2
52
 
3
- 2020-09-03
4
53
 
5
54
  ### Fixed
6
55
 
7
56
  - Dependency on dry-schema was bumped to >= 1.5.2 (see #666 for more info) (@artofhuman)
8
57
 
9
58
 
10
- [Compare v1.5.4...master](https://github.com/dry-rb/dry-validation/compare/v1.5.4...master)
59
+ [Compare v1.5.4...v1.5.5](https://github.com/dry-rb/dry-validation/compare/v1.5.4...v1.5.5)
11
60
 
12
61
  ## 1.5.4 2020-08-21
13
62
 
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015-2020 dry-rb team
3
+ Copyright (c) 2015-2021 dry-rb team
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  this software and associated documentation files (the "Software"), to deal in
data/README.md CHANGED
@@ -1,3 +1,4 @@
1
+ <!--- this file is synced from dry-rb/template-gem project -->
1
2
  [gem]: https://rubygems.org/gems/dry-validation
2
3
  [actions]: https://github.com/dry-rb/dry-validation/actions
3
4
  [codacy]: https://www.codacy.com/gh/dry-rb/dry-validation
@@ -14,15 +15,15 @@
14
15
 
15
16
  ## Links
16
17
 
17
- * [User documentation](http://dry-rb.org/gems/dry-validation)
18
+ * [User documentation](https://dry-rb.org/gems/dry-validation)
18
19
  * [API documentation](http://rubydoc.info/gems/dry-validation)
19
20
 
20
21
  ## Supported Ruby versions
21
22
 
22
23
  This library officially supports the following Ruby versions:
23
24
 
24
- * MRI >= `2.4`
25
- * jruby >= `9.2`
25
+ * MRI `>= 2.7.0`
26
+ * jruby `>= 9.3` (postponed until 2.7 is supported)
26
27
 
27
28
  ## License
28
29
 
@@ -1,39 +1,39 @@
1
1
  # frozen_string_literal: true
2
- # this file is managed by dry-rb/devtools project
3
2
 
4
- lib = File.expand_path('lib', __dir__)
3
+ # this file is synced from dry-rb/template-gem project
4
+
5
+ lib = File.expand_path("lib", __dir__)
5
6
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
- require 'dry/validation/version'
7
+ require "dry/validation/version"
7
8
 
8
9
  Gem::Specification.new do |spec|
9
- spec.name = 'dry-validation'
10
+ spec.name = "dry-validation"
10
11
  spec.authors = ["Piotr Solnica"]
11
12
  spec.email = ["piotr.solnica@gmail.com"]
12
- spec.license = 'MIT'
13
+ spec.license = "MIT"
13
14
  spec.version = Dry::Validation::VERSION.dup
14
15
 
15
16
  spec.summary = "Validation library"
16
17
  spec.description = spec.summary
17
- spec.homepage = 'https://dry-rb.org/gems/dry-validation'
18
+ spec.homepage = "https://dry-rb.org/gems/dry-validation"
18
19
  spec.files = Dir["CHANGELOG.md", "LICENSE", "README.md", "dry-validation.gemspec", "lib/**/*", "config/*.yml"]
19
- spec.bindir = 'bin'
20
+ spec.bindir = "bin"
20
21
  spec.executables = []
21
- spec.require_paths = ['lib']
22
+ spec.require_paths = ["lib"]
22
23
 
23
- spec.metadata['allowed_push_host'] = 'https://rubygems.org'
24
- spec.metadata['changelog_uri'] = 'https://github.com/dry-rb/dry-validation/blob/master/CHANGELOG.md'
25
- spec.metadata['source_code_uri'] = 'https://github.com/dry-rb/dry-validation'
26
- spec.metadata['bug_tracker_uri'] = 'https://github.com/dry-rb/dry-validation/issues'
24
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
25
+ spec.metadata["changelog_uri"] = "https://github.com/dry-rb/dry-validation/blob/master/CHANGELOG.md"
26
+ spec.metadata["source_code_uri"] = "https://github.com/dry-rb/dry-validation"
27
+ spec.metadata["bug_tracker_uri"] = "https://github.com/dry-rb/dry-validation/issues"
27
28
 
28
- spec.required_ruby_version = ">= 2.4.0"
29
+ spec.required_ruby_version = ">= 2.7.0"
29
30
 
30
31
  # to update dependencies edit project.yml
31
32
  spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
32
33
  spec.add_runtime_dependency "dry-container", "~> 0.7", ">= 0.7.1"
33
- spec.add_runtime_dependency "dry-core", "~> 0.4"
34
- spec.add_runtime_dependency "dry-equalizer", "~> 0.2"
34
+ spec.add_runtime_dependency "dry-core", "~> 0.5", ">= 0.5"
35
35
  spec.add_runtime_dependency "dry-initializer", "~> 3.0"
36
- spec.add_runtime_dependency "dry-schema", "~> 1.5"
36
+ spec.add_runtime_dependency "dry-schema", "~> 1.9", ">= 1.9.1"
37
37
 
38
38
  spec.add_development_dependency "bundler"
39
39
  spec.add_development_dependency "rake"
@@ -11,7 +11,7 @@ module Dry
11
11
  #
12
12
  # @api public
13
13
  class Config < Schema::Config
14
- setting :macros, Macros::Container.new, &:dup
14
+ setting :macros, default: Macros::Container.new, constructor: :dup.to_proc
15
15
 
16
16
  # @api private
17
17
  def dup
@@ -2,7 +2,7 @@
2
2
 
3
3
  require "concurrent/map"
4
4
 
5
- require "dry/equalizer"
5
+ require "dry/core/equalizer"
6
6
  require "dry/initializer"
7
7
  require "dry/schema/path"
8
8
 
@@ -68,6 +68,11 @@ module Dry
68
68
  # @api public
69
69
  option :macros, default: -> { config.macros }
70
70
 
71
+ # @!attribute [r] default_context
72
+ # @return [Hash] Default context for rules
73
+ # @api public
74
+ option :default_context, default: -> { EMPTY_HASH }
75
+
71
76
  # @!attribute [r] schema
72
77
  # @return [Dry::Schema::Params, Dry::Schema::JSON, Dry::Schema::Processor]
73
78
  # @api private
@@ -86,12 +91,19 @@ module Dry
86
91
  # Apply the contract to an input
87
92
  #
88
93
  # @param [Hash] input The input to validate
94
+ # @param [Hash] context Initial context for rules
89
95
  #
90
96
  # @return [Result]
91
97
  #
92
98
  # @api public
93
- def call(input)
94
- Result.new(schema.(input), Concurrent::Map.new) do |result|
99
+ # rubocop: disable Metrics/AbcSize
100
+ def call(input, context = EMPTY_HASH)
101
+ context_map = Concurrent::Map.new.tap do |map|
102
+ default_context.each { |key, value| map[key] = value }
103
+ context.each { |key, value| map[key] = value }
104
+ end
105
+
106
+ Result.new(schema.(input), context_map) do |result|
95
107
  rules.each do |rule|
96
108
  next if rule.keys.any? { |key| error?(result, key) }
97
109
 
@@ -103,6 +115,7 @@ module Dry
103
115
  end
104
116
  end
105
117
  end
118
+ # rubocop: enable Metrics/AbcSize
106
119
 
107
120
  # Return a nice string representation
108
121
  #
@@ -17,7 +17,7 @@ module Dry
17
17
  # @api public
18
18
  class Evaluator
19
19
  extend Dry::Initializer
20
- extend Dry::Core::Deprecations[:'dry-validation']
20
+ extend Dry::Core::Deprecations[:"dry-validation"]
21
21
 
22
22
  deprecate :error?, :schema_error?
23
23
 
@@ -73,7 +73,7 @@ module Dry
73
73
  @_options = options
74
74
 
75
75
  if block
76
- exec_opts = block_options.map { |key, value| [key, _options[value]] }.to_h
76
+ exec_opts = block_options.transform_values { _options[_1] }
77
77
  instance_exec(**exec_opts, &block)
78
78
  end
79
79
 
@@ -187,11 +187,26 @@ module Dry
187
187
 
188
188
  # Check if there are any errors on the current rule
189
189
  #
190
+ # @param path [Symbol, String, Array] A Path-compatible spec
191
+ #
192
+ # @return [Boolean]
193
+ #
194
+ # @api public
195
+ def rule_error?(path = nil)
196
+ if path.nil?
197
+ !key(self.path).empty?
198
+ else
199
+ result.rule_error?(path)
200
+ end
201
+ end
202
+
203
+ # Check if there are any base rule errors
204
+ #
190
205
  # @return [Boolean]
191
206
  #
192
207
  # @api public
193
- def rule_error?
194
- !key(path).empty?
208
+ def base_rule_error?
209
+ !base.empty? || result.base_rule_error?
195
210
  end
196
211
 
197
212
  # @api private
@@ -36,8 +36,7 @@ module Dry
36
36
  block
37
37
  .parameters
38
38
  .select { |arg,| arg.equal?(:keyreq) }
39
- .map { |_, name| [name, BLOCK_OPTIONS_MAPPINGS[name]] }
40
- .to_h
39
+ .to_h { [_2, BLOCK_OPTIONS_MAPPINGS[_2]] }
41
40
  end
42
41
  end
43
42
  end
@@ -31,7 +31,7 @@ module Dry
31
31
 
32
32
  # @api private
33
33
  def extract_block_options(options)
34
- block_options.map { |key, value| [key, options[value]] }.to_h
34
+ block_options.transform_values { options[_1] }
35
35
  end
36
36
  end
37
37
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/equalizer"
3
+ require "dry/core/equalizer"
4
4
 
5
5
  require "dry/schema/constants"
6
6
  require "dry/schema/message"
@@ -70,11 +70,13 @@ module Dry
70
70
  # Initialize a new error object
71
71
  #
72
72
  # @api private
73
+ # rubocop: disable Lint/MissingSuper
73
74
  def initialize(text, path:, meta: EMPTY_HASH)
74
75
  @text = text
75
76
  @path = Array(path)
76
77
  @meta = meta
77
78
  end
79
+ # rubocop: enable Lint/MissingSuper
78
80
 
79
81
  # Check if this is a base error not associated with any key
80
82
  #
@@ -61,7 +61,8 @@ module Dry
61
61
  # @api public
62
62
  #
63
63
  # rubocop:disable Metrics/AbcSize
64
- def message(rule, tokens: EMPTY_HASH, locale: nil, full: false, path:)
64
+ # rubocop:disable Metrics/PerceivedComplexity
65
+ def message(rule, path:, tokens: EMPTY_HASH, locale: nil, full: false)
65
66
  keys = path.to_a.compact
66
67
  msg_opts = tokens.merge(path: keys, locale: locale || messages.default_locale)
67
68
 
@@ -88,6 +89,7 @@ module Dry
88
89
 
89
90
  [message_text(text, path: path, locale: locale, full: full), meta]
90
91
  end
92
+ # rubocop:enable Metrics/PerceivedComplexity
91
93
  # rubocop:enable Metrics/AbcSize
92
94
 
93
95
  private
@@ -110,11 +112,7 @@ module Dry
110
112
  end
111
113
 
112
114
  def parse_tokens(tokens)
113
- Hash[
114
- tokens.map do |key, token|
115
- [key, parse_token(token)]
116
- end
117
- ]
115
+ tokens.transform_values { parse_token(_1) }
118
116
  end
119
117
 
120
118
  def parse_token(token)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "concurrent/map"
4
- require "dry/equalizer"
4
+ require "dry/core/equalizer"
5
5
 
6
6
  require "dry/validation/constants"
7
7
  require "dry/validation/message_set"
@@ -113,6 +113,20 @@ module Dry
113
113
  schema_result.error?(key)
114
114
  end
115
115
 
116
+ # Check if the rules includes an error for the provided key
117
+ #
118
+ # @api private
119
+ def rule_error?(key)
120
+ !schema_error?(key) && error?(key)
121
+ end
122
+
123
+ # Check if the result contains any base rule errors
124
+ #
125
+ # @api private
126
+ def base_rule_error?
127
+ !errors.filter(:base?).empty?
128
+ end
129
+
116
130
  # Check if there's any error for the provided key
117
131
  #
118
132
  # This does not consider errors from the nested values
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/equalizer"
3
+ require "dry/core/equalizer"
4
4
 
5
5
  require "dry/validation/constants"
6
6
  require "dry/validation/function"
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/equalizer"
3
+ require "dry/core/equalizer"
4
4
  require "dry/schema/path"
5
5
  require "dry/validation/constants"
6
6
 
@@ -61,23 +61,31 @@ module Dry
61
61
  end
62
62
 
63
63
  # @api public
64
+ # rubocop: disable Metrics/PerceivedComplexity
64
65
  def key?(key, hash = data)
65
66
  return hash.key?(key) if key.is_a?(Symbol)
66
67
 
68
+ # rubocop: disable Lint/DuplicateBranch
67
69
  Schema::Path[key].reduce(hash) do |a, e|
68
70
  if e.is_a?(Array)
69
71
  result = e.all? { |k| key?(k, a) }
70
72
  return result
71
73
  elsif e.is_a?(Symbol) && a.is_a?(Array)
72
74
  return false
75
+ elsif a.nil?
76
+ return false
77
+ elsif a.is_a?(String)
78
+ return false
73
79
  else
74
80
  return false unless a.is_a?(Array) ? (e >= 0 && e < a.size) : a.key?(e)
75
81
  end
76
82
  a[e]
77
83
  end
84
+ # rubocop: enable Lint/DuplicateBranch
78
85
 
79
86
  true
80
87
  end
88
+ # rubocop: enable Metrics/PerceivedComplexity
81
89
 
82
90
  # @api private
83
91
  def respond_to_missing?(meth, include_private = false)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Dry
4
4
  module Validation
5
- VERSION = "1.5.5"
5
+ VERSION = "1.8.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-validation
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.5
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-03 00:00:00.000000000 Z
11
+ date: 2022-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -50,28 +50,20 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '0.4'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '0.4'
61
- - !ruby/object:Gem::Dependency
62
- name: dry-equalizer
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
53
+ version: '0.5'
54
+ - - ">="
66
55
  - !ruby/object:Gem::Version
67
- version: '0.2'
56
+ version: '0.5'
68
57
  type: :runtime
69
58
  prerelease: false
70
59
  version_requirements: !ruby/object:Gem::Requirement
71
60
  requirements:
72
61
  - - "~>"
73
62
  - !ruby/object:Gem::Version
74
- version: '0.2'
63
+ version: '0.5'
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0.5'
75
67
  - !ruby/object:Gem::Dependency
76
68
  name: dry-initializer
77
69
  requirement: !ruby/object:Gem::Requirement
@@ -92,14 +84,20 @@ dependencies:
92
84
  requirements:
93
85
  - - "~>"
94
86
  - !ruby/object:Gem::Version
95
- version: '1.5'
87
+ version: '1.9'
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 1.9.1
96
91
  type: :runtime
97
92
  prerelease: false
98
93
  version_requirements: !ruby/object:Gem::Requirement
99
94
  requirements:
100
95
  - - "~>"
101
96
  - !ruby/object:Gem::Version
102
- version: '1.5'
97
+ version: '1.9'
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: 1.9.1
103
101
  - !ruby/object:Gem::Dependency
104
102
  name: bundler
105
103
  requirement: !ruby/object:Gem::Requirement
@@ -192,14 +190,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
192
190
  requirements:
193
191
  - - ">="
194
192
  - !ruby/object:Gem::Version
195
- version: 2.4.0
193
+ version: 2.7.0
196
194
  required_rubygems_version: !ruby/object:Gem::Requirement
197
195
  requirements:
198
196
  - - ">="
199
197
  - !ruby/object:Gem::Version
200
198
  version: '0'
201
199
  requirements: []
202
- rubygems_version: 3.0.3
200
+ rubygems_version: 3.1.6
203
201
  signing_key:
204
202
  specification_version: 4
205
203
  summary: Validation library