barometer 0.5.0 → 0.6.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/README.rdoc +51 -9
- data/VERSION.yml +2 -2
- data/bin/barometer +57 -7
- data/lib/barometer.rb +11 -0
- data/lib/barometer/base.rb +3 -0
- data/lib/barometer/data.rb +11 -6
- data/lib/barometer/data/sun.rb +10 -0
- data/lib/barometer/data/zone.rb +79 -188
- data/lib/barometer/formats/coordinates.rb +4 -1
- data/lib/barometer/formats/geocode.rb +9 -7
- data/lib/barometer/formats/icao.rb +2 -2
- data/lib/barometer/formats/weather_id.rb +2 -2
- data/lib/barometer/measurements/common.rb +113 -0
- data/lib/barometer/{data → measurements}/current.rb +17 -42
- data/lib/barometer/measurements/forecast.rb +62 -0
- data/lib/barometer/measurements/forecast_array.rb +72 -0
- data/lib/barometer/{data → measurements}/measurement.rb +57 -45
- data/lib/barometer/measurements/night.rb +27 -0
- data/lib/barometer/query.rb +55 -5
- data/lib/barometer/services.rb +3 -1
- data/lib/barometer/translations/icao_country_codes.yml +274 -1
- data/lib/barometer/translations/weather_country_codes.yml +189 -6
- data/lib/barometer/translations/zone_codes.yml +360 -0
- data/lib/barometer/weather.rb +5 -4
- data/lib/barometer/weather_services/google.rb +19 -35
- data/lib/barometer/weather_services/service.rb +113 -255
- data/lib/barometer/weather_services/weather_bug.rb +291 -2
- data/lib/barometer/weather_services/weather_dot_com.rb +45 -54
- data/lib/barometer/weather_services/wunderground.rb +83 -89
- data/lib/barometer/weather_services/yahoo.rb +44 -91
- data/lib/barometer/web_services/geocode.rb +1 -0
- data/lib/barometer/web_services/timezone.rb +40 -0
- data/lib/barometer/web_services/weather_id.rb +17 -2
- data/lib/demometer/demometer.rb +28 -0
- data/lib/demometer/public/css/master.css +259 -1
- data/lib/demometer/public/css/print.css +94 -0
- data/lib/demometer/public/css/syntax.css +64 -0
- data/lib/demometer/public/images/link-out.gif +0 -0
- data/lib/demometer/views/about.erb +10 -0
- data/lib/demometer/views/index.erb +2 -0
- data/lib/demometer/views/layout.erb +3 -2
- data/lib/demometer/views/measurement.erb +4 -1
- data/lib/demometer/views/readme.erb +116 -88
- data/spec/data/sun_spec.rb +53 -0
- data/spec/data/zone_spec.rb +330 -100
- data/spec/fixtures/formats/weather_id/ksfo.xml +1 -0
- data/spec/fixtures/services/weather_bug/90210_current.xml +1 -0
- data/spec/fixtures/services/weather_bug/90210_forecast.xml +1 -0
- data/spec/formats/weather_id_spec.rb +10 -5
- data/spec/measurements/common_spec.rb +352 -0
- data/spec/{data → measurements}/current_spec.rb +40 -103
- data/spec/measurements/forecast_array_spec.rb +165 -0
- data/spec/measurements/forecast_spec.rb +135 -0
- data/spec/{data → measurements}/measurement_spec.rb +86 -107
- data/spec/measurements/night_measurement_spec.rb +49 -0
- data/spec/query_spec.rb +12 -2
- data/spec/spec_helper.rb +28 -1
- data/spec/weather_services/google_spec.rb +27 -117
- data/spec/weather_services/services_spec.rb +49 -1024
- data/spec/weather_services/weather_bug_spec.rb +274 -0
- data/spec/weather_services/weather_dot_com_spec.rb +45 -125
- data/spec/weather_services/wunderground_spec.rb +42 -136
- data/spec/weather_services/yahoo_spec.rb +26 -116
- data/spec/weather_spec.rb +45 -45
- metadata +27 -11
- data/lib/barometer/data/forecast.rb +0 -84
- data/lib/barometer/data/night.rb +0 -69
- data/lib/barometer/extensions/graticule.rb +0 -51
- data/spec/data/forecast_spec.rb +0 -192
- data/spec/data/night_measurement_spec.rb +0 -136
@@ -11,15 +11,19 @@ describe "Wunderground" do
|
|
11
11
|
describe "the class methods" do
|
12
12
|
|
13
13
|
it "defines accepted_formats" do
|
14
|
-
WeatherService::Wunderground.
|
14
|
+
WeatherService::Wunderground._accepted_formats.should == @accepted_formats
|
15
15
|
end
|
16
16
|
|
17
|
-
it "defines
|
18
|
-
WeatherService::Wunderground.
|
17
|
+
it "defines source_name" do
|
18
|
+
WeatherService::Wunderground._source_name.should == :wunderground
|
19
19
|
end
|
20
20
|
|
21
|
-
it "defines
|
22
|
-
WeatherService::Wunderground.respond_to?("
|
21
|
+
it "defines fetch_current" do
|
22
|
+
WeatherService::Wunderground.respond_to?("_fetch_current").should be_true
|
23
|
+
end
|
24
|
+
|
25
|
+
it "defines fetch_forecast" do
|
26
|
+
WeatherService::Wunderground.respond_to?("_fetch_forecast").should be_true
|
23
27
|
end
|
24
28
|
|
25
29
|
end
|
@@ -27,18 +31,18 @@ describe "Wunderground" do
|
|
27
31
|
describe "building the current data" do
|
28
32
|
|
29
33
|
it "defines the build method" do
|
30
|
-
WeatherService::Wunderground.respond_to?("
|
34
|
+
WeatherService::Wunderground.respond_to?("_build_current").should be_true
|
31
35
|
end
|
32
36
|
|
33
37
|
it "requires Hash input" do
|
34
|
-
lambda { WeatherService::Wunderground.
|
35
|
-
WeatherService::Wunderground.
|
36
|
-
lambda { WeatherService::Wunderground.
|
38
|
+
lambda { WeatherService::Wunderground._build_current }.should raise_error(ArgumentError)
|
39
|
+
WeatherService::Wunderground._build_current({})
|
40
|
+
lambda { WeatherService::Wunderground._build_current({}) }.should_not raise_error(ArgumentError)
|
37
41
|
end
|
38
42
|
|
39
43
|
it "returns Barometer::CurrentMeasurement object" do
|
40
|
-
current = WeatherService::Wunderground.
|
41
|
-
current.is_a?(
|
44
|
+
current = WeatherService::Wunderground._build_current({})
|
45
|
+
current.is_a?(Measurement::Current).should be_true
|
42
46
|
end
|
43
47
|
|
44
48
|
end
|
@@ -46,16 +50,16 @@ describe "Wunderground" do
|
|
46
50
|
describe "building the forecast data" do
|
47
51
|
|
48
52
|
it "defines the build method" do
|
49
|
-
WeatherService::Wunderground.respond_to?("
|
53
|
+
WeatherService::Wunderground.respond_to?("_build_forecast").should be_true
|
50
54
|
end
|
51
55
|
|
52
56
|
it "requires Hash input" do
|
53
|
-
lambda { WeatherService::Wunderground.
|
54
|
-
lambda { WeatherService::Wunderground.
|
57
|
+
lambda { WeatherService::Wunderground._build_forecast }.should raise_error(ArgumentError)
|
58
|
+
lambda { WeatherService::Wunderground._build_forecast({}) }.should_not raise_error(ArgumentError)
|
55
59
|
end
|
56
60
|
|
57
61
|
it "returns Array object" do
|
58
|
-
current = WeatherService::Wunderground.
|
62
|
+
current = WeatherService::Wunderground._build_forecast({})
|
59
63
|
current.is_a?(Array).should be_true
|
60
64
|
end
|
61
65
|
|
@@ -64,16 +68,16 @@ describe "Wunderground" do
|
|
64
68
|
describe "building the station data" do
|
65
69
|
|
66
70
|
it "defines the build method" do
|
67
|
-
WeatherService::Wunderground.respond_to?("
|
71
|
+
WeatherService::Wunderground.respond_to?("_build_station").should be_true
|
68
72
|
end
|
69
73
|
|
70
74
|
it "requires Hash input" do
|
71
|
-
lambda { WeatherService::Wunderground.
|
72
|
-
lambda { WeatherService::Wunderground.
|
75
|
+
lambda { WeatherService::Wunderground._build_station }.should raise_error(ArgumentError)
|
76
|
+
lambda { WeatherService::Wunderground._build_station({}) }.should_not raise_error(ArgumentError)
|
73
77
|
end
|
74
78
|
|
75
79
|
it "returns Barometer::Location object" do
|
76
|
-
station = WeatherService::Wunderground.
|
80
|
+
station = WeatherService::Wunderground._build_station({})
|
77
81
|
station.is_a?(Data::Location).should be_true
|
78
82
|
end
|
79
83
|
|
@@ -82,16 +86,16 @@ describe "Wunderground" do
|
|
82
86
|
describe "building the location data" do
|
83
87
|
|
84
88
|
it "defines the build method" do
|
85
|
-
WeatherService::Wunderground.respond_to?("
|
89
|
+
WeatherService::Wunderground.respond_to?("_build_location").should be_true
|
86
90
|
end
|
87
91
|
|
88
92
|
it "requires Hash input" do
|
89
|
-
lambda { WeatherService::Wunderground.
|
90
|
-
lambda { WeatherService::Wunderground.
|
93
|
+
lambda { WeatherService::Wunderground._build_location }.should raise_error(ArgumentError)
|
94
|
+
lambda { WeatherService::Wunderground._build_location({}) }.should_not raise_error(ArgumentError)
|
91
95
|
end
|
92
96
|
|
93
97
|
it "returns Barometer::Location object" do
|
94
|
-
location = WeatherService::Wunderground.
|
98
|
+
location = WeatherService::Wunderground._build_location({})
|
95
99
|
location.is_a?(Data::Location).should be_true
|
96
100
|
end
|
97
101
|
|
@@ -100,39 +104,34 @@ describe "Wunderground" do
|
|
100
104
|
describe "building the timezone" do
|
101
105
|
|
102
106
|
it "defines the build method" do
|
103
|
-
WeatherService::Wunderground.respond_to?("
|
107
|
+
WeatherService::Wunderground.respond_to?("_parse_full_timezone").should be_true
|
104
108
|
end
|
105
109
|
|
106
110
|
it "requires Hash input" do
|
107
|
-
lambda { WeatherService::Wunderground.
|
108
|
-
lambda { WeatherService::Wunderground.
|
111
|
+
lambda { WeatherService::Wunderground._parse_full_timezone }.should raise_error(ArgumentError)
|
112
|
+
lambda { WeatherService::Wunderground._parse_full_timezone({}) }.should_not raise_error(ArgumentError)
|
109
113
|
end
|
110
114
|
|
111
115
|
end
|
112
116
|
|
113
117
|
describe "building the sun data" do
|
114
118
|
|
115
|
-
before(:each) do
|
116
|
-
@zone = Data::Zone.new("Europe/Paris")
|
117
|
-
end
|
118
|
-
|
119
119
|
it "defines the build method" do
|
120
|
-
WeatherService::Wunderground.respond_to?("
|
120
|
+
WeatherService::Wunderground.respond_to?("_build_sun").should be_true
|
121
121
|
end
|
122
122
|
|
123
123
|
it "requires Hash input" do
|
124
|
-
lambda { WeatherService::Wunderground.
|
125
|
-
lambda { WeatherService::Wunderground.
|
124
|
+
lambda { WeatherService::Wunderground._build_sun }.should raise_error(ArgumentError)
|
125
|
+
lambda { WeatherService::Wunderground._build_sun({}) }.should_not raise_error(ArgumentError)
|
126
126
|
end
|
127
127
|
|
128
128
|
it "requires Barometer::Zone input" do
|
129
|
-
lambda { WeatherService::Wunderground.
|
130
|
-
lambda { WeatherService::Wunderground.
|
131
|
-
lambda { WeatherService::Wunderground.build_sun({},@zone) }.should_not raise_error(ArgumentError)
|
129
|
+
lambda { WeatherService::Wunderground._build_sun({}, "invalid") }.should raise_error(ArgumentError)
|
130
|
+
lambda { WeatherService::Wunderground._build_sun({}) }.should_not raise_error(ArgumentError)
|
132
131
|
end
|
133
132
|
|
134
133
|
it "returns Barometer::Sun object" do
|
135
|
-
sun = WeatherService::Wunderground.
|
134
|
+
sun = WeatherService::Wunderground._build_sun({})
|
136
135
|
sun.is_a?(Data::Sun).should be_true
|
137
136
|
end
|
138
137
|
|
@@ -142,7 +141,7 @@ describe "Wunderground" do
|
|
142
141
|
|
143
142
|
before(:each) do
|
144
143
|
@query = Barometer::Query.new("Calgary,AB")
|
145
|
-
@measurement =
|
144
|
+
@measurement = Barometer::Measurement.new
|
146
145
|
|
147
146
|
FakeWeb.register_uri(:get,
|
148
147
|
"http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=#{CGI.escape(@query.q)}",
|
@@ -182,114 +181,20 @@ describe "Wunderground" do
|
|
182
181
|
|
183
182
|
it "returns a Barometer::Measurement object" do
|
184
183
|
result = WeatherService::Wunderground._measure(@measurement, @query)
|
185
|
-
result.is_a?(
|
186
|
-
result.current.is_a?(
|
184
|
+
result.is_a?(Barometer::Measurement).should be_true
|
185
|
+
result.current.is_a?(Measurement::Current).should be_true
|
187
186
|
result.forecast.is_a?(Array).should be_true
|
188
|
-
|
189
|
-
result.source.should == :wunderground
|
190
|
-
end
|
191
|
-
|
192
|
-
end
|
193
|
-
|
194
|
-
end
|
195
|
-
|
196
|
-
describe "when answering the simple questions," do
|
197
|
-
|
198
|
-
before(:each) do
|
199
|
-
@measurement = Data::Measurement.new
|
200
|
-
end
|
201
|
-
|
202
|
-
describe "currently_wet_by_icon?" do
|
203
|
-
|
204
|
-
before(:each) do
|
205
|
-
@measurement.current = Data::CurrentMeasurement.new
|
206
|
-
end
|
207
|
-
|
208
|
-
it "returns true if matching icon code" do
|
209
|
-
@measurement.current.icon = "rain"
|
210
|
-
@measurement.current.icon?.should be_true
|
211
|
-
WeatherService::Wunderground.currently_wet_by_icon?(@measurement.current).should be_true
|
212
|
-
end
|
213
|
-
|
214
|
-
it "returns false if NO matching icon code" do
|
215
|
-
@measurement.current.icon = "sunny"
|
216
|
-
@measurement.current.icon?.should be_true
|
217
|
-
WeatherService::Wunderground.currently_wet_by_icon?(@measurement.current).should be_false
|
218
|
-
end
|
219
|
-
|
220
|
-
end
|
221
|
-
|
222
|
-
describe "forecasted_wet_by_icon?" do
|
223
|
-
|
224
|
-
before(:each) do
|
225
|
-
@measurement.forecast = [Data::ForecastMeasurement.new]
|
226
|
-
@measurement.forecast.first.date = Date.today
|
227
|
-
@measurement.forecast.size.should == 1
|
228
|
-
end
|
229
|
-
|
230
|
-
it "returns true if matching icon code" do
|
231
|
-
@measurement.forecast.first.icon = "rain"
|
232
|
-
@measurement.forecast.first.icon?.should be_true
|
233
|
-
WeatherService::Wunderground.forecasted_wet_by_icon?(@measurement.forecast.first).should be_true
|
234
|
-
end
|
235
|
-
|
236
|
-
it "returns false if NO matching icon code" do
|
237
|
-
@measurement.forecast.first.icon = "sunny"
|
238
|
-
@measurement.forecast.first.icon?.should be_true
|
239
|
-
WeatherService::Wunderground.forecasted_wet_by_icon?(@measurement.forecast.first).should be_false
|
240
|
-
end
|
241
|
-
|
242
|
-
end
|
243
|
-
|
244
|
-
describe "currently_sunny_by_icon?" do
|
245
|
-
|
246
|
-
before(:each) do
|
247
|
-
@measurement.current = Data::CurrentMeasurement.new
|
248
|
-
end
|
249
|
-
|
250
|
-
it "returns true if matching icon code" do
|
251
|
-
@measurement.current.icon = "sunny"
|
252
|
-
@measurement.current.icon?.should be_true
|
253
|
-
WeatherService::Wunderground.currently_sunny_by_icon?(@measurement.current).should be_true
|
254
|
-
end
|
255
|
-
|
256
|
-
it "returns false if NO matching icon code" do
|
257
|
-
@measurement.current.icon = "rain"
|
258
|
-
@measurement.current.icon?.should be_true
|
259
|
-
WeatherService::Wunderground.currently_sunny_by_icon?(@measurement.current).should be_false
|
260
187
|
end
|
261
188
|
|
262
189
|
end
|
263
|
-
|
264
|
-
describe "forecasted_sunny_by_icon?" do
|
265
|
-
|
266
|
-
before(:each) do
|
267
|
-
@measurement.forecast = [Data::ForecastMeasurement.new]
|
268
|
-
@measurement.forecast.first.date = Date.today
|
269
|
-
@measurement.forecast.size.should == 1
|
270
|
-
end
|
271
190
|
|
272
|
-
it "returns true if matching icon code" do
|
273
|
-
@measurement.forecast.first.icon = "sunny"
|
274
|
-
@measurement.forecast.first.icon?.should be_true
|
275
|
-
WeatherService::Wunderground.forecasted_sunny_by_icon?(@measurement.forecast.first).should be_true
|
276
|
-
end
|
277
|
-
|
278
|
-
it "returns false if NO matching icon code" do
|
279
|
-
@measurement.forecast.first.icon = "rain"
|
280
|
-
@measurement.forecast.first.icon?.should be_true
|
281
|
-
WeatherService::Wunderground.forecasted_sunny_by_icon?(@measurement.forecast.first).should be_false
|
282
|
-
end
|
283
|
-
|
284
|
-
end
|
285
|
-
|
286
191
|
end
|
287
192
|
|
288
193
|
describe "overall data correctness" do
|
289
194
|
|
290
195
|
before(:each) do
|
291
196
|
@query = Barometer::Query.new("Calgary,AB")
|
292
|
-
@measurement =
|
197
|
+
@measurement = Barometer::Measurement.new
|
293
198
|
|
294
199
|
FakeWeb.register_uri(:get,
|
295
200
|
"http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=#{CGI.escape(@query.q)}",
|
@@ -312,7 +217,8 @@ describe "Wunderground" do
|
|
312
217
|
result = WeatherService::Wunderground._measure(@measurement, @query)
|
313
218
|
|
314
219
|
# build timezone
|
315
|
-
@measurement.timezone.
|
220
|
+
@measurement.timezone.zone_full.should == "America/Edmonton"
|
221
|
+
@measurement.timezone.current.should == "America/Edmonton"
|
316
222
|
|
317
223
|
# time = Time.local(2009, 4, 23, 18, 00, 0)
|
318
224
|
# rise = Time.local(time.year, time.month, time.day, 6, 23)
|
@@ -11,11 +11,15 @@ describe "Yahoo" do
|
|
11
11
|
describe "the class methods" do
|
12
12
|
|
13
13
|
it "defines accepted_formats" do
|
14
|
-
WeatherService::Yahoo.
|
14
|
+
WeatherService::Yahoo._accepted_formats.should == @accepted_formats
|
15
|
+
end
|
16
|
+
|
17
|
+
it "defines source_name" do
|
18
|
+
WeatherService::Yahoo._source_name.should == :yahoo
|
15
19
|
end
|
16
20
|
|
17
21
|
it "defines get_all" do
|
18
|
-
WeatherService::Yahoo.respond_to?("
|
22
|
+
WeatherService::Yahoo.respond_to?("_fetch").should be_true
|
19
23
|
end
|
20
24
|
|
21
25
|
end
|
@@ -23,17 +27,17 @@ describe "Yahoo" do
|
|
23
27
|
describe "building the current data" do
|
24
28
|
|
25
29
|
it "defines the build method" do
|
26
|
-
WeatherService::Yahoo.respond_to?("
|
30
|
+
WeatherService::Yahoo.respond_to?("_build_current").should be_true
|
27
31
|
end
|
28
32
|
|
29
33
|
it "requires Hash input" do
|
30
|
-
lambda { WeatherService::Yahoo.
|
31
|
-
lambda { WeatherService::Yahoo.
|
34
|
+
lambda { WeatherService::Yahoo._build_current }.should raise_error(ArgumentError)
|
35
|
+
lambda { WeatherService::Yahoo._build_current({}) }.should_not raise_error(ArgumentError)
|
32
36
|
end
|
33
37
|
|
34
38
|
it "returns Barometer::CurrentMeasurement object" do
|
35
|
-
current = WeatherService::Yahoo.
|
36
|
-
current.is_a?(
|
39
|
+
current = WeatherService::Yahoo._build_current({})
|
40
|
+
current.is_a?(Measurement::Current).should be_true
|
37
41
|
end
|
38
42
|
|
39
43
|
end
|
@@ -41,16 +45,16 @@ describe "Yahoo" do
|
|
41
45
|
describe "building the forecast data" do
|
42
46
|
|
43
47
|
it "defines the build method" do
|
44
|
-
WeatherService::Yahoo.respond_to?("
|
48
|
+
WeatherService::Yahoo.respond_to?("_build_forecast").should be_true
|
45
49
|
end
|
46
50
|
|
47
51
|
it "requires Hash input" do
|
48
|
-
lambda { WeatherService::Yahoo.
|
49
|
-
lambda { WeatherService::Yahoo.
|
52
|
+
lambda { WeatherService::Yahoo._build_forecast }.should raise_error(ArgumentError)
|
53
|
+
lambda { WeatherService::Yahoo._build_forecast({}) }.should_not raise_error(ArgumentError)
|
50
54
|
end
|
51
55
|
|
52
56
|
it "returns Array object" do
|
53
|
-
current = WeatherService::Yahoo.
|
57
|
+
current = WeatherService::Yahoo._build_forecast({})
|
54
58
|
current.is_a?(Array).should be_true
|
55
59
|
end
|
56
60
|
|
@@ -59,22 +63,22 @@ describe "Yahoo" do
|
|
59
63
|
describe "building the location data" do
|
60
64
|
|
61
65
|
it "defines the build method" do
|
62
|
-
WeatherService::Yahoo.respond_to?("
|
66
|
+
WeatherService::Yahoo.respond_to?("_build_location").should be_true
|
63
67
|
end
|
64
68
|
|
65
69
|
it "requires Hash input" do
|
66
|
-
lambda { WeatherService::Yahoo.
|
67
|
-
lambda { WeatherService::Yahoo.
|
70
|
+
lambda { WeatherService::Yahoo._build_location }.should raise_error(ArgumentError)
|
71
|
+
lambda { WeatherService::Yahoo._build_location({}) }.should_not raise_error(ArgumentError)
|
68
72
|
end
|
69
73
|
|
70
74
|
it "requires Barometer::Geo input" do
|
71
75
|
geo = Data::Geo.new({})
|
72
|
-
lambda { WeatherService::Yahoo.
|
73
|
-
lambda { WeatherService::Yahoo.
|
76
|
+
lambda { WeatherService::Yahoo._build_location({}, {}) }.should raise_error(ArgumentError)
|
77
|
+
lambda { WeatherService::Yahoo._build_location({}, geo) }.should_not raise_error(ArgumentError)
|
74
78
|
end
|
75
79
|
|
76
80
|
it "returns Barometer::Location object" do
|
77
|
-
location = WeatherService::Yahoo.
|
81
|
+
location = WeatherService::Yahoo._build_location({})
|
78
82
|
location.is_a?(Data::Location).should be_true
|
79
83
|
end
|
80
84
|
|
@@ -84,7 +88,7 @@ describe "Yahoo" do
|
|
84
88
|
|
85
89
|
before(:each) do
|
86
90
|
@query = Barometer::Query.new("90210")
|
87
|
-
@measurement =
|
91
|
+
@measurement = Barometer::Measurement.new
|
88
92
|
|
89
93
|
FakeWeb.register_uri(:get,
|
90
94
|
"http://weather.yahooapis.com:80/forecastrss?u=c&p=#{CGI.escape(@query.q)}",
|
@@ -111,120 +115,26 @@ describe "Yahoo" do
|
|
111
115
|
it "requires a Barometer::Query query" do
|
112
116
|
lambda { WeatherService::Yahoo._measure }.should raise_error(ArgumentError)
|
113
117
|
lambda { WeatherService::Yahoo._measure(@measurement, 1) }.should raise_error(ArgumentError)
|
114
|
-
|
118
|
+
|
115
119
|
lambda { WeatherService::Yahoo._measure(@measurement, @query) }.should_not raise_error(ArgumentError)
|
116
120
|
end
|
117
121
|
|
118
122
|
it "returns a Barometer::Measurement object" do
|
119
123
|
result = WeatherService::Yahoo._measure(@measurement, @query)
|
120
|
-
result.is_a?(
|
121
|
-
result.current.is_a?(
|
124
|
+
result.is_a?(Barometer::Measurement).should be_true
|
125
|
+
result.current.is_a?(Measurement::Current).should be_true
|
122
126
|
result.forecast.is_a?(Array).should be_true
|
123
|
-
|
124
|
-
result.source.should == :yahoo
|
125
127
|
end
|
126
128
|
|
127
129
|
end
|
128
130
|
|
129
131
|
end
|
130
132
|
|
131
|
-
describe "when answering the simple questions," do
|
132
|
-
|
133
|
-
before(:each) do
|
134
|
-
@measurement = Data::Measurement.new
|
135
|
-
end
|
136
|
-
|
137
|
-
describe "currently_wet_by_icon?" do
|
138
|
-
|
139
|
-
before(:each) do
|
140
|
-
@measurement.current = Data::CurrentMeasurement.new
|
141
|
-
end
|
142
|
-
|
143
|
-
it "returns true if matching icon code" do
|
144
|
-
@measurement.current.icon = "4"
|
145
|
-
@measurement.current.icon?.should be_true
|
146
|
-
WeatherService::Yahoo.currently_wet_by_icon?(@measurement.current).should be_true
|
147
|
-
end
|
148
|
-
|
149
|
-
it "returns false if NO matching icon code" do
|
150
|
-
@measurement.current.icon = "32"
|
151
|
-
@measurement.current.icon?.should be_true
|
152
|
-
WeatherService::Yahoo.currently_wet_by_icon?(@measurement.current).should be_false
|
153
|
-
end
|
154
|
-
|
155
|
-
end
|
156
|
-
|
157
|
-
describe "forecasted_wet_by_icon?" do
|
158
|
-
|
159
|
-
before(:each) do
|
160
|
-
@measurement.forecast = [Data::ForecastMeasurement.new]
|
161
|
-
@measurement.forecast.first.date = Date.today
|
162
|
-
@measurement.forecast.size.should == 1
|
163
|
-
end
|
164
|
-
|
165
|
-
it "returns true if matching icon code" do
|
166
|
-
@measurement.forecast.first.icon = "4"
|
167
|
-
@measurement.forecast.first.icon?.should be_true
|
168
|
-
WeatherService::Yahoo.forecasted_wet_by_icon?(@measurement.forecast.first).should be_true
|
169
|
-
end
|
170
|
-
|
171
|
-
it "returns false if NO matching icon code" do
|
172
|
-
@measurement.forecast.first.icon = "32"
|
173
|
-
@measurement.forecast.first.icon?.should be_true
|
174
|
-
WeatherService::Yahoo.forecasted_wet_by_icon?(@measurement.forecast.first).should be_false
|
175
|
-
end
|
176
|
-
|
177
|
-
end
|
178
|
-
|
179
|
-
describe "currently_sunny_by_icon?" do
|
180
|
-
|
181
|
-
before(:each) do
|
182
|
-
@measurement.current = Data::CurrentMeasurement.new
|
183
|
-
end
|
184
|
-
|
185
|
-
it "returns true if matching icon code" do
|
186
|
-
@measurement.current.icon = "32"
|
187
|
-
@measurement.current.icon?.should be_true
|
188
|
-
WeatherService::Yahoo.currently_sunny_by_icon?(@measurement.current).should be_true
|
189
|
-
end
|
190
|
-
|
191
|
-
it "returns false if NO matching icon code" do
|
192
|
-
@measurement.current.icon = "4"
|
193
|
-
@measurement.current.icon?.should be_true
|
194
|
-
WeatherService::Yahoo.currently_sunny_by_icon?(@measurement.current).should be_false
|
195
|
-
end
|
196
|
-
|
197
|
-
end
|
198
|
-
|
199
|
-
describe "forecasted_sunny_by_icon?" do
|
200
|
-
|
201
|
-
before(:each) do
|
202
|
-
@measurement.forecast = [Data::ForecastMeasurement.new]
|
203
|
-
@measurement.forecast.first.date = Date.today
|
204
|
-
@measurement.forecast.size.should == 1
|
205
|
-
end
|
206
|
-
|
207
|
-
it "returns true if matching icon code" do
|
208
|
-
@measurement.forecast.first.icon = "32"
|
209
|
-
@measurement.forecast.first.icon?.should be_true
|
210
|
-
WeatherService::Yahoo.forecasted_sunny_by_icon?(@measurement.forecast.first).should be_true
|
211
|
-
end
|
212
|
-
|
213
|
-
it "returns false if NO matching icon code" do
|
214
|
-
@measurement.forecast.first.icon = "4"
|
215
|
-
@measurement.forecast.first.icon?.should be_true
|
216
|
-
WeatherService::Yahoo.forecasted_sunny_by_icon?(@measurement.forecast.first).should be_false
|
217
|
-
end
|
218
|
-
|
219
|
-
end
|
220
|
-
|
221
|
-
end
|
222
|
-
|
223
133
|
describe "overall data correctness" do
|
224
134
|
|
225
135
|
before(:each) do
|
226
136
|
@query = Barometer::Query.new("90210")
|
227
|
-
@measurement =
|
137
|
+
@measurement = Barometer::Measurement.new
|
228
138
|
|
229
139
|
FakeWeb.register_uri(:get,
|
230
140
|
"http://weather.yahooapis.com:80/forecastrss?u=c&p=#{CGI.escape(@query.q)}",
|