xmlhash 1.3.5 → 1.3.6

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 57b370bdc50c90e41133a4e21022f8fd6b5f5fc1
4
+ data.tar.gz: b834afbf06b454a31617d5f4e798d5f15f11a2f1
5
+ SHA512:
6
+ metadata.gz: 807cf8ecd2ad560ed1d302f5b4276acca584a9a85ac16bf12d8ef2b2464f78fd9e7e1379d7c351c190162d4a83c317a8dc91f994e7d43e5296d8a82b9dcf7893
7
+ data.tar.gz: 163da7fe46fd438db9200e113f57a75f37cc6ecad11ebefdfe3401626a49f3822e38d68725350fc30ad947899cc79aa82c3aff0da73fe7fbc78b99f85b03509b
data/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ === 1.3.6 / 2013-09-11
2
+
3
+ * Wrap libxml2 parsing in a synchronize block - otherwise the stacking
4
+ will not work and it's too much work to make it reentrant
5
+
1
6
  === 1.3.5 / 2012-12-21 ("final edition")
2
7
 
3
8
  * Initialize result so we don't return something random in case of parse error
data/Rakefile CHANGED
@@ -7,6 +7,7 @@ require 'rake/extensiontask'
7
7
  Hoe.spec 'xmlhash' do
8
8
  developer('Stephan Kulow', 'coolo@suse.com')
9
9
  self.readme_file = 'README.txt'
10
+ self.license('MIT')
10
11
  self.spec_extras = { :extensions => ["ext/xmlhash/extconf.rb"] }
11
12
  self.extra_dev_deps << ['rake-compiler', '>= 0']
12
13
  self.extra_deps << ['pkg-config']
@@ -238,7 +238,7 @@ void Init_xmlhash()
238
238
  LIBXML_TEST_VERSION
239
239
  mXmlhash = rb_define_module("Xmlhash");
240
240
  m_xmlClass = rb_define_class_under(mXmlhash, "XMLHash", rb_cHash);
241
- rb_define_singleton_method(mXmlhash, "parse", &parse_xml_hash, 1);
241
+ rb_define_singleton_method(mXmlhash, "parse_int", &parse_xml_hash, 1);
242
242
  m_stack = rb_ary_new();
243
243
  rb_global_variable(&m_stack);
244
244
  m_cstring = rb_ary_new();
data/lib/xmlhash.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'xmlhash/xmlhash'
2
2
 
3
3
  module Xmlhash
4
- VERSION = '1.3.5'
4
+ VERSION = '1.3.6'
5
5
 
6
6
  class XMLHash < Hash
7
7
 
@@ -61,5 +61,12 @@ module Xmlhash
61
61
  def inspect
62
62
  "X(#{super})"
63
63
  end
64
+
65
+ end
66
+
67
+ def self.parse(str)
68
+ @@mutex ||= Mutex.new
69
+ @@mutex.synchronize { parse_int(str) }
64
70
  end
65
- end
71
+
72
+ end
data/test/test_xmlhash.rb CHANGED
@@ -4,9 +4,7 @@ require "test/unit"
4
4
  require "xmlhash"
5
5
  require 'json'
6
6
 
7
- class TestXmlhash < Test::Unit::TestCase
8
- def test_xml
9
- xml = <<eos
7
+ Xml = <<eos
10
8
  <request id="93651">
11
9
  <action type="submit">
12
10
  <source project="server:dns" package="pdns" rev="65"/>
@@ -16,28 +14,7 @@ class TestXmlhash < Test::Unit::TestCase
16
14
  <comment/>
17
15
  </state>
18
16
  <review state="accepted" by_group="legal-auto" who="licensedigger" when="2011-11-25T15:09:55">
19
- <comment>{"approve": "preliminary, version number changed"} &lt;!-- {
20
- "dest": {
21
- "ldb": {
22
- "review": "done",
23
- "rpm_license": "GPLv2+",
24
- "status": "production",
25
- "version": "3.0.rc1"
26
- },
27
- "license": "GPLv2+",
28
- "version": "2.9.22"
29
- },
30
- "hint": [
31
- "src('3.0') and dest('2.9.22') version numbers differ"
32
- ],
33
- "plugin": "0.35",
34
- "src": {
35
- "auto-co": "/api.opensuse.org/server:dns/pdns%3.0%r65",
36
- "license": "GPLv2+",
37
- "rev": "65",
38
- "version": "3.0"
39
- }
40
- } --&gt;</comment>
17
+ <comment>Big comment</comment>
41
18
  </review>
42
19
  <review state="new" by_group="factory-auto"/>
43
20
  <history name="review" who="coolo" when="2011-11-25T15:02:53"/>
@@ -48,30 +25,54 @@ class TestXmlhash < Test::Unit::TestCase
48
25
  </request>
49
26
  eos
50
27
 
