cosm-rb 0.1.01 → 0.2.00

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.require_paths = ["lib"]
19
19
 
20
20
  s.add_dependency("multi_json", ">=1.3.6")
21
+ s.add_dependency("multi_xml", ">=0.5.1")
21
22
  s.add_dependency("yajl-ruby", ">=1.1.0")
22
23
  s.add_dependency("nokogiri", ">=1.4.4")
23
24
  s.add_dependency("httparty", ">=0.8.3")
@@ -28,6 +29,7 @@ Gem::Specification.new do |s|
28
29
 
29
30
  begin
30
31
  if !defined?(JRUBY_VERSION)
32
+ s.add_dependency("ox", ">= 1.5.9")
31
33
  if RUBY_VERSION.to_f < 1.9
32
34
  s.add_development_dependency("ruby-debug")
33
35
  s.add_development_dependency("rcov", ">=0.9.9")
@@ -1,5 +1,6 @@
1
1
  require 'nokogiri'
2
2
  require 'multi_json'
3
+ require 'multi_xml'
3
4
 
4
5
  $:.unshift(File.dirname(File.expand_path(__FILE__)))
5
6
 
@@ -27,6 +28,12 @@ require 'cosm-rb/resource'
27
28
 
28
29
  require 'cosm-rb/client'
29
30
 
31
+ if defined?(JRUBY_VERSION)
32
+ MultiXml.parser = :nokogiri
33
+ else
34
+ MultiXml.parser = :ox
35
+ end
36
+
30
37
  if RUBY_VERSION.to_f < 1.9
31
38
  require 'fastercsv'
32
39
  Cosm::CSV = FasterCSV
@@ -4,6 +4,8 @@ require 'cosm-rb/parsers/json/datastream_defaults'
4
4
  require 'cosm-rb/parsers/json/datapoint_defaults'
5
5
  require 'cosm-rb/parsers/json/trigger_defaults'
6
6
  require 'cosm-rb/parsers/json/key_defaults'
7
+ require 'cosm-rb/parsers/xml/errors'
8
+ require 'cosm-rb/parsers/xml/helpers'
7
9
  require 'cosm-rb/parsers/xml/feed_defaults'
8
10
  require 'cosm-rb/parsers/xml/datastream_defaults'
9
11
  require 'cosm-rb/parsers/xml/datapoint_defaults'
@@ -2,24 +2,22 @@ module Cosm
2
2
  module Parsers
3
3
  module XML
4
4
  module DatapointDefaults
5
+
6
+ include Cosm::Parsers::XML::Helpers
7
+
5
8
  def from_xml(xml)
6
9
  begin
7
- xml = Nokogiri::XML(xml) do |config|
8
- config.strict.nonet
9
- end
10
- hash = {}
11
- environment = xml.at_xpath("//xmlns:environment")
12
- raise InvalidXMLError, "Missing 'environment' node from base node" if environment.nil?
13
- data = environment.at_xpath("xmlns:data")
14
- datapoint = data.at_xpath("xmlns:datapoints")
15
- value = datapoint.at_xpath("xmlns:value")
16
- hash["value"] = value.content
17
- hash["at"] = value.attributes["at"].value
18
- hash
19
- rescue Nokogiri::SyntaxError => e
10
+ parsed = MultiXml.parse(xml)
11
+ raise InvalidXMLError, "Missing 'environment' node from base node" if parsed['eeml'].nil? || !parsed['eeml'].key?('environment')
12
+ return {} if parsed['eeml']['environment'].nil?
13
+ datastream = parsed['eeml']['environment']['data']
14
+ datapoint = datastream['datapoints']
15
+ _extract_datapoint(datapoint)
16
+ rescue MultiXml::ParseError => e
20
17
  raise InvalidXMLError, e.message
21
18
  end
22
19
  end
20
+
23
21
  end
24
22
  end
25
23
  end
@@ -2,17 +2,19 @@ module Cosm
2
2
  module Parsers
