dry-schema 1.5.1 → 1.5.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c56536db764858bb0d594688d581e4f38fd46f949f75829c20a63d67902f3704
4
- data.tar.gz: f99af785ccdee69c8cc5d4398b4802612c2b3456e4d472a25d591d593ac9d2bb
3
+ metadata.gz: 26cb433ca43bd564e72496a3662035e91cec686962c2c5a3ba9bad0a0c8da5a0
4
+ data.tar.gz: 8a2decf348bf29e1e2c38e27a0237a872ea78db8b19af32ccdb11adc4928c7dd
5
5
  SHA512:
6
- metadata.gz: d6f538d54f0ab58595f14e94340e1cb2a3da45a5a4909e8aa5e3bb1a6d68fcd5992debf4d6a8c7909fb25166c11160d970dfb06ac4266e87869117ca984574b1
7
- data.tar.gz: 3a26179c03e7f4fccce53ae19c6d9133af913407ba64d05bf28a1b173fbdc5e922176edf94c48842829c5b52eda16f5589aa1b98b2848b3094e3713fc2844716
6
+ metadata.gz: 5d6b9d1a6cb3033aadfead9b2dac136cab561c2c0fd2cd97fbd58087168b42ee1cb9e5be34e745c9292d094c6ca2a621aa412b8126b7610d324fdd60f364a373
7
+ data.tar.gz: 97dc3d3283afbc0c996da01cc2ff566f409dce596a43b5f8158e9f44529e6a0f3427406c9b919bbfb4f9b2884ddb2567dbdb5379e8eb9d4fc49addccee41885c
@@ -1,3 +1,62 @@
1
+ ## 1.5.6 2020-10-21
2
+
3
+
4
+ ### Fixed
5
+
6
+ - Fixed stack error which was a regression introduced in 1.5.5 (issue #322 fixed via #323) (@flash-gordon)
7
+
8
+
9
+ [Compare v1.5.5...v1.5.6](https://github.com/dry-rb/dry-schema/compare/v1.5.5...v1.5.6)
10
+
11
+ ## 1.5.5 2020-10-08
12
+
13
+
14
+ ### Fixed
15
+
16
+ - Key validation works with messages that have meta-data (issue #310 fixed via #313) (@tadeusz-niemiec)
17
+ - Using an external schema along with a key specified as a `:hash` works as expected (issue #296 fixed via #315) (@tadeusz-niemiec + @solnic)
18
+ - `Result#error?(path)` works correctly when the path points to an array item (issue #317 fixed via #318) (@solnic)
19
+
20
+
21
+ [Compare v1.5.4...v1.5.5](https://github.com/dry-rb/dry-schema/compare/v1.5.4...v1.5.5)
22
+
23
+ ## 1.5.4
24
+
25
+ 2020-09-03
26
+
27
+ ### Fixed
28
+
29
+ - Key validation works correctly with a non-nested maybe hashes (issue #311 fixed via #312) (@svobom57)
30
+
31
+
32
+ [Compare v1.5.3...master](https://github.com/dry-rb/dry-schema/compare/v1.5.3...master)
33
+
34
+ ## 1.5.3 2020-08-21
35
+
36
+
37
+ ### Fixed
38
+
39
+ - Key validator works correctly with an array with maybe hash as its member (issue #308 fixed via #309) (@tadeusz-niemiec)
40
+
41
+ ### Changed
42
+
43
+ - [info extension] small performance improvement in the set visitor (see #305 for more details) (@esparta)
44
+
45
+ [Compare v1.5.2...v1.5.3](https://github.com/dry-rb/dry-schema/compare/v1.5.2...v1.5.3)
46
+
47
+ ## 1.5.2 2020-06-26
48
+
49
+
50
+ ### Fixed
51
+
52
+ - `Result#{success?,failure?}` work as expected when there are only key validation failures (issue #297 fixed via #298) (@adamransom)
53
+
54
+ ### Changed
55
+
56
+ - Using `full` option no longer adds a space between the name of a key and the message in case of languages that have no spaces between words (ie Japanese) (issue #161 closed via #292 by @tadeusz-niemiec)
57
+
58
+ [Compare v1.5.1...v1.5.2](https://github.com/dry-rb/dry-schema/compare/v1.5.1...v1.5.2)
59
+
1
60
  ## 1.5.1 2020-05-21
2
61
 
3
62
 
data/README.md CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  This library officially supports the following Ruby versions:
23
23
 
24
- * MRI >= `2.4`
24
+ * MRI >= `2.5
25
25
  * jruby >= `9.2`
26
26
 
27
27
  ## License
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.metadata['source_code_uri'] = 'https://github.com/dry-rb/dry-schema'
30
30
  spec.metadata['bug_tracker_uri'] = 'https://github.com/dry-rb/dry-schema/issues'
31
31
 
32
- spec.required_ruby_version = ">= 2.4.0"
32
+ spec.required_ruby_version = ">= 2.5.0"
33
33
 
34
34
  # to update dependencies edit project.yml
35
35
  spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
@@ -50,7 +50,7 @@ module Dry
50
50
  def visit_set(node, opts = EMPTY_HASH)
51
51
  target = (key = opts[:key]) ? self.class.new : self
52
52
 
53
- node.map { |child| target.visit(child, opts) }
53
+ node.each { |child| target.visit(child, opts) }
54
54
 
55
55
  return unless key
56
56
 
@@ -28,11 +28,11 @@ module Dry
28
28
  if path[INDEX_REGEX]
29
29
  key = path.gsub(INDEX_REGEX, BRACKETS)
30
30
 
31
- unless key_paths.include?(key)
31
+ if key_paths.none? { |key_path| key_path.include?(key) }
32
32
  arr = path.gsub(INDEX_REGEX) { |m| ".#{m[1]}" }
33
33
  arr.split(DOT).map { |s| DIGIT_REGEX.match?(s) ? s.to_i : s.to_sym }
34
34
  end
35
- elsif !key_paths.include?(path)
35
+ elsif key_paths.none? { |key_path| key_path.include?(path) }
36
36
  path
37
37
  end
38
38
 
@@ -28,10 +28,14 @@ module Dry
28
28
 
29
29
  import_steps(schema)
30
30
 
31
- type(updated_type) unless custom_type? && !current_type.respond_to?(:of)
31
+ if !custom_type? || array_type?(current_type) || hash_type?(current_type)
32
+ type(updated_type)
33
+ elsif maybe_type?(current_type)
34
+ type(updated_type.optional)
35
+ end
32
36
  end
33
37
 
34
- trace_opts = opts.reject { |key, _| key == :type_spec || key == :type_rule }
38
+ trace_opts = opts.reject { |key, _| %i[type_spec type_rule].include?(key) }
35
39
 
36
40
  if (type_rule = opts[:type_rule])
37
41
  trace.append(type_rule).evaluate(*predicates, **trace_opts)
@@ -62,10 +66,16 @@ module Dry
62
66
  primitive_inferrer[type].eql?([::Array])
63
67
  end
64
68
 
69
+ # @api private
65
70
  def hash_type?(type)
66
71
  primitive_inferrer[type].eql?([::Hash])
67
72
  end
68
73
 
74
+ # @api private
75
+ def maybe_type?(type)
76
+ type.meta[:maybe].equal?(true)
77
+ end
78
+
69
79
  # @api private
70
80
  def build_array_type(array_type, member)
71
81
  if array_type.respond_to?(:of)
@@ -29,6 +29,14 @@ module Dry
29
29
 
30
30
  EMPTY_OPTS = VisitorOpts.new
31
31
  EMPTY_MESSAGE_SET = MessageSet.new(EMPTY_ARRAY).freeze
32
+ FULL_MESSAGE_WHITESPACE = Hash.new(' ').merge(
33
+ ja: '',
34
+ zh: '',
35
+ bn: '',
36
+ th: '',
37
+ lo: '',
38
+ my: '',
39
+ )
32
40
 
33
41
  param :messages
34
42
 
@@ -108,6 +116,7 @@ module Dry
108
116
 
109
117
  Message.new(
110
118
  path: path,
119
+ meta: msg[:meta] || EMPTY_HASH,
111
120
  text: msg[:text],
112
121
  predicate: nil,
113
122
  input: input
@@ -203,12 +212,12 @@ module Dry
203
212
  return text if !text || !full
204
213
 
205
214
  rule = options[:path]
206
- "#{messages.rule(rule, options) || rule} #{text}"
215
+ [messages.rule(rule, options) || rule, text].join(FULL_MESSAGE_WHITESPACE[template.options[:locale]])
207
216
  end
208
217
 
209
218
  # @api private
210
219
  def message_tokens(args)
211
- args.each_with_object({}) do |arg, hash|
220
+ tokens = args.each_with_object({}) do |arg, hash|
212
221
  case arg[1]
213
222
  when Array
214
223
  hash[arg[0]] = arg[1].join(LIST_SEPARATOR)
@@ -219,6 +228,14 @@ module Dry
219
228
  hash[arg[0]] = arg[1]
220
229
  end
221
230
  end
231
+ args.any? { |e| e.first == :size } ? append_mapped_size_tokens(tokens) : tokens
232
+ end
233
+
234
+ # @api private
235
+ def append_mapped_size_tokens(tokens)
236
+ # this is a temporary fix for the inconsistency in the "size" errors arguments
237
+ mapped_hash = tokens.each_with_object({}) { |(k, v), h| h[k.to_s.gsub("size", "num").to_sym] = v }
238
+ tokens.merge(mapped_hash)
222
239
  end
223
240
  end
224
241
  end
@@ -90,13 +90,25 @@ module Dry
90
90
  keys.index(key)
91
91
  end
92
92
 
93
+ def without_index
94
+ self.class.new(to_a[0..-2])
95
+ end
96
+
93
97
  # @api private
94
98
  def include?(other)
95
- return false unless same_root?(other)
96
- return last.equal?(other.last) if index? && other.index?
97
- return self.class.new([*to_a[0..-2]]).include?(other) if index?
98
-
99
- self >= other && !other.key_matches(self).include?(nil)
99
+ if !same_root?(other)
100
+ false
101
+ elsif index?
102
+ if other.index?
103
+ last.equal?(other.last)
104
+ else
105
+ without_index.include?(other)
106
+ end
107
+ elsif other.index? && key_matches(other, :select).size < 2
108
+ false
109
+ else
110
+ self >= other && !other.key_matches(self).include?(nil)
111
+ end
100
112
  end
101
113
 
102
114
  # @api private
@@ -121,7 +121,7 @@ module Dry
121
121
  #
122
122
  # @api public
123
123
  def success?
124
- results.empty?
124
+ result_ast.empty?
125
125
  end
126
126
 
127
127
  # Check if the result is not successful
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Dry
4
4
  module Schema
5
- VERSION = "1.5.1"
5
+ VERSION = "1.5.6"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.5.6
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-05-21 00:00:00.000000000 Z
11
+ date: 2020-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -253,7 +253,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
253
253
  requirements:
254
254
  - - ">="
255
255
  - !ruby/object:Gem::Version
256
- version: 2.4.0
256
+ version: 2.5.0
257
257
  required_rubygems_version: !ruby/object:Gem::Requirement
258
258
  requirements:
259
259
  - - ">="