fog-xml 0.1.0 → 0.1.1
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 +4 -4
- data/README.md +4 -2
- data/fog-xml.gemspec +0 -1
- data/lib/fog/parsers/base.rb +48 -0
- data/lib/fog/xml.rb +4 -0
- data/lib/fog/xml/version.rb +1 -1
- data/spec/fog/parsers/base_spec.rb +73 -0
- metadata +5 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b091cc4df71f3575da42f0c4909b71a2f44d1d2a
|
4
|
+
data.tar.gz: 6ac728559bf63785cd7fade89dcfde9c3990f837
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b894d4642a6bca397492ac636068e4e8234a40e09b77bdbd3a99154d2f2f091e3329364502c36c9627828517db9ee644de9ce4aa5a0a410a0e5c10f4082a7e8
|
7
|
+
data.tar.gz: e05040392fb0173485aadf8dc37041c355dd2c48a3181638913d1553477f760b584676e010ddca21e02177d8d0fc4288fd5d52bc84f167df8065440cd34cb5a9
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Fog::Xml
|
2
2
|
|
3
|
-
|
3
|
+
Shared XML related functionality for fog
|
4
|
+
|
5
|
+
[](http://travis-ci.org/fog/fog-xml)
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
@@ -22,7 +24,7 @@ TODO: Write usage instructions here
|
|
22
24
|
|
23
25
|
## Contributing
|
24
26
|
|
25
|
-
1. Fork it ( https://github.com/
|
27
|
+
1. Fork it ( https://github.com/fog/fog-xml/fork )
|
26
28
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
29
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
30
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/fog-xml.gemspec
CHANGED
@@ -25,6 +25,5 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency "minitest"
|
26
26
|
spec.add_development_dependency "turn"
|
27
27
|
spec.add_development_dependency "pry"
|
28
|
-
spec.add_development_dependency "rubocop"
|
29
28
|
spec.add_development_dependency "coveralls" if RUBY_VERSION.to_f >= 1.9
|
30
29
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "nokogiri"
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Parsers
|
5
|
+
class Base < Nokogiri::XML::SAX::Document
|
6
|
+
attr_reader :response
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
reset
|
10
|
+
end
|
11
|
+
|
12
|
+
def attr_value(name, attrs)
|
13
|
+
(entry = attrs.find {|a| a.localname == name }) && entry.value
|
14
|
+
end
|
15
|
+
|
16
|
+
def reset
|
17
|
+
@response = {}
|
18
|
+
end
|
19
|
+
|
20
|
+
def characters(string)
|
21
|
+
@value ||= ''
|
22
|
+
@value << string
|
23
|
+
end
|
24
|
+
|
25
|
+
# ###############################################################################
|
26
|
+
# This is a workaround. Original implementation from Nokogiri is overwritten with
|
27
|
+
# one that does not join namespace prefix with local name.
|
28
|
+
def start_element_namespace name, attrs = [], prefix = nil, uri = nil, ns = []
|
29
|
+
start_element name, attrs
|
30
|
+
end
|
31
|
+
|
32
|
+
def end_element_namespace name, prefix = nil, uri = nil
|
33
|
+
end_element name
|
34
|
+
end
|
35
|
+
|
36
|
+
# ###############################################################################
|
37
|
+
|
38
|
+
def start_element(name, attrs = [])
|
39
|
+
@value = nil
|
40
|
+
end
|
41
|
+
|
42
|
+
def value
|
43
|
+
@value && @value.dup
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
data/lib/fog/xml.rb
CHANGED
data/lib/fog/xml/version.rb
CHANGED
@@ -0,0 +1,73 @@
|
|
1
|
+
require "minitest_helper"
|
2
|
+
|
3
|
+
describe Fog::Parsers::Base do
|
4
|
+
|
5
|
+
def parse(input, parser_class)
|
6
|
+
document = parser_class.new
|
7
|
+
parser = Nokogiri::XML::SAX::Parser.new(document)
|
8
|
+
parser.parse input
|
9
|
+
document.response
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'value' do
|
13
|
+
class ValueTest < Fog::Parsers::Base
|
14
|
+
|
15
|
+
def start_element(name, attrs)
|
16
|
+
@stack.push({})
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def reset
|
21
|
+
super
|
22
|
+
@stack = [@response]
|
23
|
+
end
|
24
|
+
|
25
|
+
def end_element name
|
26
|
+
top = @stack.pop
|
27
|
+
if top.empty?
|
28
|
+
@stack.last[name] = value
|
29
|
+
else
|
30
|
+
@stack.last[name] = top if @stack.any?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'extracts the characters for the current element' do
|
37
|
+
doc = <<-XML
|
38
|
+
<Test>
|
39
|
+
<Foo>FooValue</Foo>
|
40
|
+
<Bar>BarValue</Bar>
|
41
|
+
</Test>
|
42
|
+
XML
|
43
|
+
assert_equal({'Test'=> {'Foo' => 'FooValue', 'Bar' => 'BarValue'}}, parse(doc, ValueTest))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe 'attr_value' do
|
48
|
+
class AttrParser < Fog::Parsers::Base
|
49
|
+
def start_element(name, attrs=[])
|
50
|
+
super
|
51
|
+
@response[name] = {'foo' => attr_value('foo', attrs)}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe 'the attribute exists' do
|
56
|
+
it 'returns the value' do
|
57
|
+
doc = <<-XML
|
58
|
+
<Test foo="bar" />
|
59
|
+
XML
|
60
|
+
assert_equal({'Test'=> {'foo' => 'bar'}}, parse(doc, AttrParser))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe 'the attribute does not exist' do
|
65
|
+
it 'returns nil' do
|
66
|
+
doc = <<-XML
|
67
|
+
<Test notfoo="bar" />
|
68
|
+
XML
|
69
|
+
assert_equal({'Test'=> {'foo' => nil}}, parse(doc, AttrParser))
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wesley Beary (geemus)
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-11-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: fog-core
|
@@ -102,20 +102,6 @@ dependencies:
|
|
102
102
|
- - ">="
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0'
|
105
|
-
- !ruby/object:Gem::Dependency
|
106
|
-
name: rubocop
|
107
|
-
requirement: !ruby/object:Gem::Requirement
|
108
|
-
requirements:
|
109
|
-
- - ">="
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: '0'
|
112
|
-
type: :development
|
113
|
-
prerelease: false
|
114
|
-
version_requirements: !ruby/object:Gem::Requirement
|
115
|
-
requirements:
|
116
|
-
- - ">="
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: '0'
|
119
105
|
- !ruby/object:Gem::Dependency
|
120
106
|
name: coveralls
|
121
107
|
requirement: !ruby/object:Gem::Requirement
|
@@ -154,11 +140,13 @@ files:
|
|
154
140
|
- fog-xml.gemspec
|
155
141
|
- gemfiles/Gemfile.1.8.7
|
156
142
|
- gemfiles/Gemfile.1.9.2+
|
143
|
+
- lib/fog/parsers/base.rb
|
157
144
|
- lib/fog/to_hash_document.rb
|
158
145
|
- lib/fog/xml.rb
|
159
146
|
- lib/fog/xml/connection.rb
|
160
147
|
- lib/fog/xml/sax_parser_connection.rb
|
161
148
|
- lib/fog/xml/version.rb
|
149
|
+
- spec/fog/parsers/base_spec.rb
|
162
150
|
- spec/fog/xml/connection_spec.rb
|
163
151
|
- spec/minitest_helper.rb
|
164
152
|
homepage: https://github.com/fog/fog-xml
|
@@ -186,5 +174,6 @@ signing_key:
|
|
186
174
|
specification_version: 4
|
187
175
|
summary: XML parsing for fog providers
|
188
176
|
test_files:
|
177
|
+
- spec/fog/parsers/base_spec.rb
|
189
178
|
- spec/fog/xml/connection_spec.rb
|
190
179
|
- spec/minitest_helper.rb
|