3
3
  module XML
4
4
  module DatastreamDefaults
5
+ include Cosm::Parsers::XML::Helpers
6
+
5
7
  def from_xml(xml)
6
8
  begin
7
- xml = Nokogiri::XML(xml) do |config|
8
- config.strict.nonet
9
- end
10
- if xml.root.attributes["version"].value == "5" || xml.collect_namespaces["xmlns"] == "http://www.eeml.org/xsd/005"
11
- transform_5(xml)
9
+ parsed = MultiXml.parse(xml)
10
+ raise InvalidXMLError, "Missing 'environment' node from base node" if parsed['eeml'].nil? || !parsed['eeml'].key?('environment')
11
+ return {} if parsed['eeml']['environment'].nil?
12
+ if parsed['eeml']['version'] == '5' || parsed['eeml']['xmlns'] == 'http://www.eeml.org/xsd/005'
13
+ transform_v1(parsed['eeml']['environment'])
12
14
  else
13
- transform_0_5_1(xml)
15
+ transform_v2(parsed['eeml']['environment'])
14
16
  end
15
- rescue Nokogiri::SyntaxError => e
17
+ rescue MultiXml::ParseError => e
16
18
  raise InvalidXMLError, e.message
17
19
  end
18
20
  end
@@ -20,63 +22,24 @@ module Cosm
20
22
  private
21
23
 
22
24
  # As produced by http://cosm.com/api/v2/FEED_ID/datastreams/DATASTREAM_ID.xml
23
- def transform_0_5_1(xml)
24
- hash = {}
25
- environment = xml.at_xpath("//xmlns:environment")
26
- raise InvalidXMLError, "Missing 'environment' node from base node" if environment.nil?
27
- data = environment.at_xpath("xmlns:data")
28
- hash["feed_id"] = environment.attributes["id"].value
29
- hash["feed_creator"] = environment.attributes["creator"].value
30
- hash["id"] = data.attributes["id"].value
31
- if (tags = data.xpath("xmlns:tag").collect { |t| t.content.strip }).any?
32
- hash["tags"] = Cosm::CSV.generate_line(tags.sort{|a,b| a.downcase <=> b.downcase}).strip
33
- end
34
- current_value = data.at_xpath("xmlns:current_value")
35
- hash["current_value"] = current_value.content
36
- hash["updated"] = current_value.attributes["at"].value
37
- hash["min_value"] = data.at_xpath("xmlns:min_value").content
38
- hash["max_value"] = data.at_xpath("xmlns:max_value").content
39
- unit = data.at_xpath("xmlns:unit")
40
- if unit
41
- hash["unit_label"] = unit.content
42
- hash["unit_symbol"] = unit.attributes["symbol"].value
43
- hash["unit_type"] = unit.attributes["type"].value
44
- end
45
- hash["datapoints"] = data.xpath("xmlns:datapoints").collect do |datapoint|
46
- value = datapoint.at_xpath("xmlns:value")
47
- {
48
- "value" => value.content,
49
- "at" => value.attributes["at"].value
50
- }
51
- end
52
- hash
25
+ def transform_v2(xml)
26
+ datastream = convert_to_hash(xml['data'])
27
+ _extract_datastream(datastream).merge({
28
+ :feed_id => strip(xml,'id'),
29
+ :feed_creator => strip(xml,'creator')
30
+ })
53
31
  end
54
32
 
55
33
  # As produced by http://cosm.com/api/v1/FEED_ID/datastreams/DATASTREAM_ID.xml
