xml-smart 0.3.2.3 → 0.3.3

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/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