lutaml-model 0.8.100 → 0.8.101

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: 2bd54a574eb02eec487d980543835abb2bec61c12104d6eea6b898a516fb301f
4
- data.tar.gz: ffc5d3ed5b0c6df7140839064baec52624a034b2d1c5cfdc764dc4ee78c199ce
3
+ metadata.gz: 70de43228d2b233faab386c9016139160f2b75e9f76c27386de22104df2820f5
4
+ data.tar.gz: 78b4591ba8eec19bbc7fde9a1fd2d298c58094b1198352f2323067406d39b5aa
5
5
  SHA512:
6
- metadata.gz: 191c5ee654cc6863a6f8d865448f0fbb29c31f7d602e3ab2a356148fdca7117b254aa497bb1ebdd80da1c80f495cf46c5f1029897cf87e7423a7409747e4e97c
7
- data.tar.gz: 4b55a05f437df7e0c85c7545d2042990572c70a4d64b42d9ae3ee44950ca6875cd640c2089cd9620951264180556e2e3776e7b32028b1b1d9962cbdaad739ecb
6
+ metadata.gz: f1d54790ba8f6d44834134ef283b3d146002e3ca4f2e25f0fb99e84bd442878d6470d50f6da81f36a8e4165e93c07e2e3a6de2cffeb981f45b40d849a6be1037
7
+ data.tar.gz: 4d358cd375296cdb737fa12300076a4154f38aa22ce940cbcb7483453691152d4cbfd25fef88131fe1150105868eb9a1d56fa193028f3bd51eff7eb853d43c09
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Lutaml
4
4
  module Model
5
- VERSION = "0.8.100"
5
+ VERSION = "0.8.101"
6
6
  end
7
7
  end
@@ -240,7 +240,7 @@ module Lutaml
240
240
  when :raw
241
241
  Array(value).each { |raw| element.add_child(raw.to_s) }
242
242
  when :content, :content_deferred
243
- Array(value).each { |run| element.add_child(doc.create_text_node(run.to_s)) }
243
+ Array(value).each { |run| append_text(element, run.to_s, doc) }
244
244
  end
245
245
  end
246
246
  end
@@ -426,10 +426,33 @@ module Lutaml
426
426
  def add_leaf(element, name, value, doc, attrs: nil)
427
427
  child = element.create_child(name)
428
428
  attrs&.each { |k, v| child[k.to_s] = v.to_s }
429
- child.add_child(doc.create_text_node(value.to_s)) unless value.nil?
429
+ append_text(child, value.to_s, doc) unless value.nil?
430
430
  child
431
431
  end
432
432
 
433
+ # Text attach: the address face (leptris#408 adoption,
434
+ # leptris 1.9.334) passes raw node addresses — the pointer
435
+ # face mints an FFI::Pointer wrapper per fresh node, the
436
+ # last per-row Ruby-side allocation on the DOM build. Same
437
+ # semantics and status contract; probe-gated because a
438
+ # numerically newer lockstep can publish without the face.
439
+ def append_text(parent, text, doc)
440
+ node = doc.create_text_node(text)
441
+ if Leptris.text_attach_addr_compatible?
442
+ status = ::Leptris::XML::FFI.leptris_element_add_child_addr(
443
+ parent.c_address, node.c_address
444
+ )
445
+ unless status.zero?
446
+ raise ::Leptris::XML::Error,
447
+ "text attach failed (status=#{status})"
448
+ end
449
+
450
+ node
451
+ else
452
+ parent.add_child(node)
453
+ end
454
+ end
455
+
433
456
  def value_of(instance, attr, delegate)
434
457
  if delegate
435
458
  target = instance.public_send(delegate)
@@ -97,6 +97,19 @@ module Lutaml
97
97
  spec && spec.version >= Gem::Version.new(MIN_LEPTRIS_NS_UNQUALIFIED_VERSION)
98
98
  end
99
99
 
100
+ # The address-based text attach (leptris#408, binding 1.9.334):
101
+ # leptris_element_add_child_addr skips the per-node FFI pointer
102
+ # mint. Capability-probed, not version-gated — the FFI face is
103
+ # attached or it is not, and a lockstep can publish without it.
104
+ @text_attach_addr = nil
105
+ def self.text_attach_addr_compatible?
106
+ return @text_attach_addr unless @text_attach_addr.nil?
107
+
108
+ @text_attach_addr =
109
+ !!(defined?(::Leptris::XML::FFI) &&
110
+ ::Leptris::XML::FFI.respond_to?(:leptris_element_add_child_addr))
111
+ end
112
+
100
113
  autoload :PlanCompiler, "lutaml/xml/leptris/plan_compiler"
101
114
  autoload :PlanHydrator, "lutaml/xml/leptris/plan_hydrator"
102
115
  autoload :PlanOrder, "lutaml/xml/leptris/plan_order"
data/lutaml-model.gemspec CHANGED
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
33
33
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
34
34
 
35
35
  # required for liquid
36
- spec.add_dependency "base64"
36
+ spec.add_dependency "base64", ">= 0.1.1"
37
37
  spec.add_dependency "bigdecimal"
38
38
  spec.add_dependency "canon"
39
39
  spec.add_dependency "concurrent-ruby"
@@ -44,7 +44,7 @@ Gem::Specification.new do |spec|
44
44
  spec.add_dependency "moxml", "~> 0.5.84"
45
45
  spec.add_dependency "ostruct"
46
46
  spec.add_dependency "rubyzip", "~> 3.7"
47
- spec.add_dependency "thor"
47
+ spec.add_dependency "thor", "~> 1.4"
48
48
 
49
49
  spec.metadata["rubygems_mfa_required"] = "true"
50
50
  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.100
4
+ version: 0.8.101
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.1.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.1.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bigdecimal
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -132,16 +132,16 @@ dependencies:
132
132
  name: thor
133
133
  requirement: !ruby/object:Gem::Requirement
134
134
  requirements:
135
- - - ">="
135
+ - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: '0'
137
+ version: '1.4'
138
138
  type: :runtime
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
- - - ">="
142
+ - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '0'
144
+ version: '1.4'
145
145
  description: 'LutaML creating data models in Ruby
146
146
 
147
147
  '