56
- def transform_5(xml)
57
- hash = {}
58
- environment = xml.at_xpath("//xmlns:environment")
59
- raise InvalidXMLError, "Missing 'environment' node from base node" if environment.nil?
60
- data = environment.at_xpath("xmlns:data")
61
- hash["feed_id"] = environment.attributes["id"].value
62
- hash["feed_creator"] = "http://www.haque.co.uk"
63
- hash["updated"] = environment.attributes["updated"].value
64
- hash["id"] = data.attributes["id"].value
65
- if (tags = data.xpath("xmlns:tag").collect { |t| t.content.strip }).any?
66
- hash["tags"] = Cosm::CSV.generate_line(tags.sort{ |a,b| a.downcase <=> b.downcase }).strip
67
- end
68
- current_value = data.at_xpath("xmlns:value")
69
- hash["current_value"] = current_value.content
70
- hash["min_value"] = current_value.attributes["minValue"].value
71
- hash["max_value"] = current_value.attributes["maxValue"].value
72
- unit = data.at_xpath("xmlns:unit")
73
- if unit
74
- hash["unit_label"] = unit.content
75
- hash["unit_symbol"] = unit.attributes["symbol"].value
76
- hash["unit_type"] = unit.attributes["type"].value
77
- end
78
- hash
34
+ def transform_v1(xml)
35
+ datastream = convert_to_hash(xml['data'])
36
+ _extract_datastream_v1(datastream).merge({
37
+ :feed_id => strip(xml,'id'),
38
+ :updated => strip(xml,'updated'),
39
+ :feed_creator => 'http://www.haque.co.uk'
40
+ })
79
41
  end
42
+
80
43
  end
81
44
  end
82
45
  end
@@ -0,0 +1,7 @@
1
+ module Cosm
2
+ module Parsers
3
+ module XML
4
+ class InvalidXMLError < Cosm::ParserError; end
5
+ end
6
+ end
7
+ end
@@ -1,155 +1,81 @@
1
1
  module Cosm
2
2
  module Parsers
3
3
  module XML
4
- class InvalidXMLError < Cosm::ParserError; end
5
4
  module FeedDefaults
5
+ include Cosm::Parsers::XML::Helpers
6
+
6
7
  def from_xml(xml)
7
8
  begin
8
- xml = Nokogiri::XML(xml) do |config|
9
- config.strict.nonet
10
- end
11
- if xml.root.attributes["version"].value == "5" ||
12
- xml.collect_namespaces["xmlns"] == "http://www.eeml.org/xsd/005"
13
- transform_5(xml)
9
+ parsed = MultiXml.parse(xml)
10
+ raise InvalidXMLError, "Missing 'environment' node from base node" if parsed['eeml'].nil? || !parsed['eeml'].key?('environment')
11
+ return {} if parsed['eeml']['environment'].nil?
12
+ if parsed['eeml']['version'] == '5' || parsed['eeml']['xmlns'] == 'http://www.eeml.org/xsd/005'
13
+ transform_v1(parsed['eeml']['environment'])
14
14
  else
15
- transform_0_5_1(xml)
15
+ transform_v2(parsed['eeml']['environment'])
16
16
  end
17
- rescue Nokogiri::SyntaxError => e
17
+ rescue MultiXml::ParseError => e
18
18
  raise InvalidXMLError, e.message
19
19
  end
20
20
  end
21
21
 
22
+ private
23
+
22
24
  # As produced by http://cosm.com/api/v2/FEED_ID.xml
