eeml 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest CHANGED
@@ -1,5 +1,4 @@
1
1
  example.rb
2
- eeml.gemspec
3
2
  LICENSE
4
3
  CHANGELOG
5
4
  README
@@ -12,6 +11,7 @@ test/data/minimal.xml
12
11
  test/data/doc_2_expected.json
13
12
  test/data/list.xml
14
13
  test/data/out_empty.xml
14
+ test/data/complete_namespaced.xml
15
15
  test/data/no_namespace.xml
16
16
  test/data/doc_1.xml
17
17
  test/data/doc_1.json
data/eeml.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{eeml}
5
- s.version = "0.0.4"
5
+ s.version = "0.0.5"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Neill Bogie, Sam Mulube"]
9
9
  s.cert_chain = ["/home/sam/.gem/gem-public_cert.pem"]
10
- s.date = %q{2009-07-02}
10
+ s.date = %q{2009-07-08}
11
11
  s.description = %q{Simple little library for programmatically manipulating EEML documents, in particular this library is designed to work with the Pachube web service.}
12
12
  s.email = %q{sam.mulube@gmail.com}
13
13
  s.extra_rdoc_files = ["LICENSE", "CHANGELOG", "README", "lib/eeml.rb", "lib/eeml/constants.rb", "lib/eeml/json_environment_parser_v005.rb", "lib/eeml/output_registry.rb", "lib/eeml/parser_registry.rb", "lib/eeml/libxml_eeml_output_v005.rb", "lib/eeml/libxml_eeml_parser_v005.rb", "lib/eeml/exceptions.rb", "lib/eeml/csv_parser.rb", "lib/eeml/json_output.rb", "lib/eeml/environment.rb", "lib/blank.rb"]
14
- s.files = ["example.rb", "eeml.gemspec", "LICENSE", "CHANGELOG", "README", "test/test_environment.rb", "test/test_libxml_test_helper.rb", "test/libxml_test_helper.rb", "test/test_libxml_eeml_parser_v005.rb", "test/test_helper.rb", "test/data/minimal.xml", "test/data/doc_2_expected.json", "test/data/list.xml", "test/data/out_empty.xml", "test/data/no_namespace.xml", "test/data/doc_1.xml", "test/data/doc_1.json", "test/data/doc_2.xml", "lib/eeml.rb", "lib/eeml/constants.rb", "lib/eeml/json_environment_parser_v005.rb", "lib/eeml/output_registry.rb", "lib/eeml/parser_registry.rb", "lib/eeml/libxml_eeml_output_v005.rb", "lib/eeml/libxml_eeml_parser_v005.rb", "lib/eeml/exceptions.rb", "lib/eeml/csv_parser.rb", "lib/eeml/json_output.rb", "lib/eeml/environment.rb", "lib/blank.rb", "schemas/eeml/005.xsd", "Rakefile", "Manifest"]
14
+ s.files = ["example.rb", "LICENSE", "CHANGELOG", "README", "test/test_environment.rb", "test/test_libxml_test_helper.rb", "test/libxml_test_helper.rb", "test/test_libxml_eeml_parser_v005.rb", "test/test_helper.rb", "test/data/minimal.xml", "test/data/doc_2_expected.json", "test/data/list.xml", "test/data/out_empty.xml", "test/data/complete_namespaced.xml", "test/data/no_namespace.xml", "test/data/doc_1.xml", "test/data/doc_1.json", "test/data/doc_2.xml", "lib/eeml.rb", "lib/eeml/constants.rb", "lib/eeml/json_environment_parser_v005.rb", "lib/eeml/output_registry.rb", "lib/eeml/parser_registry.rb", "lib/eeml/libxml_eeml_output_v005.rb", "lib/eeml/libxml_eeml_parser_v005.rb", "lib/eeml/exceptions.rb", "lib/eeml/csv_parser.rb", "lib/eeml/json_output.rb", "lib/eeml/environment.rb", "lib/blank.rb", "schemas/eeml/005.xsd", "Rakefile", "Manifest", "eeml.gemspec"]
15
15
  s.homepage = %q{}