51
- rubyoutput = {"history"=>
52
- [ {"name"=>"review", "when"=>"2011-11-25T15:02:53", "who"=>"coolo"},
53
- {"comment"=>"please make sure to wait before these depencencies are in openSUSE:Factory: libopendbx-devel, libopendbx1, libopendbxplus1, opendbx-backend-pgsql",
54
- "name"=>"declined", "when"=>"2011-11-25T16:17:30", "who"=>"coolo"}
55
- ],
56
- "review"=>
57
- [
58
- {"comment"=>"{\"approve\": \"preliminary, version number changed\"} <!-- {\n \"dest\": {\n \"ldb\": {\n \"review\": \"done\", \n \"rpm_license\": \"GPLv2+\", \n \"status\": \"production\", \n \"version\": \"3.0.rc1\"\n }, \n \"license\": \"GPLv2+\", \n \"version\": \"2.9.22\"\n }, \n \"hint\": [\n \"src('3.0') and dest('2.9.22') version numbers differ\"\n ], \n \"plugin\": \"0.35\", \n \"src\": {\n \"auto-co\": \"/api.opensuse.org/server:dns/pdns%3.0%r65\", \n \"license\": \"GPLv2+\", \n \"rev\": \"65\", \n \"version\": \"3.0\"\n }\n} -->", "by_group"=>"legal-auto", "when"=>"2011-11-25T15:09:55", "who"=>"licensedigger", "state"=>"accepted"}, {"by_group"=>"factory-auto", "state"=>"new"}], "action"=>{"type"=>"submit", "target"=>{"project"=>"openSUSE:Factory", "package"=>"pdns"}, "source"=>{"rev"=>"65", "project"=>"server:dns", "package"=>"pdns"}}, "id"=>"93651", "description"=>"update and factory fix (forwarded request 86230 from -miska-)", "state"=>{"comment"=>{}, "name"=>"revoked", "when"=>"2011-12-19T13:20:50", "who"=>"coolo"}}
28
+ Output = {"history" =>
29
+ [{"name" => "review", "when" => "2011-11-25T15:02:53", "who" => "coolo"},
30
+ {"comment" => "please make sure to wait before these depencencies are in openSUSE:Factory: libopendbx-devel, libopendbx1, libopendbxplus1, opendbx-backend-pgsql",
31
+ "name" => "declined", "when" => "2011-11-25T16:17:30", "who" => "coolo"}
32
+ ],
33
+ "review" =>
34
+ [
35
+ {"comment" => "Big comment",
36
+ "by_group" => "legal-auto",
37
+ "when" => "2011-11-25T15:09:55",
38
+ "who" => "licensedigger",
39
+ "state" => "accepted"
40
+ },
41
+ {"by_group" => "factory-auto",
42
+ "state" => "new"}
43
+ ], "action" => {"type" => "submit", "target" => {"project" => "openSUSE:Factory", "package" => "pdns"}, "source" => {"rev" => "65", "project" => "server:dns", "package" => "pdns"}}, "id" => "93651", "description" => "update and factory fix (forwarded request 86230 from -miska-)", "state" => {"comment" => {}, "name" => "revoked", "when" => "2011-12-19T13:20:50", "who" => "coolo"}}
44
+
45
+
46
+ class TestXmlhash < Test::Unit::TestCase
47
+ def test_xml
48
+
59
49
 
60
50
  1000.times {
61
- ret = Xmlhash.parse(xml)
51
+ ret = Xmlhash.parse(Xml)
62
52
  GC.start
63
- assert_equal ret, rubyoutput
53
+ assert_equal ret, Output
64
54
  }
65
-
55
+
66
56
  10000.times {
67
- ret = Xmlhash.parse(xml)
68
- assert_equal ret, rubyoutput
69
- }
57
+ ret = Xmlhash.parse(Xml)
58
+ assert_equal ret, Output
59
+ }
60
+
61
+ end
70
62
 
63
+ def test_threading
64
+ 10.times do
65
+ Thread.new do
66
+ 100.times do
67
+ ret = Xmlhash.parse(Xml)
68
+ assert_equal ret, Output
69
+ end
70
+ end
71
+ end
71
72
  end
72
73
 
73
74
  def test_entry
74
- xml = <<eos
75
+ xml = <<eos
75
76
  <?xml version='1.0' encoding='UTF-8'?>
76
77
  <directory count="4">
77
78
  <entry name="Apache"/>
@@ -82,12 +83,12 @@ eos
82
83
  eos
83
84
 
84
85
  rubyoutput = {"count" => "4",
85
- "entry"=>
86
- [{"name"=>"Apache"},
87
- {"name"=>"Apache:APR_Pool_Debug"},
88
- {"name"=>"Apache:MirrorBrain"},
89
- {"name"=>"Apache:Modules"}]}
90
-
86
+ "entry" =>
87
+ [{"name" => "Apache"},
88
+ {"name" => "Apache:APR_Pool_Debug"},
89
+ {"name" => "Apache:MirrorBrain"},
90
+ {"name" => "Apache:Modules"}]}
91
+
91
92
  ret = Xmlhash.parse(xml)
92
93
  assert_equal ret, rubyoutput
93
94
 
@@ -96,16 +97,16 @@ eos
96
97
  end