23
- def transform_0_5_1(xml)
24
- hash = {}
25
- environment = xml.at_xpath("//xmlns:environment")
26
- raise InvalidXMLError, "Missing 'environment' node from base node" if environment.nil?
27
- hash["updated"] = environment.attributes["updated"].value
28
- hash["created"] = environment.attributes["created"].value
29
- hash["creator"] = environment.attributes["creator"].value
30
- hash["title"] = strip(environment.at_xpath("xmlns:title").content)
31
- hash["feed"] = strip(environment.at_xpath("xmlns:feed").content)
32
- hash["auto_feed_url"] = strip(environment.at_xpath("xmlns:auto_feed_url").content)
33
- hash["status"] = strip(environment.at_xpath("xmlns:status").content)
34
- hash["description"] = strip(environment.at_xpath("xmlns:description").content)
35
- hash["icon"] = strip(environment.at_xpath("xmlns:icon").content)
36
- hash["website"] = strip(environment.at_xpath("xmlns:website").content)
37
- hash["email"] = strip(environment.at_xpath("xmlns:email").content)
38
- hash["private"] = strip(environment.at_xpath("xmlns:private").content)
39
- if (tags = environment.xpath("xmlns:tag").collect { |t| t.content.strip }).any?
40
- hash["tags"] = Cosm::CSV.generate_line(tags.delete_if { |v| v.to_s.strip == "" }.sort{ |a,b| a.downcase <=> b.downcase}).strip
41
- end
42
- location = environment.at_xpath("xmlns:location")
43
- if location
44
- hash["location_name"] = strip(location.at_xpath("xmlns:name").content)
45
- hash["location_lat"] = strip(location.at_xpath("xmlns:lat").content)
46
- hash["location_lon"] = strip(location.at_xpath("xmlns:lon").content)
47
- hash["location_ele"] = strip(location.at_xpath("xmlns:ele").content)
48
- hash["location_domain"] = location.attributes["domain"].value
49
- hash["location_exposure"] = location.attributes["exposure"].value
50
- hash["location_disposition"] = location.attributes["disposition"].value
51
- end
52
- owner = environment.at_xpath("xmlns:user")
53
- if owner
54
- hash["owner_login"] = strip(owner.at_xpath("xmlns:login").content)
55
- end
56
- hash["datastreams"] = environment.xpath("xmlns:data").collect do |datastream|
57
- current_value = datastream.at_xpath("xmlns:current_value")
58
- if current_value
59
- value_hash = {
60
- "current_value" => strip(current_value.content),
61
- "updated" => current_value.attributes["at"].value,
62
- }
63
- else
64
- value_hash = {}
65
- end
66
- unit = datastream.at_xpath("xmlns:unit")
67
- if unit
68
- unit_hash = {
69
- "unit_label" => strip(unit.content),
70
- "unit_type" => unit.attributes["type"].value,
71
- "unit_symbol" => unit.attributes["symbol"].value,
72
- }
73
- else
74
- unit_hash = {}
75
- end
76
- if (tags = datastream.xpath("xmlns:tag").collect { |t| t.content.strip }).any?
77
- tags_hash = { "tags" => Cosm::CSV.generate_line(tags.delete_if { |v| v.strip.to_s == "" }.sort { |a, b| a.downcase <=> b.downcase }).strip }
78
- else
79
- tags_hash = {}
80
- end
81
- {
82
- "id" => datastream.attributes["id"].value,
83
- "min_value" => strip(datastream.at_xpath("xmlns:min_value").content),
84
- "max_value" => strip(datastream.at_xpath("xmlns:max_value").content),
85
- "datapoints" => datastream.xpath("xmlns:datapoints").collect do |datapoint|
86
- value = datapoint.at_xpath("xmlns:value")
87
- {
88
- "at" => value.attributes["at"].value,
89
- "value" => strip(value.content),
90
- }
91
- end
92
- }.merge(value_hash).merge(unit_hash).merge(tags_hash)
93
- end
94
- hash
25
+ def transform_v2(xml)
26
+ location = xml['location'] || {}
27
+ user = xml['user'] || {}
28
+ {
29
+ :title => strip(xml,'title'),
30
+ :updated => strip(xml,'updated'),
31
+ :creator => strip(xml,'creator'),
32
+ :created => strip(xml,'created'),
33
+ :feed => strip(xml,'feed'),
34
+ :auto_feed_url => strip(xml,'auto_feed_url'),
35
+ :status => strip(xml,'status'),
36
+ :description => strip(xml,'description'),
37
+ :icon => strip(xml,'icon'),
38
+ :website => strip(xml,'website'),
39
+ :email => strip(xml,'email'),
40
+ :private => strip(xml,'private'),
41
+ :location_lon => strip(location,'lon'),
42
+ :location_lat => strip(location,'lat'),
43
+ :location_ele => strip(location,'ele'),
44
+ :location_name => strip(location,'name'),
45
+ :location_domain => strip(location,'domain'),
46
+ :location_exposure => strip(location,'exposure'),
47
+ :location_disposition => strip(location,'disposition'),
48
+ :owner_login => strip(user,'login'),
49
+ :datastreams => _extract_datastreams(xml['data'])
50
+ }.merge(sanitised_tags(xml))
95
51
  end
