lutaml-model 0.8.67 → 0.8.68

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: 52c9d5f90fb80dbbec116f4a6e8d65e92d8b5fe3181a9a4b7aa26349b64d8938
4
- data.tar.gz: 657ef667d7d9192a6f6d6592168c8bf5c3a3f25aeff8fa4127d4438954ac7bf0
3
+ metadata.gz: '08259545535ddbd9c57aad9adfcb1fa66ebf9179fe00cbfa6be408285d1cdca5'
4
+ data.tar.gz: 84c75404c371bb433b18d9cc87fab24b252b15fe8c2555544fc7b12478ff37c6
5
5
  SHA512:
6
- metadata.gz: 14797b4e4855ac206622648c2ae5cf01b5115e9a243f461861d90e78903a80df356d35144b024801dd9556ed3d89fe526069157faf5bceb804088829be768be4
7
- data.tar.gz: 179a58214dc093680917167055d3f3deec644303b310c91763d27c6aed18b19fc1e5668dea0c8a1a1e3542ef54b8d39712ade45a869ee0c072f1bb92ae10c18f
6
+ metadata.gz: 2b730dcc7e7f555270929f4a42eb9b7a2f7e2d26a4a73fb1c75cbaa6415d2d54c0c5674ba2fad1bdba1cda106c3f625f19eed4db5d58d59334c79311c5dc46ad
7
+ data.tar.gz: 4a8fa22b33898a088d8ba3e9a2b00c8bed316f73a0d0e2dcca776aa290f484bf9519952c7e2076161779faaff4aa5d16fb3be52b10e963366369bf663d75d6f4
@@ -83,6 +83,13 @@ module Lutaml
83
83
  def root_mapping?
84
84
  name == "root_mapping"
85
85
  end
86
+
87
+ # The writer symbol for this rule's target, interned once per
88
+ # rule: the interpolation allocated a String and interned it per
89
+ # row per document in the transform's hot loop.
90
+ def kv_setter
91
+ @kv_setter ||= :"#{to}="
92
+ end
86
93
  end
87
94
  end
88
95
  end
@@ -1,5 +1,6 @@
1
1
  module Lutaml
2
2
  module KeyValue
3
+ MISSING = Object.new.freeze
3
4
  class Transform < Lutaml::Model::Transform
4
5
  def data_to_model(data, format, options = {})
5
6
  # Use child's own default register if it has one
@@ -208,14 +209,17 @@ module Lutaml
208
209
  children = []
209
210
  absent = []
210
211
  rows.each do |rule, attr, kind, type, child_rows|
211
- unless Lutaml::Model::Utils.string_or_symbol_key?(doc, rule.name)
212
+ # One hash pass per row: fetch with a sentinel distinguishes
213
+ # absent keys from present-nil values (both read as nil), so
214
+ # the separate string_or_symbol_key? probe goes away.
215
+ v = Lutaml::Model::Utils.fetch_str_or_sym(doc, rule.name, MISSING)
216
+ if v.equal?(MISSING)
212
217
  absent << rule
213
218
  next
214
219
  end
215
- v = Lutaml::Model::Utils.fetch_str_or_sym(doc, rule.name)
216
220
 
217
221
  if kind == :scalar
218
- setters << [:"#{rule.to}=", v]
222
+ setters << [rule.kv_setter, v]
219
223
  next
220
224
  end
221
225
 
@@ -239,7 +243,7 @@ module Lutaml
239
243
 
240
244
  built << child
241
245
  end
242
- setters << [:"#{rule.to}=", built]
246
+ setters << [rule.kv_setter, built]
243
247
  children.concat(built)
244
248
  else
245
249
  return nil unless v.is_a?(::Hash)
@@ -249,7 +253,7 @@ module Lutaml
249
253
  options)
250
254
  return nil if child.nil?
251
255
 
252
- setters << [:"#{rule.to}=", child]
256
+ setters << [rule.kv_setter, child]
253
257
  children << child
254
258
  end
255
259
  end
@@ -316,6 +316,16 @@ module Lutaml
316
316
  @unresolved_type || @type
317
317
  end
318
318
 
319
+ def reference_type?
320
+ (@reference_type ||= unresolved_type == Lutaml::Model::Type::Reference)
321
+ end
322
+
323
+ def value_map_boolean?
324
+ (@value_map_boolean ||=
325
+ type == Lutaml::Model::Type::Boolean ||
326
+ unresolved_type == Lutaml::Model::Type::Boolean)
327
+ end
328
+
319
329
  def polymorphic?
320
330
  @options[:polymorphic_class]
321
331
  end
@@ -438,8 +448,7 @@ module Lutaml
438
448
 
439
449
  option = value_map[key]
440
450
  if (option.is_a?(TrueClass) || option.is_a?(FalseClass)) &&
441
- (type == Lutaml::Model::Type::Boolean ||
442
- unresolved_type == Lutaml::Model::Type::Boolean)
451
+ value_map_boolean?
443
452
  return option
444
453
  end
445
454
 
@@ -507,7 +516,8 @@ module Lutaml
507
516
  return resolved_type.new(value) if value.is_a?(::Hash) && !hash_type?
508
517
 
509
518
  # Special handling for Reference types - pass the metadata
510
- if unresolved_type == Lutaml::Model::Type::Reference
519
+ # (the comparison is attribute-constant; memoize the verdict)
520
+ if reference_type?
511
521
  return resolved_type.cast_with_metadata(value,
512
522
  @options[:ref_model_class], @options[:ref_key_attribute])
513
523
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Lutaml
4
4
  module Model
5
- VERSION = "0.8.67"
5
+ VERSION = "0.8.68"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lutaml-model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.67
4
+ version: 0.8.68
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.