niceogiri 1.0.1 → 1.0.2

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,3 +1,3 @@
1
1
  module Niceogiri
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -65,7 +65,8 @@ module Niceogiri
65
65
  when Nokogiri::XML::Namespace
66
66
  self.nokogiri_namespace = namespaces
67
67
  when String
68
- self.add_namespace nil, namespaces
68
+ ns = self.add_namespace nil, namespaces
69
+ self.nokogiri_namespace = ns
69
70
  when Hash
70
71
  self.add_namespace nil, ns if ns = namespaces.delete(nil)
71
72
  namespaces.each do |p, n|
@@ -132,7 +133,7 @@ module Niceogiri
132
133
  # @param [XML::Node] node the node to inherit
133
134
  # @return [self]
134
135
  def inherit(node)
135
- set_namespace node.namespace if node.namespace
136
+ nokogiri_namespace = node.namespace
136
137
  inherit_attrs node.attributes
137
138
  node.children.each { |c| self << c.dup }
138
139
  self
@@ -3,90 +3,128 @@ require 'spec_helper'
3
3
  describe Nokogiri::XML::Node do
4
4
  let(:doc) { Nokogiri::XML::Document.new }
5
5
 
6
+ subject { Nokogiri::XML::Node.new 'foo', doc }
7
+
8
+ before { doc.root = subject }
9
+
6
10
  it 'aliases #name to #element_name' do
7
- node = Nokogiri::XML::Node.new 'foo', doc
8
- node.should respond_to :element_name
9
- node.element_name.should == node.name
11
+ subject.should respond_to :element_name
12
+ subject.element_name.should == subject.name
10
13
  end
11
14
 
12
15
  it 'aliases #name= to #element_name=' do
13
- node = Nokogiri::XML::Node.new 'foo', doc
14
- node.should respond_to :element_name=
15
- node.element_name.should == node.name
16
- node.element_name = 'bar'
17
- node.element_name.should == 'bar'
16
+ subject.should respond_to :element_name=
17
+ subject.element_name.should == subject.name
18
+ subject.element_name = 'bar'
19
+ subject.element_name.should == 'bar'
18
20
  end
19
21
 
20
22
  it 'allows symbols as hash keys for attributes' do
21
- attrs = Nokogiri::XML::Node.new('foo', doc)
22
- attrs['foo'] = 'bar'
23
-
24
- attrs['foo'].should == 'bar'
25
- attrs[:foo].should == 'bar'
23
+ subject['foo'] = 'bar'
24
+ subject['foo'].should == 'bar'
25
+ subject[:foo].should == 'bar'
26
26
  end
27
27
 
28
28
  it 'ensures a string is passed to the attribute setter' do
29
- attrs = Nokogiri::XML::Node.new('foo', doc)
30
- attrs[:foo] = 1
31
- attrs[:foo].should == '1'
29
+ subject[:foo] = 1
30
+ subject[:foo].should == '1'
32
31
 
33
- attrs[:some_attr] = :bah
34
- attrs[:some_attr].should == 'bah'
32
+ subject[:some_attr] = :bah
33
+ subject[:some_attr].should == 'bah'
35
34
  end
36
35
 
37
36
  it 'joins an array into a string when passed to the attribute setter' do
38
- attrs = Nokogiri::XML::Node.new('foo', doc)
39
- attrs[:foo] = 1
40
- attrs[:foo].should == '1'
37
+ subject[:foo] = 1
38
+ subject[:foo].should == '1'
41
39
 
42
- attrs[:some_attr] = [:bah, :boo]
43
- attrs[:some_attr].should == 'bahboo'
40
+ subject[:some_attr] = [:bah, :boo]
41
+ subject[:some_attr].should == 'bahboo'
44
42
  end
45
43
 
46
44
  it 'removes an attribute when set to nil' do