96
52
 
97
53
  # As produced by http://cosm.com/api/v1/FEED_ID.xml
98
- def transform_5(xml)
99
- hash = {}
100
- environment = xml.at_xpath("//xmlns:environment")
101
- raise InvalidXMLError, "Missing 'environment' node from base node" if environment.nil?
102
- hash["updated"] = environment.attributes["updated"].value
103
- hash["creator"] = "http://www.haque.co.uk"
104
- hash["title"] = strip(environment.at_xpath("xmlns:title").content)
105
- hash["feed"] = strip(environment.at_xpath("xmlns:feed").content)
106
- hash["status"] = strip(environment.at_xpath("xmlns:status").content)
107
- hash["description"] = strip(environment.at_xpath("xmlns:description").content)
108
- hash["icon"] = strip(environment.at_xpath("xmlns:icon").content)
109
- hash["website"] = strip(environment.at_xpath("xmlns:website").content)
110
- hash["email"] = strip(environment.at_xpath("xmlns:email").content)
111
- location = environment.at_xpath("xmlns:location")
112
- if location
113
- hash["location_name"] = strip(location.at_xpath("xmlns:name").content)
114
- hash["location_lat"] = strip(location.at_xpath("xmlns:lat").content)
115
- hash["location_lon"] = strip(location.at_xpath("xmlns:lon").content)
116
- hash["location_ele"] = strip(location.at_xpath("xmlns:ele").content)
117
- hash["location_domain"] = location.attributes["domain"].value
118
- hash["location_exposure"] = location.attributes["exposure"].value
119
- hash["location_disposition"] = location.attributes["disposition"].value
120
- end
121
- hash["datastreams"] = environment.xpath("xmlns:data").collect do |datastream|
122
- current_value = datastream.at_xpath("xmlns:value")
123
- unit = datastream.at_xpath("xmlns:unit")
124
- if unit
125
- unit_hash = {
126
- "unit_label" => strip(unit.content),
127
- "unit_type" => unit.attributes["type"].value,
128
- "unit_symbol" => unit.attributes["symbol"].value,
129
- }
130
- else
131
- unit_hash = {}
132
- end
133
- if (tags = datastream.xpath("xmlns:tag").collect { |t| t.content.strip }).any?
134
- tags_hash = { "tags" => Cosm::CSV.generate_line(tags.delete_if { |v| v.to_s.strip == "" }.sort { |a, b| a.downcase <=> b.downcase }).strip }
135
- else
136
- tags_hash = {}
137
- end
138
- {
139
- "id" => datastream.attributes["id"].value,
140
- "current_value" => strip(current_value.content),
141
- "updated" => environment.attributes["updated"].value,
142
- "min_value" => (current_value.nil? ? "" : current_value.attributes["minValue"].value),
143
- "max_value" => (current_value.nil? ? "" : current_value.attributes["maxValue"].value),
144
- }.merge(unit_hash).merge(tags_hash)
145
- end
146
- hash
54
+ def transform_v1(xml)
55
+ location = xml['location'] || {}
56
+ user = xml['user'] || {}
57
+ {
58
+ :title => strip(xml,'title'),
59
+ :updated => strip(xml,'updated'),
60
+ :creator => 'http://www.haque.co.uk',
61
+ :created => strip(xml,'created'),
62
+ :feed => strip(xml,'feed'),
63
+ :status => strip(xml,'status'),
64
+ :description => strip(xml,'description'),
65
+ :icon => strip(xml,'icon'),
66
+ :website => strip(xml,'website'),
67
+ :email => strip(xml,'email'),
68
+ :location_lon => strip(location,'lon'),
69
+ :location_lat => strip(location,'lat'),
70
+ :location_ele => strip(location,'ele'),
71
+ :location_name => strip(location,'name'),
72
+ :location_domain => strip(location,'domain'),
73
+ :location_exposure => strip(location,'exposure'),
74
+ :location_disposition => strip(location,'disposition'),
75
+ :datastreams => _extract_datastreams_v1(xml['data'])
76
+ }
147
77
  end
