equivalent-xml 0.2.4 → 0.2.5
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.
- data/lib/equivalent-xml.rb +18 -4
- metadata +3 -3
data/lib/equivalent-xml.rb
CHANGED
@@ -1,16 +1,25 @@
|
|
1
|
-
module EquivalentXml
|
2
|
-
|
3
1
|
require 'nokogiri'
|
4
2
|
|
3
|
+
module EquivalentXml
|
4
|
+
|
5
5
|
class << self
|
6
6
|
|
7
7
|
DEFAULT_OPTS = { :element_order => false, :normalize_whitespace => true }
|
8
8
|
|
9
|
+
# Determine if two XML documents or nodes are equivalent
|
10
|
+
#
|
11
|
+
# @param [Nokogiri::XML::Node] node_1 The first top-level XML node to compare
|
12
|
+
# @param [Nokogiri::XML::Node] node_2 The secton top-level XML node to compare
|
13
|
+
# @param [Hash] opts Options that determine how certain comparisons are evaluated
|
14
|
+
# @option opts [Boolean] :element_order (false) Child elements must occur in the same order to be considered equivalent
|
15
|
+
# @option opts [Boolean] :normalize_whitespace (true) Collapse whitespace within Text nodes before comparing
|
16
|
+
# @yield [n1,n2,result] The two nodes currently being evaluated, and whether they are considered equivalent. The block can return true or false to override the default evaluation
|
17
|
+
# @return [Boolean] true or false
|
9
18
|
def equivalent?(node_1, node_2, opts = {}, &block)
|
10
19
|
opts = DEFAULT_OPTS.merge(opts)
|
11
|
-
self.compare_nodes(
|
20
|
+
self.compare_nodes(as_node(node_1), as_node(node_2), opts, &block)
|
12
21
|
end
|
13
|
-
|
22
|
+
|
14
23
|
def compare_nodes(node_1, node_2, opts, &block)
|
15
24
|
result = nil
|
16
25
|
if [node_1, node_2].any? { |node| not node.respond_to?(:node_type) }
|
@@ -109,6 +118,10 @@ require 'nokogiri'
|
|
109
118
|
return local_set_2.length == 0
|
110
119
|
end
|
111
120
|
|
121
|
+
# Determine if two nodes are in the same effective Namespace
|
122
|
+
#
|
123
|
+
# @param [Nokogiri::XML::Node OR String] node_1 The first node to test
|
124
|
+
# @param [Nokogiri::XML::Node OR String] node_2 The second node to test
|
112
125
|
def same_namespace?(node_1, node_2)
|
113
126
|
args = [node_1,node_2]
|
114
127
|
|
@@ -126,6 +139,7 @@ require 'nokogiri'
|
|
126
139
|
return href1 == href2
|
127
140
|
end
|
128
141
|
|
142
|
+
private
|
129
143
|
def as_node(data)
|
130
144
|
if data.respond_to?(:node_type)
|
131
145
|
return data
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: equivalent-xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 5
|
10
|
+
version: 0.2.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael B. Klein
|