fog-xml 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://secure.travis-ci.org/fog/fog-xml.png?branch=master)](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
|