148
78
 
149
- def strip(value)
150
- return value.nil? ? nil : value.strip
151
- end
152
- private :strip
153
79
  end
154
80
  end
155
81
  end
@@ -0,0 +1,116 @@
1
+ module Cosm
2
+ module Parsers
3
+ module XML
4
+ module Helpers
5
+
6
+ private
7
+
8
+ def strip(xml, value)
9
+ if xml.key?(value)
10
+ xml[value].nil? ? '' : xml[value].strip
11
+ else
12
+ nil
13
+ end
14
+ end
15
+
16
+ def convert_to_hash(val)
17
+ if val.class == String
18
+ {'__content__' => val}
19
+ else
20
+ val ? val.merge({'__content__' => val['__content__']}) : {}
21
+ end
22
+ end
23
+
24
+ def convert_to_array(val)
25
+ if val.is_a?(Hash)
26
+ val = [val]
27
+ else
28
+ val
29
+ end
30
+ end
31
+
32
+ def _extract_datastreams(xml)
33
+ return unless xml
34
+ xml = convert_to_array(xml)
35
+ xml.collect do |ds|
36
+ _extract_datastream(ds)
37
+ end
38
+ end
39
+
40
+
41
+ def _extract_datastream(xml)
42
+ current_value = convert_to_hash(xml['current_value'])
43
+ unit = convert_to_hash(xml['unit'])
44
+ {
45
+ :current_value => strip(current_value,'__content__'),
46
+ :updated => strip(current_value,'at'),
47
+ :id => strip(xml,'id'),
48
+ :unit_symbol => strip(unit,'symbol'),
49
+ :unit_type => strip(unit,'type'),
50
+ :unit_label => strip(unit,'__content__'),
51
+ :min_value => strip(xml,'min_value'),
52
+ :max_value => strip(xml,'max_value'),
53
+ :datapoints => _extract_datapoints(xml['datapoints'])
54
+ }.merge(sanitised_tags(xml))
55
+ end
56
+
57
+ def _extract_datastreams_v1(xml)
58
+ return unless xml
59
+ xml = convert_to_array(xml)
60
+ xml.collect do |ds|
61
+ _extract_datastream_v1(ds)
62
+ end
63
+ end
64
+
65
+ def _extract_datastream_v1(xml)
66
+ unit = convert_to_hash(xml['unit'])
67
+ value = convert_to_hash(xml['value'])
68
+ {
69
+ :current_value => strip(value,'__content__'),
70
+ :id => strip(xml,'id'),
71
+ :unit_symbol => strip(unit,'symbol'),
72
+ :unit_type => strip(unit,'type'),
73
+ :unit_label => strip(unit,'__content__'),
74
+ :min_value => strip(value,'minValue'),
75
+ :max_value => strip(value,'maxValue')
76
+ }.merge(sanitised_tags(xml))
77
+ end
78
+
79
+ def _extract_datapoints(xml)
80
+ return unless xml
81
+ value = xml['value']
82
+ value = convert_to_array(value)
83
+ value.collect do |dp|
84
+ _extract_datapoint(dp)
85
+ end
86
+ end
87
+
88
+ def _extract_datapoint(xml)
89
+ value = convert_to_hash(xml['value'])
90
+ {
91
+ :at => strip(value,'at'),
92
+ :value => strip(value,'__content__')
93
+ }
94
+ end
95
+
96
+ def _extract_tags(xml)
97
+ if xml.class != Array
98
+ xml = [xml]
99
+ end
100
+ if (tags = xml.collect { |t| "#{t}".strip }).any?
101
+ Cosm::CSV.generate_line(tags.delete_if { |v| v.to_s.strip == "" }.sort{ |a,b| a.downcase <=> b.downcase}).strip
102
+ end
103
+ end
104
+
105
+ # Keep blank tags but delete if value is nil
106
+ def sanitised_tags(xml)
107
+ if xml.key?('tag')
108
+ {:tags => _extract_tags(xml['tag'])}
109
+ else
110
+ {}
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -1,3 +1,3 @@
1
1
  module Cosm #:nodoc:
