barometer 0.3.1 → 0.3.2
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/README.rdoc +1 -1
- data/VERSION.yml +1 -1
- data/bin/barometer +25 -3
- data/lib/barometer/data/units.rb +6 -3
- data/lib/barometer/services/google.rb +17 -2
- data/lib/barometer/weather.rb +4 -5
- data/lib/demometer/demometer.rb +10 -1
- data/lib/demometer/views/forecast.erb +8 -7
- data/lib/demometer/views/index.erb +22 -22
- data/lib/demometer/views/measurement.erb +46 -40
- data/spec/service_google_spec.rb +135 -0
- data/spec/weather_spec.rb +12 -0
- metadata +1 -1
data/README.rdoc
CHANGED
@@ -10,7 +10,7 @@ unavailable.
|
|
10
10
|
|
11
11
|
== version
|
12
12
|
|
13
|
-
Version 0.3.
|
13
|
+
Version 0.3.2 is the current release of this gem.
|
14
14
|
The gem is available from github (attack-barometer) or rubyforge (barometer).
|
15
15
|
It is fully functional (for three weather service APIs).
|
16
16
|
|
data/VERSION.yml
CHANGED
data/bin/barometer
CHANGED
@@ -65,7 +65,7 @@ require 'yaml'
|
|
65
65
|
KEY_FILE = File.expand_path(File.join('~', '.barometer'))
|
66
66
|
|
67
67
|
class App
|
68
|
-
VERSION = '0.3.
|
68
|
+
VERSION = '0.3.2'
|
69
69
|
|
70
70
|
attr_reader :options
|
71
71
|
|
@@ -168,11 +168,33 @@ class App
|
|
168
168
|
|
169
169
|
def output_help
|
170
170
|
output_version
|
171
|
-
|
171
|
+
#output_usage
|
172
172
|
end
|
173
173
|
|
174
174
|
def output_usage
|
175
|
-
|
175
|
+
puts "Usage: "
|
176
|
+
puts "barometer [options] query"
|
177
|
+
puts
|
178
|
+
puts "For help use: barometer -h"
|
179
|
+
puts
|
180
|
+
puts "options:"
|
181
|
+
puts " -v, --version Display the version, then exit"
|
182
|
+
puts " -V, --verbose Verbose output"
|
183
|
+
puts " -t, --timeout seconds until service queries will timeout"
|
184
|
+
puts " -g, --geocode Force Geocoding of query"
|
185
|
+
puts " -m, --metric measure in metric"
|
186
|
+
puts " -i, --imperial measure in imperial"
|
187
|
+
puts " --no-wunderground DONT use default wunderground as source"
|
188
|
+
puts " --yahoo use yahoo as source"
|
189
|
+
puts " --google use google as source"
|
190
|
+
puts " -p, --pop pop threshold used to determine wet?"
|
191
|
+
puts " -s, --wind wind speed threshold used to determine windy?"
|
192
|
+
puts " -a, --at time/date used to determine when to calculate summary"
|
193
|
+
puts
|
194
|
+
puts " Web Demo:"
|
195
|
+
puts " -w, --web run web-app with barometer demo"
|
196
|
+
puts " -k, --kill stop the web demo background process"
|
197
|
+
puts " -S, --status show the web demo status"
|
176
198
|
end
|
177
199
|
|
178
200
|
def output_version
|
data/lib/barometer/data/units.rb
CHANGED
@@ -19,16 +19,19 @@ module Barometer
|
|
19
19
|
# assigns a value to the right attribute based on metric setting
|
20
20
|
def <<(value)
|
21
21
|
return unless value
|
22
|
+
|
23
|
+
# these values can be treated like 'nil'
|
24
|
+
nil_values = ["NA"]
|
22
25
|
|
23
26
|
begin
|
24
27
|
if value.is_a?(Array)
|
25
|
-
value_m = value[0].to_f
|
26
|
-
value_i = value[1].to_f
|
28
|
+
value_m = value[0].to_f if (value[0] && !nil_values.include?(value[0]))
|
29
|
+
value_i = value[1].to_f if (value[1] && !nil_values.include?(value[1]))
|
27
30
|
value_b = nil
|
28
31
|
else
|
29
32
|
value_m = nil
|
30
33
|
value_i = nil
|
31
|
-
value_b = value.to_f
|
34
|
+
value_b = value.to_f if (value && !nil_values.include?(value))
|
32
35
|
end
|
33
36
|
rescue
|
34
37
|
# do nothing
|
@@ -40,6 +40,15 @@ module Barometer
|
|
40
40
|
:google
|
41
41
|
end
|
42
42
|
|
43
|
+
# these are the icon codes that indicate "wet", used by wet? function
|
44
|
+
def self.wet_icon_codes
|
45
|
+
%w(rain chance_of_rain chance_of_storm thunderstorm mist)
|
46
|
+
end
|
47
|
+
# these are the icon codes that indicate "sun", used by sunny? function
|
48
|
+
def self.sunny_icon_codes
|
49
|
+
%w(sunny mostly_sunny partly_cloudy)
|
50
|
+
end
|
51
|
+
|
43
52
|
def self._measure(measurement, query, metric=true)
|
44
53
|
raise ArgumentError unless measurement.is_a?(Barometer::Measurement)
|
45
54
|
raise ArgumentError unless query.is_a?(Barometer::Query)
|
@@ -68,7 +77,10 @@ module Barometer
|
|
68
77
|
|
69
78
|
if data['current_conditions']
|
70
79
|
data = data['current_conditions']
|
71
|
-
|
80
|
+
if data['icon']
|
81
|
+
icon_match = data['icon']['data'].match(/.*\/([A-Za-z_]*)\.png/)
|
82
|
+
current.icon = icon_match[1] if icon_match
|
83
|
+
end
|
72
84
|
current.condition = data['condition']['data'] if data['condition']
|
73
85
|
|
74
86
|
humidity_match = data['humidity']['data'].match(/[\d]+/)
|
@@ -100,7 +112,10 @@ module Barometer
|
|
100
112
|
d = 0
|
101
113
|
data.each do |forecast|
|
102
114
|
forecast_measurement = ForecastMeasurement.new
|
103
|
-
|
115
|
+
if forecast['icon']
|
116
|
+
icon_match = forecast['icon']['data'].match(/.*\/([A-Za-z_]*)\.png/)
|
117
|
+
forecast_measurement.icon = icon_match[1] if icon_match
|
118
|
+
end
|
104
119
|
forecast_measurement.condition = forecast['condition']['data'] if forecast['condition']
|
105
120
|
|
106
121
|
if (start_date + d).strftime("%a").downcase == forecast['day_of_week']['data'].downcase
|
data/lib/barometer/weather.rb
CHANGED
@@ -64,25 +64,24 @@ module Barometer
|
|
64
64
|
# averages
|
65
65
|
#
|
66
66
|
|
67
|
-
# TODO: not tested (except via averages)
|
68
67
|
def metric?
|
69
68
|
self.default ? self.default.metric? : true
|
70
69
|
end
|
71
70
|
|
72
|
-
# TODO: not tested (except via averages)
|
73
71
|
# this assumes calculating for current, and that "to_f" for a value
|
74
72
|
# will return the value needed
|
75
73
|
# value_name = the name of the value we are averaging
|
76
74
|
def current_average(value_name)
|
77
75
|
values = []
|
78
76
|
@measurements.each do |measurement|
|
79
|
-
values << measurement.current.send(value_name).to_f if measurement.success?
|
77
|
+
values << measurement.current.send(value_name).to_f if measurement.success? &&
|
78
|
+
measurement.current.send(value_name)
|
80
79
|
end
|
80
|
+
values.compact!
|
81
81
|
return nil unless values && values.size > 0
|
82
|
-
values.inject(0.0) { |sum,v| sum += v } / values.size
|
82
|
+
values.inject(0.0) { |sum,v| sum += v if v } / values.size
|
83
83
|
end
|
84
84
|
|
85
|
-
# TODO: not tested (except via averages)
|
86
85
|
def average(value_name, do_average=true, class_name=nil)
|
87
86
|
if class_name
|
88
87
|
if do_average
|
data/lib/demometer/demometer.rb
CHANGED
@@ -12,6 +12,13 @@ end
|
|
12
12
|
|
13
13
|
class Demometer < Sinatra::Default
|
14
14
|
|
15
|
+
helpers do
|
16
|
+
def data(title, value)
|
17
|
+
return if value.nil?
|
18
|
+
"<li>#{title}: #{value}</li>"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
15
22
|
get '/' do
|
16
23
|
erb :index
|
17
24
|
end
|
@@ -19,9 +26,11 @@ class Demometer < Sinatra::Default
|
|
19
26
|
post '/' do
|
20
27
|
# apply options
|
21
28
|
Barometer.force_geocode = (params[:query][:geocode].to_s == "1" ? true : false)
|
22
|
-
Barometer.selection = { 1 => [ params[:query][:source].to_sym ] }
|
23
29
|
metric = (params[:query][:metric].to_s == "1" ? true : false)
|
24
30
|
|
31
|
+
# determine sources
|
32
|
+
Barometer.selection = { 1 => params[:query][:source].collect{|s| s.to_sym } }
|
33
|
+
|
25
34
|
if params[:query] && !params[:query][:q].empty?
|
26
35
|
@barometer = Barometer.new(params[:query][:q])
|
27
36
|
@weather = @barometer.measure(metric)
|
@@ -1,14 +1,15 @@
|
|
1
1
|
<h4>for: <%= forecast.date %></h4>
|
2
2
|
<p>
|
3
3
|
<ul>
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
<%= data("Date", forecast.date) %>
|
5
|
+
<%= data("Icon", forecast.icon) %>
|
6
|
+
<%= data("Condition", forecast.condition) %>
|
7
|
+
<%= data("High", forecast.high) %>
|
8
|
+
<%= data("Low", forecast.low) %>
|
9
|
+
<%= data("POP", forecast.pop) %>
|
10
10
|
<% if forecast.sun %>
|
11
|
-
|
11
|
+
<%= data("Sun Rise", forecast.sun.rise) %>
|
12
|
+
<%= data("Sun Set", forecast.sun.set) %>
|
12
13
|
<% end %>
|
13
14
|
</ul>
|
14
15
|
</p>
|
@@ -14,9 +14,9 @@
|
|
14
14
|
<input id="query_metric" name="query[metric]" type="checkbox" value="1" checked="checked" />
|
15
15
|
<br/>
|
16
16
|
Source :
|
17
|
-
<input type="
|
18
|
-
<input type="
|
19
|
-
<input type="
|
17
|
+
<input type="checkbox" name="query[source]" value="wunderground" checked="checked" /> Wunderground
|
18
|
+
<input type="checkbox" name="query[source]" value="yahoo" /> Yahoo
|
19
|
+
<input type="checkbox" name="query[source]" value="google" /> Google
|
20
20
|
<br/>
|
21
21
|
Force Geocode? :
|
22
22
|
<input id="query_geocode" name="query[geocode]" type="checkbox" value="1" checked="checked" />
|
@@ -35,24 +35,24 @@
|
|
35
35
|
<h2>Averages</h2>
|
36
36
|
<p>
|
37
37
|
<ul>
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
38
|
+
<%= data("Humidity", @weather.humidity.to_i) %>
|
39
|
+
<%= data("Temperature", @weather.temperature) %>
|
40
|
+
<%= data("Wind", @weather.wind) %>
|
41
|
+
<%= data("Pressure", @weather.pressure) %>
|
42
|
+
<%= data("Dew Point", @weather.dew_point) %>
|
43
|
+
<%= data("Heat Index", @weather.heat_index) %>
|
44
|
+
<%= data("Wind Chill", @weather.wind_chill) %>
|
45
|
+
<%= data("Visibility", @weather.visibility) %>
|
46
46
|
</ul>
|
47
47
|
</p>
|
48
48
|
|
49
49
|
<h2>Summary</h2>
|
50
50
|
<p>
|
51
51
|
<ul>
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
<%= data("Day?", @weather.day?) %>
|
53
|
+
<%= data("Sunny?", @weather.sunny?) %>
|
54
|
+
<%= data("Windy?", @weather.windy?) %>
|
55
|
+
<%= data("Wet?", @weather.wet?) %>
|
56
56
|
</ul>
|
57
57
|
</p>
|
58
58
|
|
@@ -60,14 +60,14 @@
|
|
60
60
|
<h3>Query</h3>
|
61
61
|
<p>
|
62
62
|
<ul>
|
63
|
-
|
63
|
+
<%= data("Format", @barometer.query.format) %>
|
64
64
|
<% if @barometer.query.geo %>
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
65
|
+
<%= data("Locality", @barometer.query.geo.locality) %>
|
66
|
+
<%= data("Region", @barometer.query.geo.region) %>
|
67
|
+
<%= data("Country", @barometer.query.geo.country) %>
|
68
|
+
<%= data("Country Code", @barometer.query.geo.country_code) %>
|
69
|
+
<%= data("Latitude", @barometer.query.geo.latitude) %>
|
70
|
+
<%= data("Longitude", @barometer.query.geo.longitude) %>
|
71
71
|
<% end %>
|
72
72
|
</ul>
|
73
73
|
</p>
|
@@ -1,10 +1,10 @@
|
|
1
1
|
<h2><%= measurement.source.to_s.capitalize %></h2>
|
2
2
|
<p>
|
3
3
|
<ul>
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
<%= data("Source", measurement.source) %>
|
5
|
+
<%= data("Time", measurement.time) %>
|
6
|
+
<%= data("Metric", measurement.metric?) %>
|
7
|
+
<%= data("Success", measurement.success?) %>
|
8
8
|
</ul>
|
9
9
|
</p>
|
10
10
|
|
@@ -12,16 +12,16 @@
|
|
12
12
|
<h3>Location</h3>
|
13
13
|
<p>
|
14
14
|
<ul>
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
15
|
+
<%= data("id", measurement.location.id) %>
|
16
|
+
<%= data("Name", measurement.location.name) %>
|
17
|
+
<%= data("City", measurement.location.city) %>
|
18
|
+
<%= data("State Name", measurement.location.state_name) %>
|
19
|
+
<%= data("State Code", measurement.location.state_code) %>
|
20
|
+
<%= data("Country", measurement.location.country) %>
|
21
|
+
<%= data("Country Code", measurement.location.country_code) %>
|
22
|
+
<%= data("Zip Code", measurement.location.zip_code) %>
|
23
|
+
<%= data("Latitude", measurement.location.latitude) %>
|
24
|
+
<%= data("Longitude", measurement.location.longitude) %>
|
25
25
|
</ul>
|
26
26
|
</p>
|
27
27
|
<% end %>
|
@@ -30,16 +30,17 @@
|
|
30
30
|
<h3>Station</h3>
|
31
31
|
<p>
|
32
32
|
<ul>
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
33
|
+
<%= data("id", measurement.station.id) %>
|
34
|
+
<%= data("Name", measurement.station.name) %>
|
35
|
+
<%= data("City", measurement.station.city) %>
|
36
|
+
<%= data("State Name", measurement.station.state_name) %>
|
37
|
+
<%= data("State Code", measurement.station.state_code) %>
|
38
|
+
<%= data("Country", measurement.station.country) %>
|
39
|
+
<%= data("Country Code", measurement.station.country_code) %>
|
40
|
+
<%= data("Zip Code", measurement.station.zip_code) %>
|
41
|
+
<%= data("Latitude", measurement.station.latitude) %>
|
42
|
+
<%= data("Longitude", measurement.station.longitude) %>
|
43
|
+
</ul>
|
43
44
|
</ul>
|
44
45
|
</p>
|
45
46
|
<% end %>
|
@@ -48,9 +49,9 @@
|
|
48
49
|
<h3>Timezone</h3>
|
49
50
|
<p>
|
50
51
|
<ul>
|
51
|
-
|
52
|
-
|
53
|
-
|
52
|
+
<%= data("Long", measurement.timezone.timezone) %>
|
53
|
+
<%= data("Code", measurement.timezone.code) %>
|
54
|
+
<%= data("DST?", measurement.timezone.dst?) %>
|
54
55
|
</ul>
|
55
56
|
</p>
|
56
57
|
<% end %>
|
@@ -59,20 +60,25 @@
|
|
59
60
|
<h3>Current</h3>
|
60
61
|
<p>
|
61
62
|
<ul>
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
63
|
+
<%= data("Time", measurement.current.time) %>
|
64
|
+
<%= data("Local Time", measurement.current.local_time) %>
|
65
|
+
<%= data("Humidity", measurement.current.humidity) %>
|
66
|
+
<%= data("Icon", measurement.current.icon) %>
|
67
|
+
<%= data("Condition", measurement.current.condition) %>
|
68
|
+
<%= data("Temperature", measurement.current.temperature) %>
|
69
|
+
<%= data("Dew Point", measurement.current.dew_point) %>
|
70
|
+
<%= data("Heat Index", measurement.current.heat_index) %>
|
71
|
+
<%= data("Wind Chill", measurement.current.wind_chill) %>
|
72
|
+
<% if measurement.current.wind %>
|
73
|
+
<%= data("Wind Speed", measurement.current.wind) %>
|
74
|
+
<%= data("Wind Direction", measurement.current.wind.direction) %>
|
75
|
+
<%= data("Wind Degrees", measurement.current.wind.degrees) %>
|
76
|
+
<% end %>
|
77
|
+
<%= data("Pressure", measurement.current.pressure) %>
|
78
|
+
<%= data("Visibility", measurement.current.visibility) %>
|
74
79
|
<% if measurement.current.sun %>
|
75
|
-
|
80
|
+
<%= data("Sun Rise", measurement.current.sun.rise) %>
|
81
|
+
<%= data("Sun Set", measurement.current.sun.set) %>
|
76
82
|
<% end %>
|
77
83
|
</ul>
|
78
84
|
</p>
|
data/spec/service_google_spec.rb
CHANGED
@@ -141,4 +141,139 @@ describe "Google" do
|
|
141
141
|
|
142
142
|
end
|
143
143
|
|
144
|
+
describe "when answering the simple questions," do
|
145
|
+
|
146
|
+
before(:each) do
|
147
|
+
@measurement = Barometer::Measurement.new
|
148
|
+
end
|
149
|
+
|
150
|
+
describe "currently_wet_by_icon?" do
|
151
|
+
|
152
|
+
before(:each) do
|
153
|
+
@measurement.current = Barometer::CurrentMeasurement.new
|
154
|
+
end
|
155
|
+
|
156
|
+
it "returns true if matching icon code" do
|
157
|
+
@measurement.current.icon = "rain"
|
158
|
+
@measurement.current.icon?.should be_true
|
159
|
+
Barometer::Google.currently_wet_by_icon?(@measurement.current).should be_true
|
160
|
+
end
|
161
|
+
|
162
|
+
it "returns false if NO matching icon code" do
|
163
|
+
@measurement.current.icon = "sunny"
|
164
|
+
@measurement.current.icon?.should be_true
|
165
|
+
Barometer::Google.currently_wet_by_icon?(@measurement.current).should be_false
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
|
170
|
+
describe "forecasted_wet_by_icon?" do
|
171
|
+
|
172
|
+
before(:each) do
|
173
|
+
@measurement.forecast = [Barometer::ForecastMeasurement.new]
|
174
|
+
@measurement.forecast.first.date = Date.today
|
175
|
+
@measurement.forecast.size.should == 1
|
176
|
+
end
|
177
|
+
|
178
|
+
it "returns true if matching icon code" do
|
179
|
+
@measurement.forecast.first.icon = "rain"
|
180
|
+
@measurement.forecast.first.icon?.should be_true
|
181
|
+
Barometer::Google.forecasted_wet_by_icon?(@measurement.forecast.first).should be_true
|
182
|
+
end
|
183
|
+
|
184
|
+
it "returns false if NO matching icon code" do
|
185
|
+
@measurement.forecast.first.icon = "sunny"
|
186
|
+
@measurement.forecast.first.icon?.should be_true
|
187
|
+
Barometer::Google.forecasted_wet_by_icon?(@measurement.forecast.first).should be_false
|
188
|
+
end
|
189
|
+
|
190
|
+
end
|
191
|
+
|
192
|
+
describe "currently_sunny_by_icon?" do
|
193
|
+
|
194
|
+
before(:each) do
|
195
|
+
@measurement.current = Barometer::CurrentMeasurement.new
|
196
|
+
end
|
197
|
+
|
198
|
+
it "returns true if matching icon code" do
|
199
|
+
@measurement.current.icon = "sunny"
|
200
|
+
@measurement.current.icon?.should be_true
|
201
|
+
Barometer::Google.currently_sunny_by_icon?(@measurement.current).should be_true
|
202
|
+
end
|
203
|
+
|
204
|
+
it "returns false if NO matching icon code" do
|
205
|
+
@measurement.current.icon = "rain"
|
206
|
+
@measurement.current.icon?.should be_true
|
207
|
+
Barometer::Google.currently_sunny_by_icon?(@measurement.current).should be_false
|
208
|
+
end
|
209
|
+
|
210
|
+
end
|
211
|
+
|
212
|
+
describe "forecasted_sunny_by_icon?" do
|
213
|
+
|
214
|
+
before(:each) do
|
215
|
+
@measurement.forecast = [Barometer::ForecastMeasurement.new]
|
216
|
+
@measurement.forecast.first.date = Date.today
|
217
|
+
@measurement.forecast.size.should == 1
|
218
|
+
end
|
219
|
+
|
220
|
+
it "returns true if matching icon code" do
|
221
|
+
@measurement.forecast.first.icon = "sunny"
|
222
|
+
@measurement.forecast.first.icon?.should be_true
|
223
|
+
Barometer::Google.forecasted_sunny_by_icon?(@measurement.forecast.first).should be_true
|
224
|
+
end
|
225
|
+
|
226
|
+
it "returns false if NO matching icon code" do
|
227
|
+
@measurement.forecast.first.icon = "rain"
|
228
|
+
@measurement.forecast.first.icon?.should be_true
|
229
|
+
Barometer::Google.forecasted_sunny_by_icon?(@measurement.forecast.first).should be_false
|
230
|
+
end
|
231
|
+
|
232
|
+
end
|
233
|
+
|
234
|
+
end
|
235
|
+
|
236
|
+
# describe "overall data correctness" do
|
237
|
+
#
|
238
|
+
# before(:each) do
|
239
|
+
# @query = Barometer::Query.new("Calgary,AB")
|
240
|
+
# @query.preferred = "Calgary,AB"
|
241
|
+
# @measurement = Barometer::Measurement.new
|
242
|
+
#
|
243
|
+
# FakeWeb.register_uri(:get,
|
244
|
+
# "http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=#{CGI.escape(@query.preferred)}",
|
245
|
+
# :string => File.read(File.join(File.dirname(__FILE__),
|
246
|
+
# 'fixtures',
|
247
|
+
# 'current_calgary_ab.xml')
|
248
|
+
# )
|
249
|
+
# )
|
250
|
+
# FakeWeb.register_uri(:get,
|
251
|
+
# "http://api.wunderground.com/auto/wui/geo/ForecastXML/index.xml?query=#{CGI.escape(@query.preferred)}",
|
252
|
+
# :string => File.read(File.join(File.dirname(__FILE__),
|
253
|
+
# 'fixtures',
|
254
|
+
# 'forecast_calgary_ab.xml')
|
255
|
+
# )
|
256
|
+
# )
|
257
|
+
# end
|
258
|
+
#
|
259
|
+
# # TODO: complete this
|
260
|
+
# it "should correctly build the data" do
|
261
|
+
# result = Barometer::Wunderground._measure(@measurement, @query)
|
262
|
+
#
|
263
|
+
# # build timezone
|
264
|
+
# @measurement.timezone.timezone.should == "America/Edmonton"
|
265
|
+
#
|
266
|
+
# time = Time.local(2009, 4, 23, 18, 00, 0)
|
267
|
+
# rise = Time.local(time.year, time.month, time.day, 6, 23)
|
268
|
+
# set = Time.local(time.year, time.month, time.day, 20, 45)
|
269
|
+
# sun_rise = @measurement.timezone.tz.local_to_utc(rise)
|
270
|
+
# sun_set = @measurement.timezone.tz.local_to_utc(set)
|
271
|
+
#
|
272
|
+
# # build current
|
273
|
+
# @measurement.current.sun.rise.should == sun_rise
|
274
|
+
# @measurement.current.sun.set.should == sun_set
|
275
|
+
# end
|
276
|
+
#
|
277
|
+
# end
|
278
|
+
|
144
279
|
end
|
data/spec/weather_spec.rb
CHANGED
@@ -94,6 +94,18 @@ describe "Weather" do
|
|
94
94
|
@weather.measurements << @google
|
95
95
|
end
|
96
96
|
|
97
|
+
it "doesn't include nil values" do
|
98
|
+
@weather.source(:wunderground).current.temperature = Barometer::Temperature.new
|
99
|
+
@weather.source(:wunderground).current.temperature.c = 10
|
100
|
+
|
101
|
+
@weather.temperature.c.should == 10
|
102
|
+
|
103
|
+
@weather.source(:yahoo).current.temperature = Barometer::Temperature.new
|
104
|
+
@weather.source(:yahoo).current.temperature.c = nil
|
105
|
+
|
106
|
+
@weather.temperature.c.should == 10
|
107
|
+
end
|
108
|
+
|
97
109
|
describe "for temperature" do
|
98
110
|
|
99
111
|
before(:each) do
|