foobara 0.0.55 → 0.0.56

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: 78bd1547b990baf3ef2d1210747e7c9ea2943a3136fd39d38f399f0a90f73aa6
4
- data.tar.gz: b75e8291b79c05de501de15ed64c62df2ce26de2f7e13fcde95dd6c9cd445430
3
+ metadata.gz: fc60d4f3abb03f4cb398aca513da228aaaf2359941a9d6873d970004b8faf1a8
4
+ data.tar.gz: d94f3b0f676dcf2a69ae1acdbad58efa0dc0ff8626f77de6219ca55b23ac7e41
5
5
  SHA512:
6
- metadata.gz: 3d49b8eef5f2823c475b2227e1f05c844327837ff8eb0545ca62b46aa2f122413d4d283d3e6fc7a8618e8469c98ab7bfb6b77f5a4fa7131743cffa0d398309a3
7
- data.tar.gz: ca9194b01789d6ac289322a919b56ac9e9074a838524509d0759251d4c62839942b56aac0d6c59f3018d89a67fa68aa9421b5c28922b1c4c978e3060432aeb32
6
+ metadata.gz: 6348c488613dfb77695af95e1951a0e373787a8277bcee39e26495ee5b1c66f46e8f30a46c24ae7db4050bade755a0fbf181a2618de0f149308c752660fe7352
7
+ data.tar.gz: 6fe896d06734768e017dfc21753d7de90da00fdde88a5822900876f2030e84c04539fddc0ecc9bf7eb638b4ef9e745c9aafd8afa0826c97dc115ce9029cce46b
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.4.1
1
+ 3.4.2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## [0.0.56] - 2025-02-16
2
+
3
+ - Bump Ruby to 3.4.2
4
+ - Add a ignore_unexpected_attributes option to Model#initialize
5
+
1
6
  ## [0.0.55] - 2025-02-01
2
7
 
3
8
  - Mark types as builtin directly and add builtin flag to manifest
@@ -0,0 +1,27 @@
1
+ module Foobara
2
+ module BuiltinTypes
3
+ module Attributes
4
+ module Transformers
5
+ class RemoveUnexpectedAttributes < Value::Transformer
6
+ class << self
7
+ def requires_parent_declaration_data?
8
+ true
9
+ end
10
+ end
11
+
12
+ def applicable?(hash)
13
+ Thread.foobara_var_get(:foobara_ignore_unexpected_attributes) && unexpected_attributes(hash).any?
14
+ end
15
+
16
+ def transform(hash)
17
+ hash.except(*unexpected_attributes(hash))
18
+ end
19
+
20
+ def unexpected_attributes(hash)
21
+ hash.keys - parent_declaration_data[:element_type_declarations].keys
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -15,11 +15,11 @@ module Foobara
15
15
  parse(string)
16
16
  end
17
17
 
18
- private
19
-
20
18
  NOT_DELIMITED_REGEX = /\A(?<year>\d{4})(?<month>\d{2})(?<day>\d{2})\z/
21
19
  DELIMITED_REGEX = /\A(?<year>\d{4,})(?<delimiter>[\/\\.|_:;-])(?<month>\d{1,2})\k<delimiter>(?<day>\d{1,2})\z/
22
20
 
21
+ private
22
+
23
23
  def parse(string)
24
24
  match = NOT_DELIMITED_REGEX.match(string) || DELIMITED_REGEX.match(string)
25
25
 
@@ -171,7 +171,7 @@ module Foobara
171
171
  attr_accessor :mutable
172
172
 
173
173
  def initialize(attributes = nil, options = {})
174
- allowed_options = %i[validate mutable]
174
+ allowed_options = %i[validate mutable ignore_unexpected_attributes]
175
175
  invalid_options = options.keys - allowed_options
176
176
 
177
177
  unless invalid_options.empty?
@@ -180,6 +180,12 @@ module Foobara
180
180
  # :nocov:
181
181
  end
182
182
 
183
+ if options[:ignore_unexpected_attributes]
184
+ Thread.foobara_with_var(:foobara_ignore_unexpected_attributes, true) do
185
+ return initialize(attributes, options.except(:ignore_unexpected_attributes))
186
+ end
187
+ end
188
+
183
189
  validate = options[:validate]
184
190
 
185
191
  if attributes.nil?
@@ -189,6 +195,14 @@ module Foobara
189
195
  # :nocov:
190
196
  end
191
197
  else
198
+ if Thread.foobara_var_get(:foobara_ignore_unexpected_attributes)
199
+ outcome = attributes_type.process_value(attributes)
200
+
201
+ if outcome.success?
202
+ attributes = outcome.result
203
+ end
204
+ end
205
+
192
206
  self.mutable = true
193
207
  attributes.each_pair do |attribute_name, value|
194
208
  write_attribute(attribute_name, value)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foobara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.55
4
+ version: 0.0.56
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miles Georgi
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-02-02 00:00:00.000000000 Z
10
+ date: 2025-02-17 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: bigdecimal
@@ -71,6 +71,7 @@ files:
71
71
  - projects/builtin_types/src/attributes/supported_validators/required/type_declaration_extension/extend_attributes_type_declaration/desugarizers/move_required_from_element_types_to_root.rb
72
72
  - projects/builtin_types/src/attributes/supported_validators/required/type_declaration_extension/extend_attributes_type_declaration/type_declaration_validators/array_of_symbols.rb
73
73
  - projects/builtin_types/src/attributes/supported_validators/required/type_declaration_extension/extend_attributes_type_declaration/type_declaration_validators/array_with_valid_attribute_names.rb
74
+ - projects/builtin_types/src/attributes/transformers/remove_unexpected_attributes.rb
74
75
  - projects/builtin_types/src/big_decimal/casters/integer.rb
75
76
  - projects/builtin_types/src/big_decimal/casters/string.rb
76
77
  - projects/builtin_types/src/boolean/casters/numeric.rb