2
- VERSION = '0.1.01'
2
+ VERSION = '0.2.00'
3
3
  end
@@ -132,7 +132,6 @@ RSpec::Matchers.define :fully_represent_feed do |format, formatted_feed|
132
132
  end
133
133
  current_value = data.at_xpath("xmlns:value")
134
134
  ds.current_value.should == current_value.content
135
- ds.updated.should == environment.attributes["updated"].value
136
135
  ds.min_value.should == current_value.attributes["minValue"].value
137
136
  ds.max_value.should == current_value.attributes["maxValue"].value
138
137
  unit = data.at_xpath("xmlns:unit")
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cosm-rb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 1
10
- version: 0.1.01
8
+ - 2
9
+ - 0
10
+ version: 0.2.00
11
11
  platform: ruby
12
12
  authors:
13
13
  - Paul Bellamy
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2012-09-06 00:00:00 +00:00
20
+ date: 2012-09-11 00:00:00 +00:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
@@ -37,9 +37,25 @@ dependencies:
37
37
  type: :runtime
38
38
  version_requirements: *id001
39
39
  - !ruby/object:Gem::Dependency
40
- name: yajl-ruby
40
+ name: multi_xml
41
41
  prerelease: false
42
42
  requirement: &id002 !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ hash: 9
48
+ segments:
49
+ - 0
50
+ - 5
51
+ - 1
52
+ version: 0.5.1
53
+ type: :runtime
54
+ version_requirements: *id002
55
+ - !ruby/object:Gem::Dependency
56
+ name: yajl-ruby
57
+ prerelease: false
58
+ requirement: &id003 !ruby/object:Gem::Requirement
43
59
  none: false
44
60
  requirements:
45
61
  - - ">="
@@ -51,11 +67,11 @@ dependencies:
51
67
  - 0
52
68
  version: 1.1.0
53
69
  type: :runtime
54
- version_requirements: *id002
70
+ version_requirements: *id003
55
71
  - !ruby/object:Gem::Dependency
56
72
  name: nokogiri
57
73
  prerelease: false
58
- requirement: &id003 !ruby/object:Gem::Requirement
74
+ requirement: &id004 !ruby/object:Gem::Requirement
59
75
  none: false
60
76
  requirements:
61
77
  - - ">="
@@ -67,11 +83,11 @@ dependencies:
67
83
  - 4
68
84
  version: 1.4.4
69
85
  type: :runtime
70
- version_requirements: *id003
86
+ version_requirements: *id004
71
87
  - !ruby/object:Gem::Dependency
72
88
  name: httparty
73
89
  prerelease: false
74
- requirement: &id004 !ruby/object:Gem::Requirement
90
+ requirement: &id005 !ruby/object:Gem::Requirement
75
91
  none: false
76
92
  requirements:
77
93
  - - ">="
@@ -83,11 +99,11 @@ dependencies:
83
99
  - 3
84
100
  version: 0.8.3
85
101
  type: :runtime
86
- version_requirements: *id004
102
+ version_requirements: *id005
87
103
  - !ruby/object:Gem::Dependency
