xmlhash 1.3.5 → 1.3.6

Sign up to get free protection for your applications and to get access to all the features.
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: