anyvali 0.1.7 → 1.0.2

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: 2a4ddd57b6576747bbb56bf5748fbad61c693374016883abcdcbca6fdf8b3562
4
- data.tar.gz: 2694be8b631794c743b0c8cd0e4dc74e5d74814a2c0cce71c2d5156444dd2726
3
+ metadata.gz: 63d2550741122df6e58425f8b303dfdd81309e5b472c3875764013710e23a44e
4
+ data.tar.gz: 777c2834049e4e5edc34be58ec0f5f1beb39d786eadb07c6060d0dd9aad94c64
5
5
  SHA512:
6
- metadata.gz: 9f968aab5a5130792d94d85bcfc43be7ce3e489382ff1addc348fc08e8dc5f2f89acd38c193d2610743d079421c822e445870c9b9b299ae5d448562d7760b37e
7
- data.tar.gz: c4424331f7289485c18cd5de177c9ea3af0e316e5f102f1a28eb68da1973bf282b412de4d50a749bc8fa6ad50a38d63f20dc2b40f9bbc6548b1b6554ffaa1832
6
+ metadata.gz: a5a0039b72c7da18f91c941b46dfa15a9af4ec9d406310fb7dc076c9d41a9ef589d3061b64b91efa7913f6bed3eba9c2537b51d02e4d4edc893c63eb21adc324
7
+ data.tar.gz: 361b56d8a346c73a7bf267d346f5f428aa643fc583da4d4e57d106c14d08f410d758daf6723ec5e6a56fba5a710ab1907be5f3db0fb117270ccd29d5bb8e1d9a
@@ -36,7 +36,8 @@ module AnyVali
36
36
  node
37
37
  end
38
38
 
39
- def safe_parse(input, path: [], context: nil)
39
+ def safe_parse(input = nil, path: [], context: nil, **kwargs)
40
+ input = kwargs unless kwargs.empty?
40
41
  context ||= ValidationContext.new
41
42
  issues = []
42
43
 
@@ -51,6 +52,9 @@ module AnyVali
51
52
  end
52
53
 
53
54
  output = {}
55
+ mode = effective_unknown_keys(context)
56
+ previous_inherited_unknown_keys = context.inherited_unknown_keys
57
+ context.inherited_unknown_keys = mode if %w[strip reject].include?(mode)
54
58
 
55
59
  # Check required fields
56
60
  @required_keys.each do |key|
@@ -102,9 +106,11 @@ module AnyVali
102
106
  end
103
107
  end
104
108
 
109
+ context.inherited_unknown_keys = previous_inherited_unknown_keys
110
+
105
111
  # Handle unknown keys
106
112
  unknown = input.keys - @properties.keys
107
- case effective_unknown_keys
113
+ case mode
108
114
  when "reject"
109
115
  unknown.each do |key|
110
116
  issues << ValidationIssue.new(
@@ -151,7 +157,8 @@ module AnyVali
151
157
 
152
158
  private
153
159
 
154
- def effective_unknown_keys
160
+ def effective_unknown_keys(context = nil)
161
+ return context.inherited_unknown_keys if context&.inherited_unknown_keys
155
162
  @unknown_keys_explicit ? @unknown_keys : "strip"
156
163
  end
157
164
 
@@ -3,9 +3,11 @@
3
3
  module AnyVali
4
4
  class ValidationContext
5
5
  attr_reader :definitions
6
+ attr_accessor :inherited_unknown_keys
6
7
 
7
8
  def initialize(definitions: {})
8
9
  @definitions = definitions
10
+ @inherited_unknown_keys = nil
9
11
  end
10
12
  end
11
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anyvali
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - AnyVali Contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-06-17 00:00:00.000000000 Z
11
+ date: 2026-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest