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.
Files changed (122) hide show
  1. data/.gitignore +12 -0
  2. data/.rbenv-version +1 -0
  3. data/.rspec +2 -0
  4. data/.rvmrc +1 -0
  5. data/.travis.yml +10 -0
  6. data/CHANGELOG.md +91 -0
  7. data/Gemfile +4 -0
  8. data/MIT-LICENSE +20 -0
  9. data/README.md +195 -0
  10. data/Rakefile +35 -0
  11. data/ci/build_hudson.sh +24 -0
  12. data/cosm-rb.gemspec +40 -0
  13. data/init.rb +2 -0
  14. data/lib/cosm-rb/array_extensions.rb +6 -0
  15. data/lib/cosm-rb/base/instance_methods.rb +28 -0
  16. data/lib/cosm-rb/base.rb +52 -0
  17. data/lib/cosm-rb/client.rb +7 -0
  18. data/lib/cosm-rb/datapoint.rb +71 -0
  19. data/lib/cosm-rb/datastream.rb +136 -0
  20. data/lib/cosm-rb/feed.rb +108 -0
  21. data/lib/cosm-rb/hash_extensions.rb +16 -0
  22. data/lib/cosm-rb/helpers.rb +42 -0
  23. data/lib/cosm-rb/key.rb +98 -0
  24. data/lib/cosm-rb/nil_content.rb +15 -0
  25. data/lib/cosm-rb/object_extensions.rb +6 -0
  26. data/lib/cosm-rb/parsers/csv/datastream_defaults.rb +12 -0
  27. data/lib/cosm-rb/parsers/csv/feed_defaults.rb +38 -0
  28. data/lib/cosm-rb/parsers/defaults.rb +13 -0
  29. data/lib/cosm-rb/parsers/json/datapoint_defaults.rb +12 -0
  30. data/lib/cosm-rb/parsers/json/datastream_defaults.rb +53 -0
  31. data/lib/cosm-rb/parsers/json/feed_defaults.rb +103 -0
  32. data/lib/cosm-rb/parsers/json/key_defaults.rb +15 -0
  33. data/lib/cosm-rb/parsers/json/search_result_defaults.rb +18 -0
  34. data/lib/cosm-rb/parsers/json/trigger_defaults.rb +12 -0
  35. data/lib/cosm-rb/parsers/xml/datapoint_defaults.rb +20 -0
  36. data/lib/cosm-rb/parsers/xml/datastream_defaults.rb +77 -0
  37. data/lib/cosm-rb/parsers/xml/feed_defaults.rb +127 -0
  38. data/lib/cosm-rb/parsers/xml/key_defaults.rb +40 -0
  39. data/lib/cosm-rb/parsers/xml/trigger_defaults.rb +22 -0
  40. data/lib/cosm-rb/permission.rb +67 -0
  41. data/lib/cosm-rb/resource.rb +43 -0
  42. data/lib/cosm-rb/search_result.rb +63 -0
  43. data/lib/cosm-rb/string_extensions.rb +6 -0
  44. data/lib/cosm-rb/template.rb +32 -0
  45. data/lib/cosm-rb/templates/csv/datapoint_defaults.rb +22 -0
  46. data/lib/cosm-rb/templates/csv/datastream_defaults.rb +43 -0
  47. data/lib/cosm-rb/templates/csv/feed_defaults.rb +47 -0
  48. data/lib/cosm-rb/templates/defaults.rb +14 -0
  49. data/lib/cosm-rb/templates/json/datapoint_defaults.rb +15 -0
  50. data/lib/cosm-rb/templates/json/datastream_defaults.rb +66 -0
  51. data/lib/cosm-rb/templates/json/feed_defaults.rb +134 -0
  52. data/lib/cosm-rb/templates/json/key_defaults.rb +41 -0
  53. data/lib/cosm-rb/templates/json/search_result_defaults.rb +47 -0
  54. data/lib/cosm-rb/templates/json/trigger_defaults.rb +21 -0
  55. data/lib/cosm-rb/templates/xml/datapoint_defaults.rb +25 -0
  56. data/lib/cosm-rb/templates/xml/datastream_defaults.rb +66 -0
  57. data/lib/cosm-rb/templates/xml/feed_defaults.rb +110 -0
  58. data/lib/cosm-rb/templates/xml/search_result_defaults.rb +116 -0
  59. data/lib/cosm-rb/templates/xml_headers.rb +17 -0
  60. data/lib/cosm-rb/trigger.rb +65 -0
  61. data/lib/cosm-rb/validations.rb +9 -0
  62. data/lib/cosm-rb/version.rb +3 -0
  63. data/lib/cosm-rb.rb +29 -0
  64. data/spec/cosm-rb/array_extensions_spec.rb +9 -0
  65. data/spec/cosm-rb/base/instance_methods_spec.rb +109 -0
  66. data/spec/cosm-rb/base_spec.rb +56 -0
  67. data/spec/cosm-rb/client_spec.rb +7 -0
  68. data/spec/cosm-rb/datapoint_spec.rb +169 -0
  69. data/spec/cosm-rb/datastream_spec.rb +301 -0
  70. data/spec/cosm-rb/feed_spec.rb +298 -0
  71. data/spec/cosm-rb/hash_extensions_spec.rb +20 -0
  72. data/spec/cosm-rb/helpers_spec.rb +56 -0
  73. data/spec/cosm-rb/key_spec.rb +178 -0
  74. data/spec/cosm-rb/parsers/csv/datastream_defaults_spec.rb +12 -0
  75. data/spec/cosm-rb/parsers/csv/feed_defaults_spec.rb +35 -0
  76. data/spec/cosm-rb/parsers/json/datapoint_defaults_spec.rb +15 -0
  77. data/spec/cosm-rb/parsers/json/datastream_defaults_spec.rb +82 -0
  78. data/spec/cosm-rb/parsers/json/feed_defaults_spec.rb +18 -0
  79. data/spec/cosm-rb/parsers/json/key_defaults_spec.rb +8 -0
  80. data/spec/cosm-rb/parsers/json/search_result_defaults_spec.rb +12 -0
  81. data/spec/cosm-rb/parsers/json/trigger_defaults_spec.rb +16 -0
  82. data/spec/cosm-rb/parsers/xml/datapoint_defaults_spec.rb +19 -0
  83. data/spec/cosm-rb/parsers/xml/datastream_defaults_spec.rb +63 -0
  84. data/spec/cosm-rb/parsers/xml/feed_defaults_spec.rb +65 -0
  85. data/spec/cosm-rb/parsers/xml/key_defaults_spec.rb +16 -0
  86. data/spec/cosm-rb/parsers/xml/trigger_defaults_spec.rb +16 -0
  87. data/spec/cosm-rb/search_result_spec.rb +258 -0
  88. data/spec/cosm-rb/string_extensions_spec.rb +12 -0
  89. data/spec/cosm-rb/template_spec.rb +74 -0
  90. data/spec/cosm-rb/templates/csv/datapoint_defaults_spec.rb +41 -0
  91. data/spec/cosm-rb/templates/csv/datastream_defaults_spec.rb +131 -0
  92. data/spec/cosm-rb/templates/csv/feed_defaults_spec.rb +78 -0
  93. data/spec/cosm-rb/templates/json/datapoint_defaults_spec.rb +14 -0
  94. data/spec/cosm-rb/templates/json/datastream_defaults_spec.rb +170 -0
  95. data/spec/cosm-rb/templates/json/feed_defaults_spec.rb +397 -0
  96. data/spec/cosm-rb/templates/json/key_defaults_spec.rb +29 -0
  97. data/spec/cosm-rb/templates/json/search_result_defaults_spec.rb +37 -0
  98. data/spec/cosm-rb/templates/json/trigger_defaults_spec.rb +19 -0
  99. data/spec/cosm-rb/templates/xml/datapoint_defaults_spec.rb +14 -0
  100. data/spec/cosm-rb/templates/xml/datastream_defaults_spec.rb +113 -0
  101. data/spec/cosm-rb/templates/xml/feed_defaults_spec.rb +131 -0
  102. data/spec/cosm-rb/templates/xml/search_result_defaults_spec.rb +44 -0
  103. data/spec/cosm-rb/trigger_spec.rb +117 -0
  104. data/spec/fixtures/models.rb +81 -0
  105. data/spec/spec_helper.rb +17 -0
  106. data/spec/support/contain_datapoint_eeml_matcher.rb +16 -0
  107. data/spec/support/contain_datastream_eeml_matcher.rb +60 -0
  108. data/spec/support/contain_feed_eeml_matcher.rb +96 -0
  109. data/spec/support/datapoint_helper.rb +53 -0
  110. data/spec/support/datastream_helper.rb +300 -0
  111. data/spec/support/describe_eeml_matcher.rb +23 -0
  112. data/spec/support/feed_helper.rb +771 -0
  113. data/spec/support/fully_represent_datapoint_matcher.rb +30 -0
  114. data/spec/support/fully_represent_datastream_matcher.rb +92 -0
  115. data/spec/support/fully_represent_feed_matcher.rb +226 -0
  116. data/spec/support/fully_represent_key_matcher.rb +74 -0
  117. data/spec/support/fully_represent_search_result_matcher.rb +67 -0
  118. data/spec/support/fully_represent_trigger_matcher.rb +29 -0
  119. data/spec/support/key_helper.rb +74 -0
  120. data/spec/support/search_result_helper.rb +252 -0
  121. data/spec/support/trigger_helper.rb +51 -0
  122. metadata +363 -0