16
16
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Eeml", "--main", "README"]
17
17
  s.require_paths = ["lib"]
@@ -18,10 +18,9 @@ module Eeml
18
18
  end
19
19
 
20
20
  #take an xml string containing zero or more environment nodes, and create an array of Environment objects from it.
21
- def make_environments_from_xml(xml_str, given_environment = nil)
21
+ def make_environments_from_xml(xml_str)
22
22
  doc = parse_xml(xml_str)
23
23
  raise MissingNamespace if doc.root.namespaces.namespace.blank?
24
- env = Environment.new
25
24
  return extract_environments_from_doc(doc)
26
25
  end
27
26
 
@@ -54,15 +53,13 @@ module Eeml
54
53
 
55
54
  #multiple (zero or more)
56
55
  def extract_environments_from_doc(doc)
57
- doc.root.namespaces.default_prefix = 'x'
58
- env_nodes = doc.find('x:environment')
56
+ env_nodes = doc.find('x:environment', "x:#{EEML_HREF}")
59
57
  return env_nodes.map{|env_node| new_env = Environment.new; extract_environment_from_node(env_node, new_env)}
60
58
  end
61
59
 
62
60
  #single, mandatory
63
61
  def extract_environment_from_doc(doc, env_to_populate)
64
- doc.root.namespaces.default_prefix = 'x'
65
- env_node = find_first_node_or_fail(doc, 'x:environment', 'environment')
62
+ env_node = find_first_node_or_fail(doc, 'x:environment', 'environment', "x:#{EEML_HREF}")
66
63
  return extract_environment_from_node(env_node, env_to_populate)
67
64
  end
68
65
 
@@ -75,19 +72,19 @@ module Eeml
75
72
 
76
73
  env.creator = env_node['creator']
77
74
 
78
- env.title = optional_content(env_node, 'x:title', 'title')
79
- env.feed_url = optional_content(env_node, 'x:feed', 'feed')
80
- env.description = optional_content(env_node, 'x:description', 'description')
81
- env.website = optional_content(env_node, 'x:website', 'website')
82
- env.status = optional_content(env_node, 'x:status', 'status')
83
- env.email = optional_content(env_node, 'x:email', 'email')
84
- env.icon = optional_content(env_node, 'x:icon', 'icon')
75
+ env.title = optional_content(env_node, 'x:title', 'title', "x:#{EEML_HREF}")
76
+ env.feed_url = optional_content(env_node, 'x:feed', 'feed', "x:#{EEML_HREF}")
77
+ env.description = optional_content(env_node, 'x:description', 'description', "x:#{EEML_HREF}")
78
+ env.website = optional_content(env_node, 'x:website', 'website', "x:#{EEML_HREF}")
79
+ env.status = optional_content(env_node, 'x:status', 'status', "x:#{EEML_HREF}")
80
+ env.email = optional_content(env_node, 'x:email', 'email', "x:#{EEML_HREF}")
81
+ env.icon = optional_content(env_node, 'x:icon', 'icon', "x:#{EEML_HREF}")
85
82
 
86
83
  #find_first_node_or_fail(env_node, 'x:location', 'location')
87
- loc_node = env_node.find_first('x:location')
84
+ loc_node = env_node.find_first('x:location', "x:#{EEML_HREF}")
88
85
  env.location = extractLocation(loc_node) if loc_node
89
86
 
90
- datastream_nodes = env_node.find('x:data')
87
+ datastream_nodes = env_node.find('x:data', "x:#{EEML_HREF}")
91
88
  # raise NoDataStreams.new, "no datastreams found" if datastream_nodes.empty?
92
89
  env.datastreams = extractDataStreams(datastream_nodes) unless datastream_nodes.empty?
93
90
 
@@ -105,10 +102,10 @@ module Eeml
105
102
  loc.domain = node['domain']
106
103
  loc.disposition = node['disposition']
107
104
  loc.exposure = node['exposure']