88
104
  name: fastercsv
89
105
  prerelease: false
90
- requirement: &id005 !ruby/object:Gem::Requirement
106
+ requirement: &id006 !ruby/object:Gem::Requirement
91
107
  none: false
92
108
  requirements:
93
109
  - - ">="
@@ -99,11 +115,27 @@ dependencies:
99
115
  - x
100
116
  version: 1.5.x
101
117
  type: :runtime
102
- version_requirements: *id005
118
+ version_requirements: *id006
119
+ - !ruby/object:Gem::Dependency
120
+ name: ox
121
+ prerelease: false
122
+ requirement: &id007 !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ hash: 17
128
+ segments:
129
+ - 1
130
+ - 5
131
+ - 9
132
+ version: 1.5.9
133
+ type: :runtime
134
+ version_requirements: *id007
103
135
  - !ruby/object:Gem::Dependency
104
136
  name: ruby-debug
105
137
  prerelease: false
106
- requirement: &id006 !ruby/object:Gem::Requirement
138
+ requirement: &id008 !ruby/object:Gem::Requirement
107
139
  none: false
108
140
  requirements:
109
141
  - - ">="
@@ -113,11 +145,11 @@ dependencies:
113
145
  - 0
114
146
  version: "0"
115
147
  type: :development
116
- version_requirements: *id006
148
+ version_requirements: *id008
117
149
  - !ruby/object:Gem::Dependency
118
150
  name: rcov
119
151
  prerelease: false
120
- requirement: &id007 !ruby/object:Gem::Requirement
152
+ requirement: &id009 !ruby/object:Gem::Requirement
121
153
  none: false
122
154
  requirements:
123
155
  - - ">="
@@ -129,11 +161,11 @@ dependencies:
129
161
  - 9
130
162
  version: 0.9.9
131
163
  type: :development
132
- version_requirements: *id007
164
+ version_requirements: *id009
133
165
  - !ruby/object:Gem::Dependency
134
166
  name: rake
135
167
  prerelease: false
136
- requirement: &id008 !ruby/object:Gem::Requirement
168
+ requirement: &id010 !ruby/object:Gem::Requirement
137
169
  none: false
138
170
  requirements:
139
171
  - - "="
@@ -145,11 +177,11 @@ dependencies:
145
177
  - 7
146
178
  version: 0.8.7
147
179
  type: :development
148
- version_requirements: *id008
180
+ version_requirements: *id010
149
181
  - !ruby/object:Gem::Dependency
150
182
  name: rspec
151
183
  prerelease: false
152
- requirement: &id009 !ruby/object:Gem::Requirement
184
+ requirement: &id011 !ruby/object:Gem::Requirement
153
185
  none: false
154
186
  requirements:
155
187
  - - "="
@@ -161,7 +193,7 @@ dependencies:
161
193
  - 0
162
194
  version: 2.6.0
163
195
  type: :development
164
- version_requirements: *id009
196
+ version_requirements: *id011
165
197
  description: A library for communicating with the Cosm REST API, parsing and rendering Cosm feed formats
166
198
  email:
167
199
  - paul.a.bellamy@gmail.com
@@ -214,7 +246,9 @@ files:
214
246
  - lib/cosm-rb/parsers/json/trigger_defaults.rb
215
247
  - lib/cosm-rb/parsers/xml/datapoint_defaults.rb
216
248
  - lib/cosm-rb/parsers/xml/datastream_defaults.rb
249
+ - lib/cosm-rb/parsers/xml/errors.rb
217
250
  - lib/cosm-rb/parsers/xml/feed_defaults.rb
251
+ - lib/cosm-rb/parsers/xml/helpers.rb
218
252
  - lib/cosm-rb/parsers/xml/key_defaults.rb
219
253
  - lib/cosm-rb/parsers/xml/trigger_defaults.rb
220
254
  - lib/cosm-rb/permission.rb