lutaml-model 0.8.80 → 0.8.82

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: 8375b9ceb21e41c8f236b2e96728983065a6b547f31401686ab5b9b520db2d8d
4
- data.tar.gz: 3e9f7da096049d3cf0472a18782f014341df12b8ae0e0394dcab18a24de73c9b
3
+ metadata.gz: 9d3a688d65eecf6a2bedf13179644a42cbe3897a966976d82412b55c59bae51f
4
+ data.tar.gz: cefb330f731f866c5c571abd8859316e65c8539485729bc569634e0d4fdd0d2f
5
5
  SHA512:
6
- metadata.gz: 8c925f539d5fdb6ca0e57dae30b6e3b4fe8ed162fbfdb8dc66f04661c885399eefdd99259a7f3067b9a98cab678fb6b9b3d5176418e6d80c7d2ec2b58eea86aa
7
- data.tar.gz: 8673fafc5fc984374916bf509e855ce69dcfd89134149d9e348b7f56eede5b95b6e4e0eca064c1cc0dfdcb169aecf27b47a75251a4cd3dc7c356c92ef05da317
6
+ metadata.gz: 5a2d748a2bb6510884418473ca075860dc8207a9e966413856bf3c8f5c047409368559786bc7afdfc634d885d95022f142892f769ed58f49b4733c84d3360df1
7
+ data.tar.gz: 5e048ffbbe1a336acc02e577d555c7677ca13eb6bbb0c7401b99b069e8f30add953620ba802d4c1a13e92c820e67b8b570033ff6aaa32aaeed522990788d263b
@@ -206,14 +206,16 @@ module Lutaml
206
206
  def kv_group_build(rows, doc, format, register, options)
207
207
  setters = []
208
208
  children = []
209
- absent = []
209
+ # Lazy: the present-key hot path never pushes, and this runs
210
+ # once per hydrated model instance.
211
+ absent = nil
210
212
  rows.each do |rule, attr, kind, type, child_rows, child_register|
211
213
  # One hash pass per row: fetch with a sentinel distinguishes
212
214
  # absent keys from present-nil values (both read as nil), so
213
215
  # the separate string_or_symbol_key? probe goes away.
214
216
  v = Lutaml::Model::Utils.fetch_str_or_sym(doc, rule.name, MISSING)
215
217
  if v.equal?(MISSING)
216
- absent << rule
218
+ (absent ||= []) << rule
217
219
  next
218
220
  end
219
221
 
@@ -256,7 +258,7 @@ module Lutaml
256
258
  end
257
259
  instance = model_class.new(lutaml_register: register)
258
260
  setters.each { |name, value| instance.public_send(name, value) }
259
- absent.each do |rule|
261
+ absent&.each do |rule|
260
262
  process_mapping_rule(doc, instance, format, rule, options, nil)
261
263
  end
262
264
  children.each do |child|
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Lutaml
4
4
  module Model
5
- VERSION = "0.8.80"
5
+ VERSION = "0.8.82"
6
6
  end
7
7
  end
@@ -399,19 +399,19 @@ module Lutaml
399
399
  end
400
400
 
401
401
  def group_children(value, row_tags = nil)
402
+ # One crossing per subtree: names/tags/children come back in
403
+ # parallel arrays from leptris_plan_value_children_snapshot.
404
+ names, tags, children = value.children_snapshot
402
405
  grouped = {}
403
406
  want_tags = !row_tags.nil?
404
407
  tagged = want_tags ? {} : nil
405
- value.count.times do |i|
406
- child = value.at(i)
407
- # One FFI crossing per child: the name was read twice here
408
- # (nil check + bucket key), doubling the hottest accessor.
409
- name = child.name
408
+ names.each_with_index do |name, i|
410
409
  next if name.nil? # content runs, read separately
411
410
 
411
+ child = children[i]
412
412
  (grouped[name] ||= []) << child
413
- if want_tags && child.type_tag != 0
414
- (tagged[child.type_tag] ||= []) << child
413
+ if want_tags && tags[i] != 0
414
+ (tagged[tags[i]] ||= []) << child
415
415
  end
416
416
  end
417
417
  [grouped, tagged]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lutaml-model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.80
4
+ version: 0.8.82
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-09-29 00:00:00.000000000 Z
11
+ date: 2026-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64