@@ -0,0 +1,170 @@
1
+ require 'spec_helper'
2
+
3
+ describe "default datastream json templates" do
4
+ before(:each) do
5
+ @datastream = Cosm::Datastream.new(datastream_as_(:hash))
6
+ end
7
+
8
+ context "1.0.0 (used by Pachube API V2)" do
9
+ it "should be the default" do
10
+ @datastream.generate_json("1.0.0").should == @datastream.as_json
11
+ end
12
+
13
+ it "should represent Pachube JSON 1.0.0 (used by API v2)" do
14
+ json = @datastream.generate_json("1.0.0")
15
+ json[:id].should == @datastream.id
16
+ json[:version].should == "1.0.0"
17
+ json[:at].should == @datastream.updated.iso8601(6)
18
+ json[:current_value].should == @datastream.current_value
19
+ json[:max_value].should == @datastream.max_value.to_s
20
+ json[:min_value].should == @datastream.min_value.to_s
21
+ json[:tags].should == @datastream.tags.split(',').map(&:strip).sort{|a,b| a.downcase <=> b.downcase}
22
+ json[:unit].should == {
23
+ :type => @datastream.unit_type,
24
+ :symbol => @datastream.unit_symbol,
25
+ :label => @datastream.unit_label
26
+ }
27
+ json[:datapoints].should_not be_nil
28
+ json[:datapoints].each do |datapoint|
29
+ @datastream.datapoints.detect {|dp| dp.at == datapoint["at"]}.value.should == datapoint["value"]
30
+ end
31
+ end
32
+
33
+ it "should ignore tags if blank" do
34
+ @datastream.tags = []
35
+ json = @datastream.generate_json("1.0.0")
36
+ json[:tags].should be_nil
37
+ end
38
+
39
+ it "should ignore nil unit elements" do
40
+ @datastream.unit_symbol = nil
41
+ json = @datastream.generate_json("1.0.0")
42
+ json[:unit][:symbol].should be_nil
43
+ end
44
+
45
+ it "should ignore unit if none of the elements are set" do
46
+ @datastream.unit_label = nil
47
+ @datastream.unit_symbol = nil
48
+ @datastream.unit_type = nil
49
+ json = @datastream.generate_json("1.0.0")
50
+ json[:unit].should be_nil
51
+ end
52
+
53
+ it "should ignore unit if all the elements are blank" do
54
+ @datastream.unit_label = ''
55
+ @datastream.unit_symbol = ''
56
+ @datastream.unit_type = ''
57
+ json = @datastream.generate_json("1.0.0")
58
+ json[:unit].should be_nil
59
+ end
60
+
61
+ it "should ignore datapoints_function if it is not set" do
62
+ @datastream.datapoints_function = nil
63
+ json = @datastream.generate_json("1.0.0")
64
+ json[:datapoints_function].should be_nil
65
+ end
66
+
67
+ it "should use datapoints_function if it is set" do
68
+ @datastream.datapoints_function = 'average'
69
+ json = @datastream.generate_json("1.0.0")
70
+ json[:datapoints_function].should == 'average'
71
+ end
72
+
73
+ it "should ignore tags if nil" do
74
+ @datastream.tags = nil
75
+ json = @datastream.generate_json("1.0.0")
76
+ json[:tags].should be_nil
77
+ end
78
+
79
+ it "should ignore datapoints if empty" do
80
+ @datastream.datapoints = []
81
+ json = @datastream.generate_json("1.0.0")
82
+ json[:datapoints].should be_nil
83
+ end
84
+
85
+ it "should ignore unit if none of the elements are set" do
86
+ @datastream.unit_label = nil
87
+ @datastream.unit_symbol = nil
88
+ @datastream.unit_type = nil
89
+ json = @datastream.generate_json("1.0.0")
90
+ json[:unit].should be_nil
91
+ end
92
+
93
+ it "should include empty elements if we pass :include_blank" do
94
+ @datastream.unit_label = ''
95
+ @datastream.unit_symbol = ''
96
+ json = @datastream.generate_json("1.0.0", :include_blank => true)
97
+ json[:unit][:label].should == ''
98
+ json[:unit][:symbol].should == ''
99
+ end
100
+ end
101
+
102
+ context "0.6-alpha (used by API V1)" do
103
+ it "should represent Pachube JSON 0.6-alpha (used by API v1)" do
104
+ json = @datastream.generate_json("0.6-alpha")
105
+ json[:id].should == @datastream.id
106
+ json[:version].should == "0.6-alpha"
107
+ json[:values].first[:recorded_at].should == @datastream.updated.iso8601
108
+ json[:values].first[:value].should == @datastream.current_value
109
+ json[:values].first[:max_value].should == @datastream.max_value.to_s
110
+ json[:values].first[:min_value].should == @datastream.min_value.to_s
111
+ json[:tags].should == @datastream.tags.split(',').map(&:strip).sort{|a,b| a.downcase <=> b.downcase}
112
+ json[:unit].should == {
113
+ :type => @datastream.unit_type,
114
+ :symbol => @datastream.unit_symbol,
115
+ :label => @datastream.unit_label
116
+ }
117
+ end
118
+
119
+ it "should ignore unit if none of the elements are set" do
120
+ @datastream.unit_label = nil
121
+ @datastream.unit_symbol = nil
122
+ @datastream.unit_type = nil
123
+ json = @datastream.generate_json("0.6-alpha")
124
+ json[:unit].should be_nil
125
+ end
126
+
127
+ it "should ignore tags if nil" do
128
+ @datastream.tags = nil
129
+ json = @datastream.generate_json("0.6-alpha")
130
+ json[:tags].should be_nil
131
+ end
132
+
133
+ it "should ignore unit if all the elements are blank" do
134
+ @datastream.unit_label = ''
135
+ @datastream.unit_symbol = ''
136
+ @datastream.unit_type = ''
137
+ json = @datastream.generate_json("0.6-alpha")
138
+ json[:unit].should be_nil
139
+ end
140
+
141
+ it "should ignore unit if none of the elements are set" do
142
+ @datastream.unit_label = nil
143
+ @datastream.unit_symbol = nil
144
+ @datastream.unit_type = nil
145
+ json = @datastream.generate_json("0.6-alpha")
146
+ json[:unit].should be_nil
147
+ end
148
+
149
+ it "should ignore nil unit elements" do
150
+ @datastream.unit_symbol = nil
151
+ json = @datastream.generate_json("0.6-alpha")
152
+ json[:unit][:symbol].should be_nil
153
+ end
154
+
155
+ it "should ignore tags if blank" do
156
+ @datastream.tags = []
157
+ json = @datastream.generate_json("0.6-alpha")
158
+ json[:tags].should be_nil
159
+ end
160
+
161
+ it "should include empty elements if we pass :include_blank" do
162
+ @datastream.unit_label = ''
163
+ @datastream.unit_symbol = ''
164
+ json = @datastream.generate_json("0.6-alpha", :include_blank => true)
165
+ json[:unit][:label].should == ''
166
+ json[:unit][:symbol].should == ''
167
+ end
168
+ end
169
+ end
170
+
@@ -0,0 +1,397 @@
1
+ require 'spec_helper'
2
+
3
+ describe "default feed json templates" do
4
+ before(:each) do
5
+ @feed = Cosm::Feed.new(feed_as_(:hash))
6
+ end
7
+
8
+ context "1.0.0" do
9
+ it "should be the default" do
10
+ @feed.generate_json("1.0.0").should == @feed.as_json
11
+ end
12
+
13
+ it "should represent Cosm JSON (used by API v2)" do
14
+ json = @feed.generate_json("1.0.0")
15
+ json[:id].should == @feed.id
16
+ json[:version].should == "1.0.0"
17
+ json[:title].should == "Cosm Office Environment"
18
+ json[:private].should == "false"
19
+ json[:icon].should == "http://cosm.com/logo.png"
20
+ json[:website].should == "http://cosm.com"
21
+ json[:tags].should == ["aardvark", "kittens", "sofa"]
22
+ json[:description].should == "Sensors in cosm.com's headquarters."
23
+ json[:feed].should == "http://test.host/testfeed.html?random=890299&rand2=91.json"
24
+ json[:auto_feed_url].should == "http://test.host2/testfeed.xml?q=something"
25
+ json[:user][:login].should == "skeletor"
26
+ json[:status].should == "live"
27
+ json[:updated].should == "2011-01-02T00:00:00.000000+00:00"
28
+ json[:created].should == "2011-01-01T00:00:00.000000+00:00"
29
+ json[:email].should == "abc@example.com"
30
+ json[:creator].should == "http://cosm.com/users/skeletor"
31
+ json[:location][:disposition].should == "fixed"
32
+ json[:location][:name].should == "office"
33
+ json[:location][:exposure].should == "indoor"
34
+ json[:location][:domain].should == "physical"
35
+ json[:location][:ele].should == "23.0"
36
+ json[:location][:lat].should == 51.5235375648154
37
+ json[:location][:lon].should == -0.0807666778564453
38
+ json[:datastreams].should have(7).things
39
+ json[:datastreams].each do |ds|
40
+ datastream = @feed.datastreams.detect{|stream| stream.id == ds[:id]}
41
+ ds[:at].should == datastream.updated.iso8601(6)
42
+ ds[:max_value].should == datastream.max_value.to_s
43
+ ds[:min_value].should == datastream.min_value.to_s
44
+ ds[:current_value].should == datastream.current_value
45
+ ds[:tags].should == datastream.tags.split(',').map(&:strip).sort{|a,b| a.downcase <=> b.downcase} if datastream.tags
46
+ ds[:unit].should == {
47
+ :label => datastream.unit_label,
48
+ :type => datastream.unit_type,
49
+ :symbol => datastream.unit_symbol
50
+ }.delete_if{ |k,v|v.nil? || v.blank? } if ds[:unit]
51
+ ds[:datapoints].each do |dp|
52
+ datapoint = datastream.datapoints.detect {|point| point.at.iso8601(6) == dp[:at]}
53
+ dp[:value].should == datapoint.value
54
+ end if ds[:datapoints]
55
+ end
56
+ end
57
+
58
+ it "should ignore datastream datapoints if empty" do
59
+ @feed.datastreams.each do |ds|
60
+ ds.datapoints = []
61
+ end
62
+ json = @feed.generate_json("1.0.0")
63
+ json[:datastreams].each do |ds|
64
+ ds[:datapoints].should be_nil
65
+ end
66
+ end
67
+
68
+ it "should ignore datastream tags if nil" do
69
+ @feed.datastreams.each do |ds|
70
+ ds.tags = nil
71
+ end
72
+ json = @feed.generate_json("1.0.0")
73
+ json[:datastreams].each do |ds|
74
+ datastream = @feed.datastreams.detect{|stream| stream.id == ds[:id]}
75
+ datastream.tags.should be_nil
76
+ end
77
+ end
78
+
79
+ it "should blank feed if blank" do
80
+ @feed.feed = ''
81
+ json = @feed.generate_json("1.0.0")
82
+ json[:feed].should be_blank
83
+ end
84
+
85
+ it "should blank feed if nil" do
86
+ @feed.feed = nil
87
+ json = @feed.generate_json("1.0.0")
88
+ json[:feed].should be_blank
89
+ end
90
+
91
+ it "should ignore updated if nil" do
92
+ @feed.updated = nil
93
+ json = @feed.generate_json("1.0.0")
94
+ json[:updated].should be_nil
95
+ end
96
+
97
+ it "should ignore updated if nil" do
98
+ @feed.created = nil
99
+ json = @feed.generate_json("1.0.0")
100
+ json[:created].should be_nil
101
+ end
102
+
103
+ it "should ignore tags if nil" do
104
+ @feed.tags = nil
105
+ json = @feed.generate_json("1.0.0")
106
+ json[:tags].should be_nil
107
+ end
108
+
109
+ it "should handle tags if an array" do
110
+ @feed.tags = %w(b a c)
111
+ json = @feed.generate_json("1.0.0")
112
+ json[:tags].should == %w(a b c)
113
+ end
114
+
115
+ it "should ignore location if all elements are nil" do
116
+ @feed.location_name = nil
117
+ @feed.location_disposition = nil
118
+ @feed.location_lat = nil
119
+ @feed.location_lon = nil
120
+ @feed.location_exposure = nil
121
+ @feed.location_ele = nil
122
+ @feed.location_domain = nil
123
+ json = @feed.generate_json("1.0.0")
124
+ json[:location].should be_nil
125
+ end
126
+
127
+ it "should ignore datastream units if blank" do
128
+ @feed.datastreams.each do |ds|
129
+ ds.unit_label = ''
130
+ ds.unit_symbol = ''
131
+ ds.unit_type = ''
132
+ end
133
+ json = @feed.generate_json("1.0.0")
134
+ json[:datastreams].each do |ds|
135
+ ds[:unit].should be_nil
136
+ end
137
+ end
138
+
139
+ it "should ignore datastream units if nil" do
140
+ @feed.datastreams.each do |ds|
141
+ ds.unit_label = nil
142
+ ds.unit_symbol = nil
143
+ ds.unit_type = nil
144
+ end
145
+ json = @feed.generate_json("1.0.0")
146
+ json[:datastreams].each do |ds|
147
+ ds[:unit].should be_nil
148
+ end
149
+ end
150
+
151
+ it "should ignore location if all elements are nil" do
152
+ @feed.location_name = nil
153
+ @feed.location_disposition = nil
154
+ @feed.location_lat = nil
155
+ @feed.location_lon = nil
156
+ @feed.location_exposure = nil
157
+ @feed.location_ele = nil
158
+ @feed.location_domain = nil
159
+ json = @feed.generate_json("1.0.0")
160
+ json[:location].should be_nil
161
+ end
162
+
163
+ it "should ignore blank location elements" do
164
+ @feed.location_disposition = ""
165
+ @feed.location_ele = ""
166
+ json = @feed.generate_json("1.0.0")
167
+ json[:location][:disposition].should be_nil
168
+ json[:location][:ele].should be_nil
169
+ end
170
+
171
+ it "should ignore nil location elements" do
172
+ @feed.location_disposition = nil
173
+ @feed.location_ele = nil
174
+ json = @feed.generate_json("1.0.0")
175
+ json[:location][:disposition].should be_nil
176
+ json[:location][:ele].should be_nil
177
+ end
178
+
179
+ it "should ignore location_waypoints if it is nil" do
180
+ @feed.location_disposition = 'mobile'
181
+ @feed.location_waypoints = nil
182
+ json = @feed.generate_json("1.0.0")
183
+ json[:location][:disposition].should == 'mobile'
184
+ json[:location][:waypoints].should be_nil
185
+ end
186
+
187
+ it "should use location_waypoints if it is set" do
188
+ @feed.location_disposition = 'mobile'
189
+ @feed.location_waypoints = [
190
+ {:at => Time.parse('2012-01-01 12:00:00'), :lat => 1.0, :lon => 1.1, :ele => "1.2"},
191
+ {:at => Time.parse('2012-01-01 13:00:00'), :lat => 2.0, :lon => 2.1, :ele => "2.2"}
192
+ ]
193
+ json = @feed.generate_json("1.0.0")
194
+ json[:location][:disposition].should == 'mobile'
195
+ json[:location][:waypoints].should == [
196
+ {:at => Time.parse('2012-01-01 12:00:00').iso8601(6), :lat => 1.0, :lon => 1.1, :ele => "1.2"},
197
+ {:at => Time.parse('2012-01-01 13:00:00').iso8601(6), :lat => 2.0, :lon => 2.1, :ele => "2.2"}
198
+ ]
199
+ end
200
+
201
+ it "should ignore datastream tags if blank" do
202
+ @feed.datastreams.each do |ds|
203
+ ds.tags = ""
204
+ end
205
+ json = @feed.generate_json("1.0.0")
206
+ json[:datastreams].each do |ds|
207
+ ds[:tags].should be_nil
208
+ end
209
+ end
210
+
211
+ it "should ignore datastream tags if nil" do
212
+ @feed.datastreams.each do |ds|
213
+ ds.tags = nil
214
+ end
215
+ json = @feed.generate_json("1.0.0")
216
+ json[:datastreams].each do |ds|
217
+ ds[:tags].should be_nil
218
+ end
219
+ end
220
+
221
+ it "should ignore tags if blank" do
222
+ @feed.tags = ""
223
+ json = @feed.generate_json("1.0.0")
224
+ json[:tags].should be_nil
225
+ end
226
+
227
+ it "should ignore tags if nil" do
228
+ @feed.tags = nil
229
+ json = @feed.generate_json("1.0.0")
230
+ json[:tags].should be_nil
231
+ end
232
+
233
+ it "should include empty stuff if we pass :include_blank" do
234
+ @feed.description = ''
235
+ @feed.location_ele = ''
236
+ json = @feed.generate_json("1.0.0", :include_blank => true)
237
+ json[:description].should == ''
238
+ json[:location][:ele].should == ''
239
+ end
240
+ end
241
+
242
+ context "0.6-alpha" do
243
+
244
+ it "should represent Cosm JSON (used by API v1)" do
245
+ json = @feed.generate_json("0.6-alpha")
246
+ json[:id].should == @feed.id
247
+ json[:version].should == "0.6-alpha"
248
+ json[:title].should == "Cosm Office Environment"
249
+ json[:private].should be_nil
250
+ json[:icon].should == "http://cosm.com/logo.png"
251
+ json[:website].should == "http://cosm.com"
252
+ json[:tags].should be_nil
253
+ json[:description].should == "Sensors in cosm.com's headquarters."
254
+ json[:feed].should == "http://test.host/testfeed.html?random=890299&rand2=91.json"
255
+ json[:status].should == "live"
256
+ json[:updated].should == "2011-01-02T00:00:00.000000+00:00"
257
+ json[:email].should == "abc@example.com"
258
+ json[:location][:disposition].should == "fixed"
259
+ json[:location][:name].should == "office"
260
+ json[:location][:exposure].should == "indoor"
261
+ json[:location][:domain].should == "physical"
262
+ json[:location][:ele].should == "23.0"
263
+ json[:location][:lat].should == 51.5235375648154
264
+ json[:location][:lon].should == -0.0807666778564453
265
+ json[:datastreams].should have(7).things
266
+ json[:datastreams].each do |ds|
267
+ datastream = @feed.datastreams.detect{|stream| stream.id == ds[:id]}
268
+ ds[:values].first[:max_value].should == datastream.max_value.to_s
269
+ ds[:values].first[:min_value].should == datastream.min_value.to_s
270
+ ds[:values].first[:value].should == datastream.current_value
271
+ ds[:values].first[:recorded_at].should == datastream.updated.iso8601
272
+ ds[:tags].should == datastream.tags.split(',').map(&:strip).sort{|a,b| a.downcase <=> b.downcase} if datastream.tags
273
+ ds[:unit].should == {
274
+ :label => datastream.unit_label,
275
+ :type => datastream.unit_type,
276
+ :symbol => datastream.unit_symbol
277
+ }.delete_if{ |k,v|v.nil? || v.blank? } if ds[:unit]
278
+ end
279
+ end
280
+
281
+ it "should ignore datastream units if blank" do
282
+ @feed.datastreams.each do |ds|
283
+ ds.unit_label = ''
284
+ ds.unit_symbol = ''
285
+ ds.unit_type = ''
286
+ end
287
+ json = @feed.generate_json("0.6-alpha")
288
+ json[:datastreams].each do |ds|
289
+ ds[:unit].should be_nil
290
+ end
291
+ end
292
+
293
+ it "should ignore datastream units if nil" do
294
+ @feed.datastreams.each do |ds|
295
+ ds.unit_label = nil
296
+ ds.unit_symbol = nil
297
+ ds.unit_type = nil
298
+ end
299
+ json = @feed.generate_json("0.6-alpha")
300
+ json[:datastreams].each do |ds|
301
+ ds[:unit].should be_nil
302
+ end
303
+ end
304
+
305
+ it "should ignore datastream tags if blank" do
306
+ @feed.datastreams.each do |ds|
307
+ ds.tags = ""
308
+ end
309
+ json = @feed.generate_json("0.6-alpha")
310
+ json[:datastreams].each do |ds|
311
+ ds[:tags].should be_nil
312
+ end
313
+ end
314
+
315
+
316
+ it "should ignore datastream tags if nil" do
317
+ @feed.datastreams.each do |ds|
318
+ ds.tags = nil
319
+ end
320
+ json = @feed.generate_json("0.6-alpha")
321
+ json[:datastreams].each do |ds|
322
+ ds[:tags].should be_nil
323
+ end
324
+ end
325
+
326
+ it "should ignore datastream value fields if nil" do
327
+ @feed.datastreams.each do |ds|
328
+ ds.min_value = nil
329
+ end
330
+ json = @feed.generate_json("0.6-alpha")
331
+ json[:datastreams].each do |ds|
332
+ ds[:values].first[:min_value].should be_nil
333
+ end
334
+ end
335
+
336
+ it "should ignore datastream value fields if blank" do
337
+ @feed.datastreams.each do |ds|
338
+ ds.min_value = ""
339
+ end
340
+ json = @feed.generate_json("0.6-alpha")
341
+ json[:datastreams].each do |ds|
342
+ ds[:values].first[:min_value].should be_nil
343
+ end
344
+ end
345
+ it "should ignore tags if blank" do
346
+ @feed.tags = ""
347
+ json = @feed.generate_json("0.6-alpha")
348
+ json[:tags].should be_nil
349
+ end
350
+
351
+
352
+ it "should ignore tags if nil" do
353
+ @feed.tags = nil
354
+ json = @feed.generate_json("0.6-alpha")
355
+ json[:tags].should be_nil
356
+ end
357
+
358
+ it "should ignore nil location elements" do
359
+ @feed.location_disposition = nil
360
+ @feed.location_ele = nil
361
+ json = @feed.generate_json("0.6-alpha")
362
+ json[:location][:disposition].should be_nil
363
+ json[:location][:ele].should be_nil
364
+ end
365
+
366
+
367
+ it "should ignore blank location elements" do
368
+ @feed.location_disposition = ""
369
+ @feed.location_ele = ""
370
+ json = @feed.generate_json("0.6-alpha")
371
+ json[:location][:disposition].should be_nil
372
+ json[:location][:ele].should be_nil
373
+ end
374
+
375
+
376
+ it "should ignore location if all elements are nil" do
377
+ @feed.location_name = nil
378
+ @feed.location_disposition = nil
379
+ @feed.location_lat = nil
380
+ @feed.location_lon = nil
381
+ @feed.location_exposure = nil
382
+ @feed.location_ele = nil
383
+ @feed.location_domain = nil
384
+ json = @feed.generate_json("0.6-alpha")
385
+ json[:location].should be_nil
386
+ end
387
+
388
+ it "should include empty stuff if we pass :include_blank" do
389
+ @feed.description = ''
390
+ @feed.location_ele = ''
391
+ json = @feed.generate_json("0.6-alpha", :include_blank => true)
392
+ json[:description].should == ''
393
+ json[:location][:ele].should == ''
394
+ end
395
+ end
396
+ end
397
+
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe "default key json templates" do
4
+ before(:each) do
5
+ @key = Cosm::Key.new(key_as_(:hash))
6
+ end
7
+
8
+ it "should represent Pachube JSON (used by API v2)" do
9
+ json = @key.generate_json
10
+ json[:key][:id].should == @key.id
11
+ json[:key][:expires_at].should == @key.expires_at
12
+ json[:key][:api_key].should == @key.key
13
+ json[:key][:user].should == @key.user
14
+ json[:key][:label].should == @key.label
15
+ json[:key][:private_access].should == @key.private_access
16
+ json[:key][:permissions].each_index do |permission_index|
17
+ json[:key][:permissions][permission_index][:access_methods].should == @key.permissions[permission_index].access_methods
18
+ json[:key][:permissions][permission_index][:label].should == @key.permissions[permission_index].label
19
+ json[:key][:permissions][permission_index][:referer].should == @key.permissions[permission_index].referer
20
+ json[:key][:permissions][permission_index][:source_ip].should == @key.permissions[permission_index].source_ip
21
+ json[:key][:permissions][permission_index][:minimum_interval].should == @key.permissions[permission_index].minimum_interval
22
+ json[:key][:permissions][permission_index][:resources].each_index do |res_index|
23
+ json[:key][:permissions][permission_index][:resources][res_index][:feed_id].should == @key.permissions[permission_index].resources[res_index].feed_id
24
+ json[:key][:permissions][permission_index][:resources][res_index][:datastream_id].should == @key.permissions[permission_index].resources[res_index].datastream_id
25
+ json[:key][:permissions][permission_index][:resources][res_index][:datastream_trigger_id].should == @key.permissions[permission_index].resources[res_index].datastream_trigger_id
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe "default search result json templates" do
4
+ before(:each) do
5
+ @search_result = Cosm::SearchResult.new(search_result_as_(:hash))
6
+ end
7
+
8
+ context "1.0.0" do
9
+ it "should represent Pachube v2 json for search results" do
10
+ @search_result.results.each do |feed|
11
+ feed.should_receive(:generate_json).with("1.0.0").and_return("feed_100_json")
12
+ end
13
+ @search_result.generate_json("1.0.0").should == {
14
+ :totalResults => "10000",
15
+ :startIndex => "0",
16
+ :itemsPerPage => "100",
17
+ :results => ["feed_100_json"]
18
+ }
19
+ end
20
+ end
21
+
22
+ context "0.6-alpha" do
23
+ it "should represent Pachube v1 json for search results" do
24
+ @search_result.results.each do |feed|
25
+ feed.should_receive(:generate_json).with("0.6-alpha").and_return("feed_6_json")
26
+ end
27
+ @search_result.generate_json("0.6-alpha").should == {
28
+ :startIndex => "0",
29
+ :totalResults => "10000",
30
+ :itemsPerPage => "100",
31
+ :results => ["feed_6_json"]
32
+ }
33
+ end
34
+ end
35
+ end
36
+
37
+
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe "default feed json templates" do
4
+ before(:each) do
5
+ @trigger = Cosm::Trigger.new(trigger_as_(:hash))
6
+ end
7
+
8
+ it "should represent Pachube JSON (used by API v2)" do
9
+ json = @trigger.generate_json
10
+ json[:id].should == @trigger.id
11
+ json[:threshold_value].should == @trigger.threshold_value
12
+ json[:notified_at].should == nil
13
+ json[:url].should == @trigger.url
14
+ json[:trigger_type].should == @trigger.trigger_type
15
+ json[:stream_id].should == @trigger.stream_id
16
+ json[:environment_id].should == @trigger.environment_id
17
+ json[:user].should == @trigger.user
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe "default datapoint xml templates" do
4
+ before(:each) do
5
+ @datapoint = Cosm::Datapoint.new(datapoint_as_(:hash))
6
+ end
7
+
8
+ it "should represent Pachube datapoints" do
9
+ xml = Nokogiri.parse(@datapoint.generate_xml)
10
+ xml.should describe_eeml_for_version("0.5.1")
11
+ xml.should contain_datapoint_eeml_for_version("0.5.1")
12
+ end
13
+ end
14
+