47
- attrs = Nokogiri::XML::Node.new('foo', doc)
48
- attrs['foo'] = 'bar'
49
-
50
- attrs['foo'].should == 'bar'
51
- attrs['foo'] = nil
52
- attrs['foo'].should be_nil
45
+ subject['foo'] = 'bar'
46
+ subject['foo'].should == 'bar'
47
+ subject['foo'] = nil
48
+ subject['foo'].should be_nil
53
49
  end
54
50
 
55
51
  it 'allows attribute values to change' do
56
- attrs = Nokogiri::XML::Node.new('foo', doc)
57
- attrs['foo'] = 'bar'
58
-
59
- attrs['foo'].should == 'bar'
60
- attrs['foo'] = 'baz'
61
- attrs['foo'].should == 'baz'
52
+ subject['foo'] = 'bar'
53
+ subject['foo'].should == 'bar'
54
+ subject['foo'] = 'baz'
55
+ subject['foo'].should == 'baz'
62
56
  end
63
57
 
64
58
  it 'allows symbols as the path in #xpath' do
65
- node = Nokogiri::XML::Node.new('foo', doc)
66
- node.should respond_to :find
67
- doc.root = node
59
+ subject.should respond_to :find
60
+ doc.root = subject
68
61
  doc.xpath(:foo).first.should_not be_nil
69
62
  doc.xpath(:foo).first.should == doc.xpath('/foo').first
70
63
  end
71
64
 
72
65
  it 'allows symbols as namespace names in #xpath' do
73
- node = Nokogiri::XML::Node.new('foo', doc)
74
- node.namespace = node.add_namespace('bar', 'baz')
75
- doc.root = node
76
- node.xpath('/bar:foo', :bar => 'baz').first.should_not be_nil
66
+ subject.namespace = subject.add_namespace('bar', 'baz')
67
+ doc.root = subject
68
+ subject.xpath('/bar:foo', :bar => 'baz').first.should_not be_nil
77
69
  end
78
70
 
79
71
  it 'aliases #xpath to #find' do
80
- node = Nokogiri::XML::Node.new('foo', doc)
81
- node.should respond_to :find
82
- doc.root = node
83
- node.find('/foo').first.should_not be_nil
72
+ subject.should respond_to :find
73
+ doc.root = subject
74
+ subject.find('/foo').first.should_not be_nil
84
75
  end
85
76
 
86
77
  it 'has a helper function #find_first' do
87
- node = Nokogiri::XML::Node.new('foo', doc)
88
- node.should respond_to :find
89
- doc.root = node
90
- node.find_first('/foo').should == node.find('/foo').first
78
+ subject.should respond_to :find
79
+ doc.root = subject
80
+ subject.find_first('/foo').should == subject.find('/foo').first
81
+ end
82
+
83
+ describe "JRuby bugs" do
84
+ describe '#to_xml' do
85
+ context 'with a namespace on a child node' do
86
+ let(:ns_href) { 'foo' }
87
+ let(:child_node) { Nokogiri::XML::Node.new 'bar', doc }
88
+
89
+ before do
90
+ child_node.add_namespace nil, ns_href
91
+ subject << child_node
92
+ end
93
+
94
+ it 'should have the correct namespace in the rendered XML' do
95
+ p subject.to_xml
96
+ subject.to_xml.should match(/xmlns="foo"/)
97
+ end
98
+ end
99
+ end
100
+
101
+ describe '#xpath' do
102
+ context 'looking for a namespaced element inside a prefixed element' do
103
+ let(:child_node) { Nokogiri::XML::Node.new 'bar', doc }
104
+
105
+ let(:outer_ns_prefix) { 'pref' }
106
+ let(:outer_ns_href) { 'outer_ns' }
107
+ let(:inner_ns_href) { 'inner_ns' }
108
+
109
+ before do
110
+ ns = subject.add_namespace outer_ns_prefix, outer_ns_href
111
+ subject.namespace = ns
112
+ child_node.add_namespace nil, inner_ns_href
113
+ subject << child_node
114
+ end
115
+
116
+ it 'should have the correct namespace' do
117
+ ns = subject.children.first.namespace
118
+ ns.should be_a Nokogiri::XML::Namespace
119
+ ns.prefix.should be == nil
120
+ ns.href.should be == inner_ns_href
121
+ end
122
+
123
+ it 'should find the element' do
124
+ x = subject.xpath("//inner_ns:bar", 'inner_ns' => inner_ns_href)
125
+ x.first.should be child_node
126
+ end
127
+ end
128
+ end
91
129
  end