97
98
 
98
99
  def test_encoding
99
- xml = "<?xml version='1.0' encoding='UTF-8'?><name>Adrian Schröter</name>"
100
+ xml = "<?xml version='1.0' encoding='UTF-8'?><name>Adrian Schröter</name>"
100
101
 
101
- ret = Xmlhash.parse(xml)
102
- assert_equal ret, "Adrian Schröter"
102
+ ret = Xmlhash.parse(xml)
103
+ assert_equal ret, "Adrian Schröter"
103
104
 
104
- xml = "<?xml version='1.0' encoding='UTF-8'?><name value='Adrian Schröter'/>"
105
- ret = Xmlhash.parse(xml)
106
- assert_equal ret, {"value"=>"Adrian Schröter"}
105
+ xml = "<?xml version='1.0' encoding='UTF-8'?><name value='Adrian Schröter'/>"
106
+ ret = Xmlhash.parse(xml)
107
+ assert_equal ret, {"value" => "Adrian Schröter"}
107
108
 
108
- assert_equal ret.get("value"), "Adrian Schröter"
109
+ assert_equal ret.get("value"), "Adrian Schröter"
109
110
  end
110
111
 
111
112
  def test_cdata
@@ -117,7 +118,7 @@ eos
117
118
  eos
118
119
 
119
120
  ret = Xmlhash.parse(xml)
120
- assert_equal ret['diff'], {"lines" => "1", "_content" => "DummyContent" }
121
+ assert_equal ret['diff'], {"lines" => "1", "_content" => "DummyContent"}
121
122
  end
122
123
 
123
124
  def test_empty
@@ -133,7 +134,7 @@ eos
133
134
  end
134
135
 
135
136
  def test_utf8
136
- xml = '<package name="libconfig" project="home:coolo">
137
+ xml = '<package name="libconfig" project="home:coolo">
137
138
  <title>libconfig &#8211; C/C++ Configuration File Library</title>
138
139
  <description>Libconfig is a simple library for processing structured configuration files, like this one: test.cfg. This file format is more compact and more readable than XML. And unlike XML, it is type-aware, so it is not necessary to do string parsing in application code.
139
140
 
@@ -154,7 +155,7 @@ The library includes bindings for both the C and C++ languages. It works on POSI
154
155
  xml.encode!('ISO-8859-1')
155
156
  xh = Xmlhash.parse(xml)
156
157
  assert_equal "ISO-8859-1", xh['title'].encoding.to_s
157
-
158
+
158
159
  xml = '<?xml version="1.0" encoding="ISO-8859-1"?>
159
160
  <package><title>&#228;&#211;&#254;</title></package>'
160
161
  xml.encode!('US-ASCII')
metadata CHANGED
@@ -1,83 +1,74 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xmlhash
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.5
5
- prerelease:
4
+ version: 1.3.6
6
5
  platform: ruby
7
6
  authors:
8
7
  - Stephan Kulow
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-12-21 00:00:00.000000000 Z
11
+ date: 2013-09-11 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: pkg-config
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rdoc
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
37
- version: '3.10'
33
+ version: '4.0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
45
- version: '3.10'
40
+ version: '4.0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rake-compiler
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: hoe
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
69
- version: '3.3'
61
+ version: '3.7'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
77
- version: '3.3'
78
- description: ! 'A small C module that wraps libxml2''s xmlreader to parse a XML
79
-
80
- string into a ruby hash'
68
+ version: '3.7'
69
+ description: |-
70
+ A small C module that wraps libxml2's xmlreader to parse a XML
71
+ string into a ruby hash
81
72
  email:
82
73
  - coolo@suse.com
83
74
  executables: []
@@ -101,7 +92,9 @@ files:
101
92
  - test/test_xmlhash.rb
102
93
  - .gemtest
103
94
  homepage: https://github.com/coolo/xmlhash
104
- licenses: []
95
+ licenses:
96
+ - MIT
97
+ metadata: {}
105
98
  post_install_message:
106
99
  rdoc_options:
107
100
  - --main
@@ -109,22 +102,20 @@ rdoc_options:
109
102
  require_paths:
110
103
  - lib
111
104
  required_ruby_version: !ruby/object:Gem::Requirement
112
- none: false
113
105
  requirements:
114
- - - ! '>='
106
+ - - '>='
115
107
  - !ruby/object:Gem::Version
116
108
  version: '0'
117
109
  required_rubygems_version: !ruby/object:Gem::Requirement
118
- none: false
119
110
  requirements:
120
- - - ! '>='
111
+ - - '>='
121
112
  - !ruby/object:Gem::Version
122
113
  version: '0'
123
114
  requirements: []
124
115
  rubyforge_project: xmlhash
125
- rubygems_version: 1.8.23
116
+ rubygems_version: 2.0.3
126
117
  signing_key:
127
- specification_version: 3
118
+ specification_version: 4
128
119
  summary: A small C module that wraps libxml2's xmlreader to parse a XML string into
129
120
  a ruby hash
130
121
  test_files: