xml-smart 0.3.2.3 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
data/lib/xml/smart.rb CHANGED
@@ -26,6 +26,14 @@ module Nokogiri
26
26
  self
27
27
  end
28
28
 
29
+ def xpath_fast(path)
30
+ ns = self.custom_namespace_prefixes.merge(self.document.user_custom_namespace_prefixes)
31
+ ctx = XPathContext.new(self)
32
+ ctx.register_namespaces(self.document.custom_namespace_prefixes.merge(self.document.user_custom_namespace_prefixes))
33
+ path = path.gsub(/xmlns:/, ' :') unless Nokogiri.uses_libxml?
34
+ ctx.evaluate(path)
35
+ end
36
+
29
37
  def custom_namespace_prefixes_update
30
38
  result = {}
31
39
 
@@ -74,7 +82,17 @@ module Nokogiri
74
82
  XPathContext.new(self).evaluate(path)
75
83
  end
76
84
  def xpath_fast(path)
77
- return xpath(path,self.document.custom_namespace_prefixes.merge(self.document.user_custom_namespace_prefixes))
85
+ # return xpath(path,self.document.custom_namespace_prefixes.merge(self.document.user_custom_namespace_prefixes))
86
+ return NodeSet.new(document) unless document
87
+
88
+ ns = self.document.custom_namespace_prefixes.merge(self.document.user_custom_namespace_prefixes)
89
+ ctx = XPathContext.new(self)
90
+ ctx.register_namespaces(self.document.custom_namespace_prefixes.merge(self.document.user_custom_namespace_prefixes))
91
+ path = path.gsub(/xmlns:/, ' :') unless Nokogiri.uses_libxml?
92
+ ctx.evaluate(path)
93
+ end
94
+
95
+ def xpath_experimental
78
96
  return NodeSet.new(document) unless document
79
97
  @nsc ||= 0
80
98
  if @nsc != self.document.ns_counter
@@ -90,7 +108,7 @@ module Nokogiri
90
108
  end
91
109
 
92
110
  module XML
93
- VERSION = '0.3.2'
111
+ VERSION = '0.3.3'
94
112
  LIBXML_VERSION = Nokogiri::VERSION_INFO['libxml']['loaded']
95
113
  LOCKFILE = {
96
114
  :min_sleep => 0.25,
data/lib/xml/smart_dom.rb CHANGED
@@ -16,7 +16,7 @@ module XML
16
16
  end
17
17
 
18
18
  def find(path)
19
- Element.new(@dom.root).find(path)
19
+ Dom::smart_helper(@dom.xpath_fast(path))
20
20
  end
21
21
 
22
22
  def to_s
@@ -26,6 +26,7 @@ module XML
26
26
  end
27
27
  end
28
28
  def []=(name,value)
29
+ name = nil if name == 'xmlns'
29
30
  self.add(name,value)
30
31
  end
31
32
 
@@ -37,7 +38,7 @@ module XML
37
38
  nold.attributes.each do |attr|
38
39
  nnew.attributes[attr.qname.name] = attr.value
39
40
  end
40
- ns = nnod.add_namespace_definition(name.to_s,value.to_s)
41
+ ns = nnod.add_namespace_definition(name.nil? ? nil : name.to_s,value.to_s)
41
42
  @node.namespace_definitions.each do |ns|
42
43
  nnod.add_namespace_definition(ns.prefix,ns.href)
43
44
  end
data/test/EXAMPLE.xml CHANGED
@@ -1,6 +1,6 @@
1
1
  <test xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xml:lang="de">
2
2
  <names>
3
- <name team="0" a="3">2012-12-12 16:43:40 +0100</name>
3
+ <name team="0" a="3">2013-04-24 20:51:43 +0200</name>
4
4
  <name team="1">Jürgen</name>
5
5
  <name team="1">Michel</name>
6
6
  <name team="1">Raphi</name>
@@ -50,9 +50,14 @@ class TestNamespaceDefault < MiniTest::Unit::TestCase
50
50
  # add a namespace to the element
51
51
  nsnode.namespaces.add("test","http://heise1")
52
52
  nsnode.namespaces.add("aaa","http://heise2")
53
+
54
+ assert(nsnode.namespaces[nil] == nil)
55
+
53
56
  nsnode.namespaces.add(nil,"http://heise")
54
57
  nsnode.namespaces[nil] = "http://heiser"
55
58
 
59
+ assert(nsnode.namespaces[nil] != nil)
60
+
56
61
  assert(nsnode.namespaces[nil].prefix == 'xmlns')
57
62
  assert(nsnode.namespaces[nil].href == "http://heiser")
58
63
  assert(nsnode.namespaces['xmlns'].href == "http://heiser")
data/test/tc_root.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'rubygems'
2
+ require 'minitest/autorun'
3
+ require File.expand_path(::File.dirname(__FILE__) + '/../lib/xml/smart')
4
+ require File.expand_path(::File.dirname(__FILE__) + '/smartrunner.rb')
5
+
6
+ class TestBasic < MiniTest::Unit::TestCase
7
+ def test_criss_cross
8
+ doc = XML::Smart.open(::File.dirname(__FILE__) + "/EXAMPLE.xml")
9
+
10
+ node = doc.find("test")
11
+ assert(node.length == 1)
12
+
13
+ node = doc.root.find("test")
14
+ assert(node.length == 0)
15
+
16
+ node = doc.root.find("/test")
17
+ assert(node.length == 1)
18
+
19
+ node = node.first.find("names")
20
+ assert(node.length == 1)
21
+ end
22
+ end
data/xml-smart.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "xml-smart"
3
- s.version = "0.3.2.3"
3
+ s.version = "0.3.3"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.summary = "An xml library that doesn't suck - since 2004."
6
6
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xml-smart
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2.3
4
+ version: 0.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-15 00:00:00.000000000 Z
12
+ date: 2013-04-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
16
- requirement: &77332010 !ruby/object:Gem::Requirement
16
+ requirement: &73897900 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *77332010
24
+ version_requirements: *73897900
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: lockfile
27
- requirement: &77359490 !ruby/object:Gem::Requirement
27
+ requirement: &73897640 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *77359490
35
+ version_requirements: *73897640
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: term-ansicolor
38
- requirement: &77359010 !ruby/object:Gem::Requirement
38
+ requirement: &73897430 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *77359010
46
+ version_requirements: *73897430
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: minitest
49
- requirement: &77357990 !ruby/object:Gem::Requirement
49
+ requirement: &73897220 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *77357990
57
+ version_requirements: *73897220
58
58
  description: An xml library that doesn't suck (since 2004). Based on Nokogiri since
59
59
  2012. For more info check out the Documentation link below.
60
60
  email: juergen.mangler@gmail.com
@@ -98,6 +98,7 @@ files:
98
98
  - test/tc_xsl.rb
99
99
  - test/tc_create.rb
100
100
  - test/tc_nested.rb
101
+ - test/tc_root.rb
101
102
  - test/tc_xpath_root.rb
102
103
  - test/tc_qname.rb
103
104
  - test/tc_todoc.rb
@@ -167,6 +168,7 @@ test_files:
167
168
  - test/tc_xsl.rb
168
169
  - test/tc_create.rb
169
170
  - test/tc_nested.rb
171
+ - test/tc_root.rb
170
172
  - test/tc_xpath_root.rb
171
173
  - test/tc_qname.rb
172
174
  - test/tc_todoc.rb