canon 0.3.38 → 0.3.39

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: dc55555287eb70fb4fc5201029aea89c2af55d8a9df26549d1d17b639a6de5de
4
- data.tar.gz: 59ac3ba881495f29ee1355eda305da05d03d62a5611aa738404bf029f66d1721
3
+ metadata.gz: 6b65514ddc21b35416e7856a21f17f084cde6f6176a0f84dd8ee03a3ec7c8604
4
+ data.tar.gz: e6390a45d84dc78708aa3f043f053c41bba8b68c30170b11a58282581365c09d
5
5
  SHA512:
6
- metadata.gz: 6b2d535b82b40ece128bea902b603b1b43c06c7bf4f40535f651e3b43c24674345de4e0c0767380fd6fc50d2986dc80ecf0e2c1b2d5286a7dd02524d65641920
7
- data.tar.gz: '09af782d9c914502a54ca9b961448c89502bb20c3cffa93ec9268b7afc72099bcea2dcc2f7f8e36ccbf7fd6a6f8e3320ced5b7edfd67f7d70d0f5f95e7cf8d85'
6
+ metadata.gz: 338db190efc246cb7a23f06b4a6f3dc620e969e3029cc2384f52bf8b082f6903dd21883b29316bcff676bb36f446e1fcad8cab434d8590f40b57a32a6d56baca
7
+ data.tar.gz: 602303bc515970ac9085e1a5184d8684604b80c5047d65cc3bf6bb6aa2854fdce1bd9eb3a61b4ee8e0f0c74f3f347d63d62133c9e8df93b51d146eca67807da9
data/lib/canon/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Canon
4
- VERSION = "0.3.38"
4
+ VERSION = "0.3.39"
5
5
  end
@@ -78,7 +78,7 @@ module Canon
78
78
  return nil unless root
79
79
 
80
80
  skeleton = doc.children.filter_map do |child|
81
- next if child.equal?(root)
81
+ next if Canon::XmlParsing.same_engine_node?(child, root)
82
82
 
83
83
  case child
84
84
  when Moxml::Comment, Moxml::ProcessingInstruction then child.to_s
@@ -149,7 +149,7 @@ module Canon
149
149
  def add_document_children(root, children, document_element,
150
150
  skip_types = [])
151
151
  children.each do |child|
152
- next if child.equal?(document_element)
152
+ next if Canon::XmlParsing.same_engine_node?(child, document_element)
153
153
  next if skip_types.any? { |type| child.is_a?(type) }
154
154
 
155
155
  node = yield child
@@ -63,6 +63,33 @@ module Canon
63
63
  end
64
64
  end
65
65
 
66
+ # Same underlying engine node? Wrapper identity first (correct
67
+ # everywhere wrappers are unified). Fallback: moxml 0.5.36-0.5.39
68
+ # wrap Document#root and Document#children entries in DIFFERENT
69
+ # wrapper classes for one node (NativeNode vs the FFI Element —
70
+ # moxml#216), so identity fails exactly where consumers exclude
71
+ # the document element from children; the shared C pointer
72
+ # address is the stable identity. Inert once wrappers unify.
73
+ def same_engine_node?(left, right)
74
+ return true if left.equal?(right)
75
+ return false unless defined?(::Moxml::Node) &&
76
+ left.is_a?(::Moxml::Node) && right.is_a?(::Moxml::Node)
77
+
78
+ address_left = moxml_node_address(left)
79
+ address_right = moxml_node_address(right)
80
+ !address_left.nil? && address_left == address_right
81
+ end
82
+
83
+ def moxml_node_address(wrapper)
84
+ native = wrapper.native
85
+ case native
86
+ when ::Leptris::XML::NativeNode then native.address
87
+ when ::Leptris::XML::Node then native.c_ptr.address
88
+ end
89
+ rescue StandardError
90
+ nil
91
+ end
92
+
66
93
  # --- Type checks (any recognized engine node) ---
67
94
 
68
95
  def document?(obj)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: canon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.38
4
+ version: 0.3.39
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-14 00:00:00.000000000 Z
11
+ date: 2026-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diff-lcs
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.5.0
47
+ version: 0.5.41
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.5.0
54
+ version: 0.5.41
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: nokogiri
57
57
  requirement: !ruby/object:Gem::Requirement