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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ce8f9b8d09cf440bc8510dbf67d2cc23d4fcec4b
4
- data.tar.gz: 529565cb7aa30250af6877f4fdaec10d6e9f043e
3
+ metadata.gz: b091cc4df71f3575da42f0c4909b71a2f44d1d2a
4
+ data.tar.gz: 6ac728559bf63785cd7fade89dcfde9c3990f837
5
5
  SHA512:
6
- metadata.gz: 4343f03be19f667da0a02a475976974f4ce0670908c45beb95dfd69a15a5df0dc12999e17e05e0ac1ab0552dd68c53a4776efb27921b877e4aabb696b6685660
7
- data.tar.gz: 963c88b5c7326f967f9df6b8280ef8ad9d5e89e46b0ffd269a23a2518aa563c79e2b512a99b8e8cc3532721915ec33a65733e4d3bd590aeef8b0d2a9fb175909
6
+ metadata.gz: 5b894d4642a6bca397492ac636068e4e8234a40e09b77bdbd3a99154d2f2f091e3329364502c36c9627828517db9ee644de9ce4aa5a0a410a0e5c10f4082a7e8
7
+ data.tar.gz: e05040392fb0173485aadf8dc37041c355dd2c48a3181638913d1553477f760b584676e010ddca21e02177d8d0fc4288fd5d52bc84f167df8065440cd34cb5a9
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Fog::Xml
2
2
 
3
- TODO: Write a gem description
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/zertico/fog-xml/fork )
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`)
@@ -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
+
@@ -8,4 +8,8 @@ module Fog
8
8
  autoload :SAXParserConnection, "fog/xml/sax_parser_connection"
9
9
  autoload :Connection, "fog/xml/connection"
10
10
  end
11
+
12
+ module Parsers
13
+ autoload :Base, "fog/parsers/base"
14
+ end
11
15
  end
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module Xml
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -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.0
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-09-26 00:00:00.000000000 Z
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