cosm-rb 0.0.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.
- data/.gitignore +12 -0
- data/.rbenv-version +1 -0
- data/.rspec +2 -0
- data/.rvmrc +1 -0
- data/.travis.yml +10 -0
- data/CHANGELOG.md +91 -0
- data/Gemfile +4 -0
- data/MIT-LICENSE +20 -0
- data/README.md +195 -0
- data/Rakefile +35 -0
- data/ci/build_hudson.sh +24 -0
- data/cosm-rb.gemspec +40 -0
- data/init.rb +2 -0
- data/lib/cosm-rb/array_extensions.rb +6 -0
- data/lib/cosm-rb/base/instance_methods.rb +28 -0
- data/lib/cosm-rb/base.rb +52 -0
- data/lib/cosm-rb/client.rb +7 -0
- data/lib/cosm-rb/datapoint.rb +71 -0
- data/lib/cosm-rb/datastream.rb +136 -0
- data/lib/cosm-rb/feed.rb +108 -0
- data/lib/cosm-rb/hash_extensions.rb +16 -0
- data/lib/cosm-rb/helpers.rb +42 -0
- data/lib/cosm-rb/key.rb +98 -0
- data/lib/cosm-rb/nil_content.rb +15 -0
- data/lib/cosm-rb/object_extensions.rb +6 -0
- data/lib/cosm-rb/parsers/csv/datastream_defaults.rb +12 -0
- data/lib/cosm-rb/parsers/csv/feed_defaults.rb +38 -0
- data/lib/cosm-rb/parsers/defaults.rb +13 -0
- data/lib/cosm-rb/parsers/json/datapoint_defaults.rb +12 -0
- data/lib/cosm-rb/parsers/json/datastream_defaults.rb +53 -0
- data/lib/cosm-rb/parsers/json/feed_defaults.rb +103 -0
- data/lib/cosm-rb/parsers/json/key_defaults.rb +15 -0
- data/lib/cosm-rb/parsers/json/search_result_defaults.rb +18 -0
- data/lib/cosm-rb/parsers/json/trigger_defaults.rb +12 -0
- data/lib/cosm-rb/parsers/xml/datapoint_defaults.rb +20 -0
- data/lib/cosm-rb/parsers/xml/datastream_defaults.rb +77 -0
- data/lib/cosm-rb/parsers/xml/feed_defaults.rb +127 -0
- data/lib/cosm-rb/parsers/xml/key_defaults.rb +40 -0
- data/lib/cosm-rb/parsers/xml/trigger_defaults.rb +22 -0
- data/lib/cosm-rb/permission.rb +67 -0
- data/lib/cosm-rb/resource.rb +43 -0
- data/lib/cosm-rb/search_result.rb +63 -0
- data/lib/cosm-rb/string_extensions.rb +6 -0
- data/lib/cosm-rb/template.rb +32 -0
- data/lib/cosm-rb/templates/csv/datapoint_defaults.rb +22 -0
- data/lib/cosm-rb/templates/csv/datastream_defaults.rb +43 -0
- data/lib/cosm-rb/templates/csv/feed_defaults.rb +47 -0
- data/lib/cosm-rb/templates/defaults.rb +14 -0
- data/lib/cosm-rb/templates/json/datapoint_defaults.rb +15 -0
- data/lib/cosm-rb/templates/json/datastream_defaults.rb +66 -0
- data/lib/cosm-rb/templates/json/feed_defaults.rb +134 -0
- data/lib/cosm-rb/templates/json/key_defaults.rb +41 -0
- data/lib/cosm-rb/templates/json/search_result_defaults.rb +47 -0
- data/lib/cosm-rb/templates/json/trigger_defaults.rb +21 -0
- data/lib/cosm-rb/templates/xml/datapoint_defaults.rb +25 -0
- data/lib/cosm-rb/templates/xml/datastream_defaults.rb +66 -0
- data/lib/cosm-rb/templates/xml/feed_defaults.rb +110 -0
- data/lib/cosm-rb/templates/xml/search_result_defaults.rb +116 -0
- data/lib/cosm-rb/templates/xml_headers.rb +17 -0
- data/lib/cosm-rb/trigger.rb +65 -0
- data/lib/cosm-rb/validations.rb +9 -0
- data/lib/cosm-rb/version.rb +3 -0
- data/lib/cosm-rb.rb +29 -0
- data/spec/cosm-rb/array_extensions_spec.rb +9 -0
- data/spec/cosm-rb/base/instance_methods_spec.rb +109 -0
- data/spec/cosm-rb/base_spec.rb +56 -0
- data/spec/cosm-rb/client_spec.rb +7 -0
- data/spec/cosm-rb/datapoint_spec.rb +169 -0
- data/spec/cosm-rb/datastream_spec.rb +301 -0
- data/spec/cosm-rb/feed_spec.rb +298 -0
- data/spec/cosm-rb/hash_extensions_spec.rb +20 -0
- data/spec/cosm-rb/helpers_spec.rb +56 -0
- data/spec/cosm-rb/key_spec.rb +178 -0
- data/spec/cosm-rb/parsers/csv/datastream_defaults_spec.rb +12 -0
- data/spec/cosm-rb/parsers/csv/feed_defaults_spec.rb +35 -0
- data/spec/cosm-rb/parsers/json/datapoint_defaults_spec.rb +15 -0
- data/spec/cosm-rb/parsers/json/datastream_defaults_spec.rb +82 -0
- data/spec/cosm-rb/parsers/json/feed_defaults_spec.rb +18 -0
- data/spec/cosm-rb/parsers/json/key_defaults_spec.rb +8 -0
- data/spec/cosm-rb/parsers/json/search_result_defaults_spec.rb +12 -0
- data/spec/cosm-rb/parsers/json/trigger_defaults_spec.rb +16 -0
- data/spec/cosm-rb/parsers/xml/datapoint_defaults_spec.rb +19 -0
- data/spec/cosm-rb/parsers/xml/datastream_defaults_spec.rb +63 -0
- data/spec/cosm-rb/parsers/xml/feed_defaults_spec.rb +65 -0
- data/spec/cosm-rb/parsers/xml/key_defaults_spec.rb +16 -0
- data/spec/cosm-rb/parsers/xml/trigger_defaults_spec.rb +16 -0
- data/spec/cosm-rb/search_result_spec.rb +258 -0
- data/spec/cosm-rb/string_extensions_spec.rb +12 -0
- data/spec/cosm-rb/template_spec.rb +74 -0
- data/spec/cosm-rb/templates/csv/datapoint_defaults_spec.rb +41 -0
- data/spec/cosm-rb/templates/csv/datastream_defaults_spec.rb +131 -0
- data/spec/cosm-rb/templates/csv/feed_defaults_spec.rb +78 -0
- data/spec/cosm-rb/templates/json/datapoint_defaults_spec.rb +14 -0
- data/spec/cosm-rb/templates/json/datastream_defaults_spec.rb +170 -0
- data/spec/cosm-rb/templates/json/feed_defaults_spec.rb +397 -0
- data/spec/cosm-rb/templates/json/key_defaults_spec.rb +29 -0
- data/spec/cosm-rb/templates/json/search_result_defaults_spec.rb +37 -0
- data/spec/cosm-rb/templates/json/trigger_defaults_spec.rb +19 -0
- data/spec/cosm-rb/templates/xml/datapoint_defaults_spec.rb +14 -0
- data/spec/cosm-rb/templates/xml/datastream_defaults_spec.rb +113 -0
- data/spec/cosm-rb/templates/xml/feed_defaults_spec.rb +131 -0
- data/spec/cosm-rb/templates/xml/search_result_defaults_spec.rb +44 -0
- data/spec/cosm-rb/trigger_spec.rb +117 -0
- data/spec/fixtures/models.rb +81 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/support/contain_datapoint_eeml_matcher.rb +16 -0
- data/spec/support/contain_datastream_eeml_matcher.rb +60 -0
- data/spec/support/contain_feed_eeml_matcher.rb +96 -0
- data/spec/support/datapoint_helper.rb +53 -0
- data/spec/support/datastream_helper.rb +300 -0
- data/spec/support/describe_eeml_matcher.rb +23 -0
- data/spec/support/feed_helper.rb +771 -0
- data/spec/support/fully_represent_datapoint_matcher.rb +30 -0
- data/spec/support/fully_represent_datastream_matcher.rb +92 -0
- data/spec/support/fully_represent_feed_matcher.rb +226 -0
- data/spec/support/fully_represent_key_matcher.rb +74 -0
- data/spec/support/fully_represent_search_result_matcher.rb +67 -0
- data/spec/support/fully_represent_trigger_matcher.rb +29 -0
- data/spec/support/key_helper.rb +74 -0
- data/spec/support/search_result_helper.rb +252 -0
- data/spec/support/trigger_helper.rb +51 -0
- metadata +363 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Cosm
|
|
2
|
+
module Templates
|
|
3
|
+
module JSON
|
|
4
|
+
module DatastreamDefaults
|
|
5
|
+
def generate_json(version, options={})
|
|
6
|
+
case version
|
|
7
|
+
when "1.0.0"
|
|
8
|
+
json_1_0_0 options
|
|
9
|
+
when "0.6-alpha"
|
|
10
|
+
json_0_6_alpha options
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
# As used by http://cosm.com/api/v2/FEED_ID/datastreams/DATASTREAM_ID.json
|
|
17
|
+
def json_1_0_0(options={})
|
|
18
|
+
template = Template.new(self, :json)
|
|
19
|
+
template.id
|
|
20
|
+
template.version {"1.0.0"}
|
|
21
|
+
template.at {updated.iso8601(6)}
|
|
22
|
+
template.current_value
|
|
23
|
+
template.max_value {max_value.to_s}
|
|
24
|
+
template.min_value {min_value.to_s}
|
|
25
|
+
template.tags {parse_tag_string(tags)}
|
|
26
|
+
template.unit {unit_hash(options)}
|
|
27
|
+
template.datapoints_function
|
|
28
|
+
template.datapoints do
|
|
29
|
+
datapoints.collect do |datapoint|
|
|
30
|
+
{
|
|
31
|
+
:at => datapoint.at.iso8601(6),
|
|
32
|
+
:value => datapoint.value
|
|
33
|
+
}
|
|
34
|
+
end
|
|
35
|
+
end if datapoints.any?
|
|
36
|
+
template.output! options
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# As used by http://cosm.com/api/v1/FEED_ID/datastreams/DATASTREAM_ID.json
|
|
40
|
+
def json_0_6_alpha(options={})
|
|
41
|
+
template = Template.new(self, :json)
|
|
42
|
+
template.id
|
|
43
|
+
template.version {"0.6-alpha"}
|
|
44
|
+
template.values {
|
|
45
|
+
[{ :recorded_at => updated.iso8601,
|
|
46
|
+
:value => current_value,
|
|
47
|
+
:max_value => max_value.to_s,
|
|
48
|
+
:min_value => min_value.to_s }.delete_if_nil_value]
|
|
49
|
+
}
|
|
50
|
+
template.tags {parse_tag_string(tags)}
|
|
51
|
+
template.unit {unit_hash(options)}
|
|
52
|
+
template.output! options
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def unit_hash(options={})
|
|
56
|
+
hash = { :type => unit_type,
|
|
57
|
+
:symbol => unit_symbol,
|
|
58
|
+
:label => unit_label }
|
|
59
|
+
!options[:include_blank] ? hash.delete_if_nil_value : hash
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
module Cosm
|
|
2
|
+
module Templates
|
|
3
|
+
module JSON
|
|
4
|
+
module FeedDefaults
|
|
5
|
+
|
|
6
|
+
include Cosm::Helpers
|
|
7
|
+
|
|
8
|
+
def generate_json(version, options = {})
|
|
9
|
+
case version
|
|
10
|
+
when "1.0.0"
|
|
11
|
+
json_1_0_0 options
|
|
12
|
+
when "0.6-alpha"
|
|
13
|
+
json_0_6_alpha options
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
# As used by http://cosm.com/api/v2/FEED_ID.json
|
|
20
|
+
def json_1_0_0(options = {})
|
|
21
|
+
template = Template.new(self, :json)
|
|
22
|
+
template.id
|
|
23
|
+
template.title
|
|
24
|
+
template.private {private.to_s}
|
|
25
|
+
template.icon
|
|
26
|
+
template.website
|
|
27
|
+
template.tags {parse_tag_string(tags)} if tags
|
|
28
|
+
template.description
|
|
29
|
+
template.feed {feed.blank? ? "" : "#{feed}.json"}
|
|
30
|
+
template.auto_feed_url
|
|
31
|
+
template.status
|
|
32
|
+
template.updated {updated.iso8601(6)}
|
|
33
|
+
template.created {created.iso8601(6)}
|
|
34
|
+
template.email
|
|
35
|
+
template.creator
|
|
36
|
+
if owner_login
|
|
37
|
+
template.user do |user|
|
|
38
|
+
{
|
|
39
|
+
:login => owner_login
|
|
40
|
+
}
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
template.version {"1.0.0"}
|
|
44
|
+
if datastreams
|
|
45
|
+
template.datastreams do
|
|
46
|
+
datastreams.collect do |ds|
|
|
47
|
+
if ds.datapoints.any?
|
|
48
|
+
datapoints = ds.datapoints.collect {|dp| {:value => dp.value, :at => dp.at.iso8601(6)}}
|
|
49
|
+
end
|
|
50
|
+
{
|
|
51
|
+
:id => ds.id,
|
|
52
|
+
:at => ds.updated.iso8601(6),
|
|
53
|
+
:max_value => ds.max_value.to_s,
|
|
54
|
+
:min_value => ds.min_value.to_s,
|
|
55
|
+
:current_value => ds.current_value,
|
|
56
|
+
:tags => parse_tag_string(ds.tags),
|
|
57
|
+
:unit => unit_hash(ds, options),
|
|
58
|
+
:datapoints => datapoints
|
|
59
|
+
}.delete_if_nil_value
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
template.location {location_hash(options)}
|
|
64
|
+
template.output! options
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# As used by http://cosm.com/api/v1/FEED_ID.json
|
|
68
|
+
def json_0_6_alpha(options={})
|
|
69
|
+
template = Template.new(self, :json)
|
|
70
|
+
template.id
|
|
71
|
+
template.title
|
|
72
|
+
template.icon
|
|
73
|
+
template.website
|
|
74
|
+
template.description
|
|
75
|
+
template.feed {"#{feed}.json"}
|
|
76
|
+
template.status
|
|
77
|
+
template.updated {updated.iso8601(6)}
|
|
78
|
+
template.email
|
|
79
|
+
template.version {"0.6-alpha"}
|
|
80
|
+
if datastreams
|
|
81
|
+
template.datastreams do
|
|
82
|
+
datastreams.collect do |ds|
|
|
83
|
+
{
|
|
84
|
+
:id => ds.id,
|
|
85
|
+
:values => [{
|
|
86
|
+
:max_value => ds.max_value.to_s,
|
|
87
|
+
:min_value => ds.min_value.to_s,
|
|
88
|
+
:value => ds.current_value,
|
|
89
|
+
:recorded_at => ds.updated.iso8601
|
|
90
|
+
}.delete_if_nil_value],
|
|
91
|
+
:tags => parse_tag_string(ds.tags),
|
|
92
|
+
:unit => unit_hash(ds, options)
|
|
93
|
+
}.delete_if_nil_value
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
template.location {location_hash(options)}
|
|
98
|
+
template.output! options
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
private
|
|
102
|
+
|
|
103
|
+
def location_hash(options={})
|
|
104
|
+
hash = { :disposition => location_disposition,
|
|
105
|
+
:name => location_name,
|
|
106
|
+
:exposure => location_exposure,
|
|
107
|
+
:domain => location_domain,
|
|
108
|
+
:ele => location_ele,
|
|
109
|
+
:lat => location_lat,
|
|
110
|
+
:lon => location_lon }
|
|
111
|
+
hash[:waypoints] = format_location_waypoints if location_waypoints
|
|
112
|
+
!options[:include_blank] ? (hash.delete_if_nil_value if location_disposition || location_name || location_exposure || location_domain || location_ele || location_lat || location_lon) : hash
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def format_location_waypoints
|
|
116
|
+
output = []
|
|
117
|
+
location_waypoints.each{ |item|
|
|
118
|
+
output << item
|
|
119
|
+
output.last[:at] = output.last[:at].iso8601(6)
|
|
120
|
+
}
|
|
121
|
+
output
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def unit_hash(datastream, options={})
|
|
125
|
+
hash = { :type => datastream.unit_type,
|
|
126
|
+
:symbol => datastream.unit_symbol,
|
|
127
|
+
:label => datastream.unit_label }
|
|
128
|
+
!options[:include_blank] ? (hash.delete_if_nil_value if datastream.unit_type || datastream.unit_label || datastream.unit_symbol) : hash
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Cosm
|
|
2
|
+
module Templates
|
|
3
|
+
module JSON
|
|
4
|
+
module KeyDefaults
|
|
5
|
+
def generate_json(options={})
|
|
6
|
+
template = Template.new(self, :json)
|
|
7
|
+
template.key do |k|
|
|
8
|
+
if self.permissions
|
|
9
|
+
s = self.permissions.collect { |s|
|
|
10
|
+
if s.resources
|
|
11
|
+
res = s.resources.collect { |r| { :feed_id => r.feed_id, :datastream_id => r.datastream_id, :datastream_trigger_id => r.datastream_trigger_id }.delete_if_nil_value
|
|
12
|
+
}
|
|
13
|
+
end
|
|
14
|
+
{
|
|
15
|
+
:referer => s.referer,
|
|
16
|
+
:source_ip => s.source_ip,
|
|
17
|
+
:label => s.label,
|
|
18
|
+
:minimum_interval => s.minimum_interval,
|
|
19
|
+
:access_methods => s.access_methods.collect { |a| a.to_s.downcase },
|
|
20
|
+
:resources => res
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
{
|
|
26
|
+
:id => id,
|
|
27
|
+
:expires_at => expires_at.respond_to?(:iso8601) ? expires_at.iso8601(6) : expires_at,
|
|
28
|
+
:api_key => key,
|
|
29
|
+
:user => user,
|
|
30
|
+
:label => label,
|
|
31
|
+
:private_access => private_access,
|
|
32
|
+
:permissions => s
|
|
33
|
+
}
|
|
34
|
+
end
|
|
35
|
+
template.output! options
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module Cosm
|
|
2
|
+
module Templates
|
|
3
|
+
module JSON
|
|
4
|
+
module SearchResultDefaults
|
|
5
|
+
|
|
6
|
+
include Helpers
|
|
7
|
+
|
|
8
|
+
def generate_json(version)
|
|
9
|
+
case version
|
|
10
|
+
when "1.0.0"
|
|
11
|
+
json_1_0_0
|
|
12
|
+
when "0.6-alpha"
|
|
13
|
+
json_0_6_alpha
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
# As used by http://cosm.com/api/v2/feeds.json
|
|
20
|
+
def json_1_0_0
|
|
21
|
+
template = Template.new(self, :json)
|
|
22
|
+
template.totalResults
|
|
23
|
+
template.startIndex
|
|
24
|
+
template.itemsPerPage
|
|
25
|
+
if results
|
|
26
|
+
template.results {results.collect{|f| f.generate_json("1.0.0")}}
|
|
27
|
+
end
|
|
28
|
+
template.output!
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# As used by http://cosm.com/api/v1/feeds.json
|
|
32
|
+
def json_0_6_alpha
|
|
33
|
+
template = Template.new(self, :json)
|
|
34
|
+
template.totalResults
|
|
35
|
+
template.startIndex
|
|
36
|
+
template.itemsPerPage
|
|
37
|
+
if results
|
|
38
|
+
template.results {results.collect{|f| f.generate_json("0.6-alpha")}}
|
|
39
|
+
end
|
|
40
|
+
template.output!
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Cosm
|
|
2
|
+
module Templates
|
|
3
|
+
module JSON
|
|
4
|
+
module TriggerDefaults
|
|
5
|
+
def generate_json(version = nil)
|
|
6
|
+
template = Template.new(self, :json)
|
|
7
|
+
template.id
|
|
8
|
+
template.threshold_value
|
|
9
|
+
template.notified_at
|
|
10
|
+
template.url
|
|
11
|
+
template.trigger_type
|
|
12
|
+
template.stream_id
|
|
13
|
+
template.environment_id
|
|
14
|
+
template.user
|
|
15
|
+
template.output!
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Cosm
|
|
2
|
+
module Templates
|
|
3
|
+
module XML
|
|
4
|
+
module DatapointDefaults
|
|
5
|
+
include XMLHeaders
|
|
6
|
+
def generate_xml(version = nil)
|
|
7
|
+
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
|
8
|
+
xml.eeml(_eeml_0_5_1) do |eeml|
|
|
9
|
+
eeml.environment do |environment|
|
|
10
|
+
environment.data do |data|
|
|
11
|
+
data.datapoints do |datapoints|
|
|
12
|
+
datapoints.value(value, :at => at.iso8601(6))
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
builder.to_xml
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Cosm
|
|
2
|
+
module Templates
|
|
3
|
+
module XML
|
|
4
|
+
module DatastreamDefaults
|
|
5
|
+
include XMLHeaders
|
|
6
|
+
include Helpers
|
|
7
|
+
|
|
8
|
+
def generate_xml(version, options={})
|
|
9
|
+
case version
|
|
10
|
+
when "0.5.1"
|
|
11
|
+
xml_0_5_1 options
|
|
12
|
+
when "5"
|
|
13
|
+
xml_5 options
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
# As used by http://cosm.com/api/v2/FEED_ID/datastreams/DATASTREAM_ID.xml
|
|
20
|
+
def xml_0_5_1(options={})
|
|
21
|
+
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
|
22
|
+
xml.eeml(_eeml_0_5_1) do |eeml|
|
|
23
|
+
eeml.environment(:updated => updated.iso8601(6), :id => feed_id, :creator => feed_creator) do |environment|
|
|
24
|
+
environment.data(:id => id) do |data|
|
|
25
|
+
parse_tag_string(tags).each do |tag|
|
|
26
|
+
data.tag tag
|
|
27
|
+
end if tags
|
|
28
|
+
data.current_value current_value, :at => updated.iso8601(6)
|
|
29
|
+
data.max_value max_value if max_value
|
|
30
|
+
data.min_value min_value if min_value
|
|
31
|
+
data.unit unit_label, {:type => unit_type, :symbol => unit_symbol}.delete_if_nil_value if unit_label || unit_type || unit_symbol
|
|
32
|
+
data.datapoints({"function" => datapoints_function}.delete_if_nil_value) do
|
|
33
|
+
datapoints.each do |datapoint|
|
|
34
|
+
data.value(datapoint.value, "at" => datapoint.at.iso8601(6))
|
|
35
|
+
end
|
|
36
|
+
end if datapoints.any?
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
builder.to_xml
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# As used by http://cosm.com/api/v1/FEED_ID/datastreams/DATASTREAM_ID.xml
|
|
45
|
+
def xml_5(options={})
|
|
46
|
+
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
|
47
|
+
xml.eeml(_eeml_5) do |eeml|
|
|
48
|
+
eeml.environment(:updated => updated.iso8601, :id => feed_id, :creator => "http://www.haque.co.uk") do |environment|
|
|
49
|
+
environment.data(:id => id) do |data|
|
|
50
|
+
parse_tag_string(tags).each do |tag|
|
|
51
|
+
data.tag tag
|
|
52
|
+
end if tags
|
|
53
|
+
data.value current_value, {:minValue => min_value, :maxValue => max_value}.delete_if_nil_value
|
|
54
|
+
data.unit unit_label, {:type => unit_type, :symbol => unit_symbol}.delete_if_nil_value if unit_label || unit_type || unit_symbol
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
builder.to_xml
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
module Cosm
|
|
2
|
+
module Templates
|
|
3
|
+
module XML
|
|
4
|
+
module FeedDefaults
|
|
5
|
+
include XMLHeaders
|
|
6
|
+
include Helpers
|
|
7
|
+
|
|
8
|
+
def generate_xml(version, options={})
|
|
9
|
+
case version
|
|
10
|
+
when "0.5.1"
|
|
11
|
+
xml_0_5_1 options
|
|
12
|
+
when "5"
|
|
13
|
+
xml_5 options
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
# As used by http://cosm.com/api/v2/FEED_ID/datastreams/DATASTREAM_ID.xml
|
|
20
|
+
def xml_0_5_1(options={})
|
|
21
|
+
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
|
22
|
+
xml.eeml(_eeml_0_5_1) do |eeml|
|
|
23
|
+
eeml.environment(:updated => updated.iso8601(6), :created => created.iso8601(6), :id => id, :creator => creator) do |environment|
|
|
24
|
+
environment.title title unless title.blank?
|
|
25
|
+
environment.feed "#{feed}.xml" unless feed.blank?
|
|
26
|
+
environment.auto_feed_url auto_feed_url unless auto_feed_url.blank?
|
|
27
|
+
environment.status status unless status.blank?
|
|
28
|
+
environment.description description unless description.blank?
|
|
29
|
+
environment.icon icon unless icon.blank?
|
|
30
|
+
environment.website website unless website.blank?
|
|
31
|
+
environment.email email unless email.blank?
|
|
32
|
+
environment.private_ self.private.to_s
|
|
33
|
+
parse_tag_string(tags).each do |tag|
|
|
34
|
+
environment.tag tag
|
|
35
|
+
end if tags
|
|
36
|
+
environment.location({:disposition => location_disposition, :exposure => location_exposure, :domain => location_domain}.delete_if_nil_value) do |location|
|
|
37
|
+
location.name location_name
|
|
38
|
+
location.lat location_lat
|
|
39
|
+
location.lon location_lon
|
|
40
|
+
location.ele location_ele
|
|
41
|
+
end
|
|
42
|
+
environment.user do |user|
|
|
43
|
+
user.login owner_login
|
|
44
|
+
end if owner_login
|
|
45
|
+
datastreams.each do |ds|
|
|
46
|
+
environment.data(:id => ds.id) do |data|
|
|
47
|
+
parse_tag_string(ds.tags).each do |tag|
|
|
48
|
+
data.tag tag
|
|
49
|
+
end if ds.tags
|
|
50
|
+
data.current_value ds.current_value, :at => ds.updated.iso8601(6)
|
|
51
|
+
data.max_value ds.max_value if ds.max_value
|
|
52
|
+
data.min_value ds.min_value if ds.min_value
|
|
53
|
+
if ds.unit_symbol || ds.unit_type
|
|
54
|
+
units = {:type => ds.unit_type, :symbol => ds.unit_symbol}.delete_if_nil_value
|
|
55
|
+
end
|
|
56
|
+
data.unit ds.unit_label, units if !ds.unit_label.empty? || !units.empty?
|
|
57
|
+
data.datapoints do
|
|
58
|
+
ds.datapoints.each do |datapoint|
|
|
59
|
+
data.value(datapoint.value, "at" => datapoint.at.iso8601(6))
|
|
60
|
+
end
|
|
61
|
+
end if ds.datapoints.any?
|
|
62
|
+
end
|
|
63
|
+
end if datastreams
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
builder.to_xml
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# As used by http://cosm.com/api/v1/FEED_ID/datastreams/DATASTREAM_ID.xml
|
|
71
|
+
def xml_5(options={})
|
|
72
|
+
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
|
73
|
+
xml.eeml(_eeml_5) do |eeml|
|
|
74
|
+
eeml.environment(:updated => updated.iso8601, :id => id, :creator => "http://www.haque.co.uk") do |environment|
|
|
75
|
+
environment.title title unless title.blank?
|
|
76
|
+
environment.feed "#{feed}.xml" unless feed.blank?
|
|
77
|
+
environment.status status unless status.blank?
|
|
78
|
+
environment.description description unless description.blank?
|
|
79
|
+
environment.icon icon unless icon.blank?
|
|
80
|
+
environment.website website unless website.blank?
|
|
81
|
+
environment.email email unless email.blank?
|
|
82
|
+
environment.location({:disposition => location_disposition, :exposure => location_exposure, :domain => location_domain}.delete_if_nil_value) do |location|
|
|
83
|
+
location.name location_name
|
|
84
|
+
location.lat location_lat
|
|
85
|
+
location.lon location_lon
|
|
86
|
+
location.ele location_ele
|
|
87
|
+
end if location_disposition || location_exposure || location_domain || location_name || location_lat || location_lon || location_ele
|
|
88
|
+
datastreams.each do |ds|
|
|
89
|
+
environment.data(:id => ds.id) do |data|
|
|
90
|
+
parse_tag_string(ds.tags).each do |tag|
|
|
91
|
+
data.tag tag
|
|
92
|
+
end if ds.tags
|
|
93
|
+
data.value ds.current_value, {:minValue => ds.min_value, :maxValue => ds.max_value}.delete_if_nil_value
|
|
94
|
+
if ds.unit_symbol || ds.unit_type
|
|
95
|
+
units = {:type => ds.unit_type, :symbol => ds.unit_symbol}.delete_if_nil_value
|
|
96
|
+
end
|
|
97
|
+
data.unit ds.unit_label, units if !ds.unit_label.empty? || !units.empty?
|
|
98
|
+
end
|
|
99
|
+
end if datastreams
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
builder.to_xml
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
module Cosm
|
|
2
|
+
module Templates
|
|
3
|
+
module XML
|
|
4
|
+
module SearchResultDefaults
|
|
5
|
+
include XMLHeaders
|
|
6
|
+
include Helpers
|
|
7
|
+
|
|
8
|
+
def generate_xml(version)
|
|
9
|
+
case version
|
|
10
|
+
when "0.5.1"
|
|
11
|
+
xml_0_5_1
|
|
12
|
+
when "5"
|
|
13
|
+
xml_5
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
# As used by http://cosm.com/api/v2/feeds.xml
|
|
20
|
+
def xml_0_5_1
|
|
21
|
+
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
|
22
|
+
xml.eeml(_eeml_0_5_1.merge({"xmlns:opensearch" => "http://a9.com/-/spec/opensearch/1.1/"})) do |eeml|
|
|
23
|
+
eeml['opensearch'].totalResults totalResults
|
|
24
|
+
eeml['opensearch'].startIndex startIndex
|
|
25
|
+
eeml['opensearch'].itemsPerPage itemsPerPage
|
|
26
|
+
results.each do |env|
|
|
27
|
+
eeml.environment(:created => env.created.iso8601(6), :updated => env.updated.iso8601(6), :id => env.id, :creator => env.creator) do |environment|
|
|
28
|
+
environment.title env.title
|
|
29
|
+
environment.feed "#{env.feed}.xml"
|
|
30
|
+
environment.status env.status
|
|
31
|
+
environment.description env.description
|
|
32
|
+
environment.icon env.icon
|
|
33
|
+
environment.website env.website
|
|
34
|
+
environment.email env.email
|
|
35
|
+
environment.private_ env.private
|
|
36
|
+
parse_tag_string(env.tags).each do |tag|
|
|
37
|
+
environment.tag tag
|
|
38
|
+
end if env.tags
|
|
39
|
+
environment.location({:disposition => env.location_disposition, :exposure => env.location_exposure, :domain => env.location_domain}.delete_if_nil_value) do |location|
|
|
40
|
+
location.name env.location_name
|
|
41
|
+
location.lat env.location_lat
|
|
42
|
+
location.lon env.location_lon
|
|
43
|
+
location.ele env.location_ele
|
|
44
|
+
end if env.location_disposition || env.location_exposure || env.location_domain || env.location_name || env.location_lat || env.location_lon || env.location_ele
|
|
45
|
+
env.datastreams.each do |ds|
|
|
46
|
+
environment.data(:id => ds.id) do |data|
|
|
47
|
+
parse_tag_string(ds.tags).each do |tag|
|
|
48
|
+
data.tag tag
|
|
49
|
+
end if ds.tags
|
|
50
|
+
data.current_value ds.current_value, :at => ds.updated.iso8601(6)
|
|
51
|
+
data.max_value ds.max_value if ds.max_value
|
|
52
|
+
data.min_value ds.min_value if ds.min_value
|
|
53
|
+
if ds.unit_symbol || ds.unit_type
|
|
54
|
+
units = {:type => ds.unit_type, :symbol => ds.unit_symbol}.delete_if_nil_value
|
|
55
|
+
end
|
|
56
|
+
data.unit ds.unit_label, units if !ds.unit_label.empty? || !units.empty?
|
|
57
|
+
data.datapoints do
|
|
58
|
+
ds.datapoints.each do |datapoint|
|
|
59
|
+
data.value(datapoint.value, "at" => datapoint.at.iso8601(6))
|
|
60
|
+
end
|
|
61
|
+
end if ds.datapoints.any?
|
|
62
|
+
end
|
|
63
|
+
end if env.datastreams
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
builder.to_xml
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# As used by http://cosm.com/api/v1/feeds.xml
|
|
72
|
+
def xml_5
|
|
73
|
+
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
|
74
|
+
xml.eeml(_eeml_5.merge({"xmlns:opensearch" => "http://a9.com/-/spec/opensearch/1.1/"})) do |eeml|
|
|
75
|
+
eeml['opensearch'].totalResults totalResults
|
|
76
|
+
eeml['opensearch'].startIndex startIndex
|
|
77
|
+
eeml['opensearch'].itemsPerPage itemsPerPage
|
|
78
|
+
results.each do |env|
|
|
79
|
+
eeml.environment(:updated => env.updated.iso8601, :id => env.id, :creator => "http://www.haque.co.uk") do |environment|
|
|
80
|
+
environment.title env.title
|
|
81
|
+
environment.feed "#{env.feed}.xml"
|
|
82
|
+
environment.status env.status
|
|
83
|
+
environment.description env.description
|
|
84
|
+
environment.icon env.icon
|
|
85
|
+
environment.website env.website
|
|
86
|
+
environment.email env.email
|
|
87
|
+
environment.location({:disposition => env.location_disposition, :exposure => env.location_exposure, :domain => env.location_domain}.delete_if_nil_value) do |location|
|
|
88
|
+
location.name env.location_name
|
|
89
|
+
location.lat env.location_lat
|
|
90
|
+
location.lon env.location_lon
|
|
91
|
+
location.ele env.location_ele
|
|
92
|
+
end
|
|
93
|
+
env.datastreams.each do |ds|
|
|
94
|
+
environment.data(:id => ds.id) do |data|
|
|
95
|
+
parse_tag_string(ds.tags).each do |tag|
|
|
96
|
+
data.tag tag
|
|
97
|
+
end if ds.tags
|
|
98
|
+
data.value ds.current_value, {:minValue => ds.min_value, :maxValue => ds.max_value}.delete_if_nil_value
|
|
99
|
+
if ds.unit_symbol || ds.unit_type
|
|
100
|
+
units = {:type => ds.unit_type, :symbol => ds.unit_symbol}.delete_if_nil_value
|
|
101
|
+
end
|
|
102
|
+
data.unit ds.unit_label, units if !ds.unit_label.empty? || !units.empty?
|
|
103
|
+
end
|
|
104
|
+
end if env.datastreams
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
builder.to_xml
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Cosm
|
|
2
|
+
module Templates
|
|
3
|
+
module XMLHeaders
|
|
4
|
+
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
def _eeml_0_5_1
|
|
8
|
+
{:xmlns => "http://www.eeml.org/xsd/0.5.1", "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", :version => "0.5.1", "xsi:schemaLocation" => "http://www.eeml.org/xsd/0.5.1 http://www.eeml.org/xsd/0.5.1/0.5.1.xsd"}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def _eeml_5
|
|
12
|
+
{:xmlns => "http://www.eeml.org/xsd/005", "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", :version => "5", "xsi:schemaLocation" => "http://www.eeml.org/xsd/005 http://www.eeml.org/xsd/005/005.xsd"}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|