108
- loc.name = optional_content(node, 'x:name', 'name')
109
- loc.latitude = optional_content(node, 'x:lat', 'lat')
110
- loc.longitude = optional_content(node, 'x:lon', 'lon')
111
- loc.elevation = optional_content(node, 'x:ele', 'ele')
105
+ loc.name = optional_content(node, 'x:name', 'name', "x:#{EEML_HREF}")
106
+ loc.latitude = optional_content(node, 'x:lat', 'lat', "x:#{EEML_HREF}")
107
+ loc.longitude = optional_content(node, 'x:lon', 'lon', "x:#{EEML_HREF}")
108
+ loc.elevation = optional_content(node, 'x:ele', 'ele', "x:#{EEML_HREF}")
112
109
  return loc
113
110
  end
114
111
 
@@ -142,11 +139,11 @@ module Eeml
142
139
  data = DataStream.new
143
140
  raise MissingAttribute.new(node.name, 'id') if node['id'].nil?
144
141
  data.identifier = node['id']
145
- node.find('x:tag').each do |tag_node|
142
+ node.find('x:tag', "x:#{EEML_HREF}").each do |tag_node|
146
143
  data.tags << tag_node.content
147
144
  end
148
145
 
149
- value_nodes = node.find('x:value')
146
+ value_nodes = node.find('x:value', "x:#{EEML_HREF}")
150
147
  raise exception_for_node(node, DataMissingValue, "Data node is missing value node.") if value_nodes.empty?
151
148
  raise exception_for_node(node, DataHasMultipleValues, "Data node has multiple 'value' nodes.") if value_nodes.size > 1
152
149
 
@@ -155,7 +152,7 @@ module Eeml
155
152
  data.max_value = value_node['maxValue']
156
153
  data.value = value_node.content
157
154
 
158
- unit_nodes = node.find('x:unit')
155
+ unit_nodes = node.find('x:unit', "x:#{EEML_HREF}")
159
156
  raise exception_for_node(node, DataHasMultipleUnits, "Data node has multiple 'unit' nodes.") if unit_nodes.size > 1
160
157
 
161
158
  unit_node = unit_nodes.first
@@ -172,16 +169,16 @@ module Eeml
172
169
  #Consider mixing these in to the libxml parser for more readable code
173
170
 
174
171
  #raises MissingNode if the node isn't there
175
- def mandatory_content(base_node, xpath, description)
176
- node = base_node.find_first(xpath)
172
+ def mandatory_content(base_node, xpath, description, nslist = nil)
173
+ node = base_node.find_first(xpath, nslist)
177
174
  raise(MissingNode.new(node_name_or_root(base_node), description, xpath)) if node.nil?
178
175
  return node.content
179
176
  end
180
177
 
181
178
  #returns the node's content, or the given default if the node isn't there (default itself defaults to nil)
182
179
  #description isn't used, but keeps our signature same as mandatory_content(), up to that point.
183
- def optional_content(base_node, xpath, description, default = nil)
184
- node = base_node.find_first(xpath)
180
+ def optional_content(base_node, xpath, description, nslist = nil, default = nil)
181
+ node = base_node.find_first(xpath, nslist)
185
182
  return node.nil? ? default : node.content
186
183
  end
187
184
 
@@ -192,8 +189,8 @@ module Eeml
192
189
  node.respond_to?(:name) ? node.name : 'root'
193
190
  end
194
191
 
195
- def find_first_node_or_fail(base_node, xpath, description)
196
- node = base_node.find_first(xpath)
192
+ def find_first_node_or_fail(base_node, xpath, description, nslist = nil)
193
+ node = base_node.find_first(xpath, nslist)
197
194
  raise(MissingNode.new(node_name_or_root(base_node), description, xpath)) if node.nil?
198
195
  return node
199
196
  end
data/lib/eeml.rb CHANGED
@@ -14,7 +14,7 @@ require 'eeml/output_registry'
14
14
  module Eeml
15
15
 
16
16
  # library version number
17
- VERSION = '0.0.4'
17
+ VERSION = '0.0.5'
18
18
 