92
130
  end
@@ -145,6 +145,12 @@ module Niceogiri
145
145
  n2.to_s.should == n.to_s
146
146
  end
147
147
 
148
+ it 'holds on to namespaces without a prefix when inheriting content' do
149
+ n = Nokogiri::XML.parse('<message><bar:foo xmlns="http://bar.com"></message>').root
150
+ n2 = Node.new('message').inherit n
151
+ n2.to_s.should == n.to_s
152
+ end
153
+
148
154
  it 'holds on to namespaces when inheriting attributes' do
149
155
  n = Nokogiri::XML.parse('<foo xml:bar="http://bar.com"/>').root
150
156
  n2 = Node.new('foo').inherit n
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: niceogiri
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-31 00:00:00.000000000 Z
13
+ date: 2012-06-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
17
- requirement: &2165547740 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: '1.4'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2165547740
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '1.4'
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: rspec
28
- requirement: &2165547040 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ! '>='
@@ -33,10 +38,15 @@ dependencies:
33
38
  version: 2.7.0
34
39
  type: :development
35
40
  prerelease: false
36
- version_requirements: *2165547040
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 2.7.0
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: bundler
39
- requirement: &2165546540 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
52
  - - ! '>='
@@ -44,10 +54,15 @@ dependencies:
44
54
  version: 1.0.0
45
55
  type: :development
46
56
  prerelease: false
47
- version_requirements: *2165546540
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: 1.0.0
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: yard
50
- requirement: &2165546000 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
68
  - - ! '>='
@@ -55,10 +70,15 @@ dependencies:
55
70
  version: 0.6.1
56
71
  type: :development
57
72
  prerelease: false
58
- version_requirements: *2165546000
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: 0.6.1
59
79
  - !ruby/object:Gem::Dependency
60
80
  name: rake
61
- requirement: &2165545600 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
62
82
  none: false
63
83
  requirements:
64
84
  - - ! '>='
@@ -66,10 +86,15 @@ dependencies:
66
86
  version: '0'
67
87
  type: :development
68
88
  prerelease: false
69
- version_requirements: *2165545600
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
70
95
  - !ruby/object:Gem::Dependency
71
96
  name: guard-rspec
72
- requirement: &2165544980 !ruby/object:Gem::Requirement
97
+ requirement: !ruby/object:Gem::Requirement
73
98
  none: false
74
99
  requirements:
75
100
  - - ! '>='
@@ -77,7 +102,12 @@ dependencies:
77
102
  version: '0'
78
103
  type: :development
79
104
  prerelease: false
80
- version_requirements: *2165544980
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
81
111
  description: Make dealing with XML less painful
82
112
  email:
83
113
  - ben@langfeld.me
@@ -118,7 +148,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
148
  version: '0'
119
149
  segments:
120
150
  - 0
121
- hash: -1076126536062088480
151
+ hash: 2448257972408275473
122
152
  required_rubygems_version: !ruby/object:Gem::Requirement
123
153
  none: false
124
154
  requirements:
@@ -127,10 +157,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
157
  version: '0'
128
158
  segments:
129
159
  - 0
130
- hash: -1076126536062088480
160
+ hash: 2448257972408275473
131
161
  requirements: []
132
162
  rubyforge_project:
133
- rubygems_version: 1.8.10
163
+ rubygems_version: 1.8.21
134
164
  signing_key:
135
165
  specification_version: 3
136
166
  summary: Some additional niceties atop Nokogiri