canon 0.3.79 → 0.3.81

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: f8ca5b8d655930c1e5292fa9c0ff829a71865ced02ea0c1a0ef9b7ac018f6884
4
- data.tar.gz: af7939862ab2f737d23c5e10e6c833c66e12abb40bc1d3bfc775c822867b059a
3
+ metadata.gz: 71c8072cb2f226fd0fee4c9ec09656479e82c431d99684194a98015422db154a
4
+ data.tar.gz: fb44eb2bf9050239a35068d3e69d35e9c65f49de41c820b435ef1c792d713dd5
5
5
  SHA512:
6
- metadata.gz: e84e726e14f146cf995468b63872e6b072c85ab30f48857de35d2d6bfc877a53bcfba777cd3c05bb93365607e08a6d48dc2a0d8cbce8aea73c8e6959ceeb2866
7
- data.tar.gz: 485d7c9a66e7e1a3713700c7be740d345273012dae7db3f24ae2ec1ac22409af054b3705917194cf6e7a374a588a2d27576c4f855d0d10928cf99114465b6562
6
+ metadata.gz: b9a7381bd5582d3c93ef8866f43c81f068b0cf903b8d5b1c5d390e030aa9e1ae288f7464e99a9490d47e1a05c27568595fe66f01ffa77e923cc218205fdd7644
7
+ data.tar.gz: b1d9137e06a6d04fb3c708c7a4b273efbb4faebf5ba8269ec532183577c259414c124b2fa36e2beefd1d4d2385c3fa68a4fb6743de6580656e51f8fc636ee09f
@@ -179,13 +179,19 @@ module Canon
179
179
  # @return [Array<TreeNode>]
180
180
  def descendants
181
181
  # Iterative pre-order walk — the recursive form allocated an
182
- # intermediate array per level.
182
+ # intermediate array per level; the explicit stack allocates
183
+ # nothing per visited node.
183
184
  result = []
184
185
  stack = children.reverse_each.to_a
185
186
  until stack.empty?
186
187
  node = stack.pop
187
188
  result << node
188
- stack.concat(node.children.reverse_each.to_a) if node.children.any?
189
+ kids = node.children
190
+ i = kids.length - 1
191
+ while i >= 0
192
+ stack << kids[i]
193
+ i -= 1
194
+ end
189
195
  end
190
196
  result
191
197
  end
@@ -137,8 +137,17 @@ module Canon
137
137
  return false unless node1.label == node2.label
138
138
  return false unless text_equivalent?(node1, node2)
139
139
 
140
- # Check attribute KEYS match, not values — value diffs are reported as UPDATE
141
- return false unless node1.attributes.keys == node2.attributes.keys
140
+ # Attribute KEYS match, not values — value diffs are reported
141
+ # as UPDATE. Canon AttributeNode lists compare by value, so
142
+ # identical raw lists prove equal keys without the per-pair
143
+ # keys-array allocations.
144
+ attrs1 = node1.attributes
145
+ attrs2 = node2.attributes
146
+ if attrs1.is_a?(Array) && attrs1.first.is_a?(Canon::Xml::Nodes::AttributeNode)
147
+ return false unless attrs1 == attrs2
148
+ elsif node1.attributes.keys != node2.attributes.keys
149
+ return false
150
+ end
142
151
 
143
152
  true
144
153
  end
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.79"
4
+ VERSION = "0.3.81"
5
5
  end
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.79
4
+ version: 0.3.81
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-10-07 00:00:00.000000000 Z
11
+ date: 2026-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diff-lcs
@@ -44,28 +44,28 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.9.314
47
+ version: 1.9.323
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: 1.9.314
54
+ version: 1.9.323
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: moxml
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.5.116
61
+ version: 0.5.120
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.5.116
68
+ version: 0.5.120
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: paint
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 0.6.29
145
+ version: 0.6.31
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 0.6.29
152
+ version: 0.6.31
153
153
  description: |-
154
154
  Canon provides canonicalization and pretty-printing for various serialization
155
155
  formats (XML, HTML, JSON, YAML), producing standardized forms suitable for