19
19
  # TODO: put in some configuration file, not here
20
20
  LOCAL_EEML_SCHEMA_LOCATION = 'schemas/eeml/005.xsd'
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <eeml:eeml xmlns:eeml="http://www.eeml.org/xsd/005"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="http://www.eeml.org/xsd/005 http://www.eeml.org/xsd/005/005.xsd" version="5">
5
+ <eeml:environment updated="2007-05-04T18:13:51.0Z" creator="http://www.haque.co.uk" id="1">
6
+ <eeml:title>A Room Somewhere</eeml:title>
7
+ <eeml:feed>http://www.pachube.com/feeds/1.xml</eeml:feed>
8
+ <eeml:status>frozen</eeml:status>
9
+ <eeml:description>This is a room somewhere</eeml:description>
10
+ <eeml:icon>http://www.roomsomewhere/icon.png</eeml:icon>
11
+ <eeml:website>http://www.roomsomewhere/</eeml:website>
12
+ <eeml:location exposure="indoor" domain="physical" disposition="fixed">
13
+ <eeml:name>My Room</eeml:name>
14
+ <eeml:lat>32.4</eeml:lat>
15
+ <eeml:lon>22.7</eeml:lon>
16
+ <eeml:ele>0.2</eeml:ele>
17
+ </eeml:location>
18
+ <eeml:data id="0">
19
+ <eeml:tag>temperature</eeml:tag>
20
+ <eeml:tag>heat</eeml:tag>
21
+ <eeml:value maxValue="48.0" minValue="23.0">36.2</eeml:value>
22
+ <eeml:unit symbol="C" type="basicSI">Celsius</eeml:unit>
23
+ </eeml:data>
24
+ <eeml:data id="1">
25
+ <eeml:tag>nearest_avatar</eeml:tag>
26
+ <eeml:value>Bram Nogah</eeml:value>
27
+ </eeml:data>
28
+ </eeml:environment>
29
+ </eeml:eeml>
@@ -163,6 +163,14 @@ class TestEnvironment < Test::Unit::TestCase
163
163
  assert_equal "36.2", datastream.value
164
164
  end
165
165
 
166
+ test "ok parsing fully namespaced eeml file" do
167
+ env = create_env_from_xml_file('complete_namespaced.xml')
168
+ assert_equal 2, env.datastreams.size
169
+
170
+ datastream = env.datastreams[0]
171
+ assert_equal "36.2", datastream.value
172
+ end
173
+
166
174
  test "fails if no default namespace provided" do
167
175
  assert_raise(MissingNamespace) {env = create_env_from_xml_file('no_namespace.xml')}
168
176
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eeml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neill Bogie, Sam Mulube
@@ -30,7 +30,7 @@ cert_chain:
30
30
  yyRwZdVyDdsafg==
31
31
  -----END CERTIFICATE-----
32
32
 
33
- date: 2009-07-02 00:00:00 +01:00
33
+ date: 2009-07-08 00:00:00 +01:00
34
34
  default_executable:
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
@@ -109,7 +109,6 @@ extra_rdoc_files:
109
109
  - lib/blank.rb
110
110
  files:
111
111
  - example.rb
112
- - eeml.gemspec
113
112
  - LICENSE
114
113
  - CHANGELOG
115
114
  - README
@@ -122,6 +121,7 @@ files:
122
121
  - test/data/doc_2_expected.json
123
122
  - test/data/list.xml
124
123
  - test/data/out_empty.xml
124
+ - test/data/complete_namespaced.xml
125
125
  - test/data/no_namespace.xml
126
126
  - test/data/doc_1.xml
127
127
  - test/data/doc_1.json
@@ -141,6 +141,7 @@ files:
141
141
  - schemas/eeml/005.xsd
142
142
  - Rakefile
143
143
  - Manifest
144
+ - eeml.gemspec
144
145
  has_rdoc: true
145
146
  homepage: ""
146
147
  licenses: []
metadata.gz.sig CHANGED
Binary file