nokogiri-diff 0.1.2 → 0.2.0

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.
@@ -1,6 +1,14 @@
1
+ ### 0.2.0 / 2013-04-22
2
+
3
+ * {Nokogiri::XML::Node#tdiff_each_child} now sorts attributes by name, so that
4
+ changes in attribute order is ignored. (thanks @bhollis)
5
+ * {Nokogiri::XML::Node#tdiff_equal} now supports `Nokogiri::XML::Comment`
6
+ and `Nokogiri::XML::ProcessingInstruction` objects. (thanks @bhollis)
7
+
1
8
  ### 0.1.2 / 2012-05-28
2
9
 
3
10
  * Require tdiff ~> 0.3, >= 0.3.2.
11
+ * Added {Nokogiri::Diff::VERSION}.
4
12
  * Replaced ore-tasks with
5
13
  [rubygems-tasks](https://github.com/postmodern/rubygems-tasks#readme).
6
14
 
@@ -1,6 +1,6 @@
1
1
  module Nokogiri
2
2
  module Diff
3
3
  # nokogiri-diff version
4
- VERSION = '0.1.2'
4
+ VERSION = '0.2.0'
5
5
  end
6
6
  end
@@ -6,7 +6,7 @@ class Nokogiri::XML::Document < Nokogiri::XML::Node
6
6
  # Overrides `tdiff` to only compare the child nodes of the document.
7
7
  #
8
8
  def tdiff(tree,&block)
9
- return enum_for(:tdiff,tree) unless block
9
+ return enum_for(__method__,tree) unless block
10
10
 
11
11
  tdiff_recursive(tree,&block)
12
12
  return self
@@ -16,7 +16,7 @@ class Nokogiri::XML::Document < Nokogiri::XML::Node
16
16
  # Overrides `tdiff_unordered` to only compare the child nodes of the document.
17
17
  #
18
18
  def tdiff_unordered(tree,&block)
19
- return enum_for(:tdiff_unordered,tree) unless block
19
+ return enum_for(__method__,tree) unless block
20
20
 
21
21
  tdiff_recursive_unordered(tree,&block)
22
22
  return self
@@ -22,8 +22,10 @@ class Nokogiri::XML::Node
22
22
  (self.name == node.name && self.value == node.value)
23
23
  when Nokogiri::XML::Element, Nokogiri::XML::DTD
24
24
  self.name == node.name
25
- when Nokogiri::XML::Text
25
+ when Nokogiri::XML::Text, Nokogiri::XML::Comment
26
26
  self.text == node.text
27
+ when Nokogiri::XML::ProcessingInstruction
28
+ (self.name == node.name && self.content = self.content)
27
29
  else
28
30
  false
29
31
  end
@@ -46,7 +48,7 @@ class Nokogiri::XML::Node
46
48
  #
47
49
  def tdiff_each_child(node,&block)
48
50
  if node.kind_of?(Nokogiri::XML::Element)
49
- node.attribute_nodes.each(&block)
51
+ node.attribute_nodes.sort_by(&:name).each(&block)
50
52
  end
51
53
 
52
54
  node.children.each(&block)
@@ -80,14 +82,12 @@ class Nokogiri::XML::Node
80
82
  # If no block was given, an Enumerator object will be returned.
81
83
  #
82
84
  def diff(other,options={},&block)
83
- return enum_for(:diff,other,options) unless block
85
+ return enum_for(__method__,other,options) unless block
84
86
 
85
87
  if (options[:added] || options[:removed])
86
88
  tdiff_unordered(other) do |change,node|
87
- if (change == '+' && options[:added])
88
- yield change, node
89
- elsif (change == '-' && options[:removed])
90
- yield change, node
89
+ if (change == '+' && options[:added]) then yield change, node
90
+ elsif (change == '-' && options[:removed]) then yield change, node
91
91
  end
92
92
  end
93
93
  else
@@ -3,20 +3,22 @@ require 'nokogiri/diff'
3
3
 
4
4
  describe "nokogiri/diff" do
5
5
  let(:contents) { '<div><p>one</p></div>' }
6
- let(:doc) { Nokogiri::XML(contents) }
6
+ let(:doc) { Nokogiri::XML(contents) }
7
7
 
8
- let(:added_text) { Nokogiri::XML('<div><p>one</p>two</div>') }
8
+ let(:added_text) { Nokogiri::XML('<div><p>one</p>two</div>') }
9
9
  let(:added_element) { Nokogiri::XML('<div><p>one</p><p>two</p></div>') }
10
- let(:added_attr) { Nokogiri::XML('<div><p id="1">one</p></div>') }
10
+ let(:added_attr) { Nokogiri::XML('<div><p id="1">one</p></div>') }
11
+ let(:added_attrs) { Nokogiri::XML('<div><p id="1" class="2">one</p></div>') }
11
12
 
12
- let(:changed_text) { Nokogiri::XML('<div><p>two</p></div>') }
13
- let(:changed_element) { Nokogiri::XML('<div><span>one</span></div>') }
14
- let(:changed_attr_name) { Nokogiri::XML('<div><p i="1">one</p></div>') }
13
+ let(:changed_text) { Nokogiri::XML('<div><p>two</p></div>') }
14
+ let(:changed_element) { Nokogiri::XML('<div><span>one</span></div>') }
15
+ let(:changed_attr_name) { Nokogiri::XML('<div><p i="1">one</p></div>') }
15
16
  let(:changed_attr_value) { Nokogiri::XML('<div><p id="2">one</p></div>') }
17
+ let(:changed_attr_order) { Nokogiri::XML('<div><p class="2" id="1">one</p></div>') }
16
18
 
17
- let(:removed_text) { Nokogiri::XML('<div><p></p>two</div>') }
19
+ let(:removed_text) { Nokogiri::XML('<div><p></p>two</div>') }
18
20
  let(:removed_element) { Nokogiri::XML('<div></div>') }
19
- let(:removed_attr) { Nokogiri::XML('<div><p>one</p></div>') }
21
+ let(:removed_attr) { Nokogiri::XML('<div><p>one</p></div>') }
20
22
 
21
23
  it "should add #diff to Nokogiri::XML::Docuemnt" do
22
24
  doc.should respond_to(:diff)
@@ -92,6 +94,12 @@ describe "nokogiri/diff" do
92
94
  changes[4][1].should == added_element.at('//p[2]/text()')
93
95
  end
94
96
 
97
+ it "should ignore when attribute order changes" do
98
+ changes = added_attrs.at('p').diff(changed_attr_order.at('p')).to_a
99
+
100
+ changes.all? { |change| change[0] == ' ' }.should be_true
101
+ end
102
+
95
103
  it "should determine when attributes are added" do
96
104
  changes = doc.at('p').diff(added_attr.at('p')).to_a
97
105
 
@@ -206,6 +214,9 @@ describe "nokogiri/diff" do
206
214
  changes[2][1].should == added_element.at('//p[2]')
207
215
  end
208
216
 
217
+ it "should ignore when attributes change order" do
218
+ end
219
+
209
220
  it "should determine when attributes are removed" do
210
221
  changes = added_attr.at('div').diff(removed_attr.at('div')).to_a
211
222
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nokogiri-diff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-28 00:00:00.000000000 Z
12
+ date: 2013-04-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: tdiff
@@ -146,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
146
  version: '0'
147
147
  requirements: []
148
148
  rubyforge_project:
149
- rubygems_version: 1.8.24
149
+ rubygems_version: 1.8.25
150
150
  signing_key:
151
151
  specification_version: 3
152
152
  summary: Calculate the differences between two XML/HTML documents.