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 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