barometer 0.3.2 → 0.5.0

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 (108) hide show
  1. data/README.rdoc +78 -70
  2. data/VERSION.yml +2 -2
  3. data/bin/barometer +100 -37
  4. data/lib/barometer.rb +12 -8
  5. data/lib/barometer/base.rb +48 -20
  6. data/lib/barometer/data.rb +5 -1
  7. data/lib/barometer/data/current.rb +23 -15
  8. data/lib/barometer/data/distance.rb +15 -5
  9. data/lib/barometer/data/forecast.rb +23 -5
  10. data/lib/barometer/data/geo.rb +16 -54
  11. data/lib/barometer/data/local_datetime.rb +137 -0
  12. data/lib/barometer/data/local_time.rb +134 -0
  13. data/lib/barometer/data/location.rb +6 -1
  14. data/lib/barometer/data/measurement.rb +71 -42
  15. data/lib/barometer/data/night.rb +69 -0
  16. data/lib/barometer/data/pressure.rb +15 -5
  17. data/lib/barometer/data/speed.rb +16 -5
  18. data/lib/barometer/data/sun.rb +8 -20
  19. data/lib/barometer/data/temperature.rb +22 -9
  20. data/lib/barometer/data/units.rb +10 -19
  21. data/lib/barometer/data/zone.rb +135 -9
  22. data/lib/barometer/formats.rb +12 -0
  23. data/lib/barometer/formats/coordinates.rb +42 -0
  24. data/lib/barometer/formats/format.rb +46 -0
  25. data/lib/barometer/formats/geocode.rb +51 -0
  26. data/lib/barometer/formats/icao.rb +37 -0
  27. data/lib/barometer/formats/postalcode.rb +22 -0
  28. data/lib/barometer/formats/short_zipcode.rb +17 -0
  29. data/lib/barometer/formats/weather_id.rb +107 -0
  30. data/lib/barometer/formats/zipcode.rb +31 -0
  31. data/lib/barometer/query.rb +61 -232
  32. data/lib/barometer/services.rb +14 -4
  33. data/lib/barometer/translations/icao_country_codes.yml +9 -0
  34. data/lib/barometer/translations/weather_country_codes.yml +17 -0
  35. data/lib/barometer/weather.rb +51 -30
  36. data/lib/barometer/{services → weather_services}/google.rb +23 -26
  37. data/lib/barometer/weather_services/noaa.rb +6 -0
  38. data/lib/barometer/{services → weather_services}/service.rb +101 -92
  39. data/lib/barometer/weather_services/weather_bug.rb +6 -0
  40. data/lib/barometer/weather_services/weather_dot_com.rb +261 -0
  41. data/lib/barometer/{services → weather_services}/wunderground.rb +58 -76
  42. data/lib/barometer/{services → weather_services}/yahoo.rb +91 -121
  43. data/lib/barometer/web_services/geocode.rb +33 -0
  44. data/lib/barometer/web_services/weather_id.rb +37 -0
  45. data/lib/barometer/web_services/web_service.rb +32 -0
  46. data/lib/demometer/demometer.rb +31 -4
  47. data/lib/demometer/views/forecast.erb +20 -0
  48. data/lib/demometer/views/index.erb +10 -3
  49. data/lib/demometer/views/measurement.erb +8 -3
  50. data/lib/demometer/views/readme.erb +63 -24
  51. data/spec/barometer_spec.rb +18 -36
  52. data/spec/{data_current_spec.rb → data/current_spec.rb} +73 -49
  53. data/spec/{data_distance_spec.rb → data/distance_spec.rb} +30 -30
  54. data/spec/{data_forecast_spec.rb → data/forecast_spec.rb} +57 -15
  55. data/spec/data/geo_spec.rb +91 -0
  56. data/spec/data/local_datetime_spec.rb +269 -0
  57. data/spec/data/local_time_spec.rb +239 -0
  58. data/spec/{data_location_spec.rb → data/location_spec.rb} +12 -1
  59. data/spec/{data_measurement_spec.rb → data/measurement_spec.rb} +135 -66
  60. data/spec/data/night_measurement_spec.rb +136 -0
  61. data/spec/{data_pressure_spec.rb → data/pressure_spec.rb} +29 -29
  62. data/spec/{data_speed_spec.rb → data/speed_spec.rb} +30 -30
  63. data/spec/data/sun_spec.rb +49 -0
  64. data/spec/{data_temperature_spec.rb → data/temperature_spec.rb} +44 -44
  65. data/spec/{units_spec.rb → data/units_spec.rb} +6 -6
  66. data/spec/{data_zone_spec.rb → data/zone_spec.rb} +15 -15
  67. data/spec/fixtures/formats/weather_id/90210.xml +1 -0
  68. data/spec/fixtures/formats/weather_id/atlanta.xml +1 -0
  69. data/spec/fixtures/formats/weather_id/from_USGA0028.xml +1 -0
  70. data/spec/fixtures/formats/weather_id/new_york.xml +1 -0
  71. data/spec/fixtures/{geocode_40_73.xml → geocode/40_73.xml} +0 -0
  72. data/spec/fixtures/{geocode_90210.xml → geocode/90210.xml} +0 -0
  73. data/spec/fixtures/{geocode_T5B4M9.xml → geocode/T5B4M9.xml} +0 -0
  74. data/spec/fixtures/geocode/atlanta.xml +1 -0
  75. data/spec/fixtures/{geocode_calgary_ab.xml → geocode/calgary_ab.xml} +0 -0
  76. data/spec/fixtures/{geocode_ksfo.xml → geocode/ksfo.xml} +0 -0
  77. data/spec/fixtures/{geocode_newyork_ny.xml → geocode/newyork_ny.xml} +0 -0
  78. data/spec/fixtures/{google_calgary_ab.xml → services/google/calgary_ab.xml} +0 -0
  79. data/spec/fixtures/services/weather_dot_com/90210.xml +1 -0
  80. data/spec/fixtures/{current_calgary_ab.xml → services/wunderground/current_calgary_ab.xml} +0 -0
  81. data/spec/fixtures/{forecast_calgary_ab.xml → services/wunderground/forecast_calgary_ab.xml} +0 -0
  82. data/spec/fixtures/{yahoo_90210.xml → services/yahoo/90210.xml} +0 -0
  83. data/spec/formats/coordinates_spec.rb +158 -0
  84. data/spec/formats/format_spec.rb +73 -0
  85. data/spec/formats/geocode_spec.rb +179 -0
  86. data/spec/formats/icao_spec.rb +61 -0
  87. data/spec/formats/postalcode_spec.rb +59 -0
  88. data/spec/formats/short_zipcode_spec.rb +53 -0
  89. data/spec/formats/weather_id_spec.rb +191 -0
  90. data/spec/formats/zipcode_spec.rb +111 -0
  91. data/spec/query_spec.rb +261 -288
  92. data/spec/spec_helper.rb +128 -4
  93. data/spec/{service_google_spec.rb → weather_services/google_spec.rb} +46 -46
  94. data/spec/weather_services/services_spec.rb +1118 -0
  95. data/spec/weather_services/weather_dot_com_spec.rb +327 -0
  96. data/spec/weather_services/wunderground_spec.rb +332 -0
  97. data/spec/{service_yahoo_spec.rb → weather_services/yahoo_spec.rb} +65 -81
  98. data/spec/weather_spec.rb +73 -61
  99. data/spec/web_services/geocode_spec.rb +45 -0
  100. data/spec/web_services/web_services_spec.rb +26 -0
  101. metadata +88 -36
  102. data/lib/barometer/services/noaa.rb +0 -6
  103. data/lib/barometer/services/weather_bug.rb +0 -6
  104. data/lib/barometer/services/weather_dot_com.rb +0 -6
  105. data/spec/data_geo_spec.rb +0 -94
  106. data/spec/data_sun_spec.rb +0 -76
  107. data/spec/service_wunderground_spec.rb +0 -330
  108. data/spec/services_spec.rb +0 -1106
@@ -1,24 +1,21 @@
1
1
  require 'spec_helper'
2
+ include Barometer
2
3
 
3
4
  describe "Yahoo" do
4
5
 
5
6
  before(:each) do
6
- @accepted_formats = [:zipcode]
7
+ @accepted_formats = [:zipcode, :weather_id]
7
8
  #@base_uri = "http://google.com"
8
9
  end
9
10
 
10
11
  describe "the class methods" do
11
12
 
12
13
  it "defines accepted_formats" do
13
- Barometer::Yahoo.accepted_formats.should == @accepted_formats
14
+ WeatherService::Yahoo.accepted_formats.should == @accepted_formats
14
15
  end
15
16
 
16
- # it "defines base_uri" do
17
- # Barometer::Google.base_uri.should == @base_uri
18
- # end
19
-
20
17
  it "defines get_all" do
21
- Barometer::Yahoo.respond_to?("get_all").should be_true
18
+ WeatherService::Yahoo.respond_to?("fetch").should be_true
22
19
  end
23
20
 
24
21
  end
@@ -26,17 +23,17 @@ describe "Yahoo" do
26
23
  describe "building the current data" do
27
24
 
28
25
  it "defines the build method" do
29
- Barometer::Yahoo.respond_to?("build_current").should be_true
26
+ WeatherService::Yahoo.respond_to?("build_current").should be_true
30
27
  end
31
28
 
32
29
  it "requires Hash input" do
33
- lambda { Barometer::Yahoo.build_current }.should raise_error(ArgumentError)
34
- lambda { Barometer::Yahoo.build_current({}) }.should_not raise_error(ArgumentError)
30
+ lambda { WeatherService::Yahoo.build_current }.should raise_error(ArgumentError)
31
+ lambda { WeatherService::Yahoo.build_current({}) }.should_not raise_error(ArgumentError)
35
32
  end
36
33
 
37
34
  it "returns Barometer::CurrentMeasurement object" do
38
- current = Barometer::Yahoo.build_current({})
39
- current.is_a?(Barometer::CurrentMeasurement).should be_true
35
+ current = WeatherService::Yahoo.build_current({})
36
+ current.is_a?(Data::CurrentMeasurement).should be_true
40
37
  end
41
38
 
42
39
  end
@@ -44,16 +41,16 @@ describe "Yahoo" do
44
41
  describe "building the forecast data" do
45
42
 
46
43
  it "defines the build method" do
47
- Barometer::Yahoo.respond_to?("build_forecast").should be_true
44
+ WeatherService::Yahoo.respond_to?("build_forecast").should be_true
48
45
  end
49
46
 
50
47
  it "requires Hash input" do
51
- lambda { Barometer::Yahoo.build_forecast }.should raise_error(ArgumentError)
52
- lambda { Barometer::Yahoo.build_forecast({}) }.should_not raise_error(ArgumentError)
48
+ lambda { WeatherService::Yahoo.build_forecast }.should raise_error(ArgumentError)
49
+ lambda { WeatherService::Yahoo.build_forecast({}) }.should_not raise_error(ArgumentError)
53
50
  end
54
51
 
55
52
  it "returns Array object" do
56
- current = Barometer::Yahoo.build_forecast({})
53
+ current = WeatherService::Yahoo.build_forecast({})
57
54
  current.is_a?(Array).should be_true
58
55
  end
59
56
 
@@ -62,52 +59,38 @@ describe "Yahoo" do
62
59
  describe "building the location data" do
63
60
 
64
61
  it "defines the build method" do
65
- Barometer::Yahoo.respond_to?("build_location").should be_true
62
+ WeatherService::Yahoo.respond_to?("build_location").should be_true
66
63
  end
67
64
 
68
65
  it "requires Hash input" do
69
- lambda { Barometer::Yahoo.build_location }.should raise_error(ArgumentError)
70
- lambda { Barometer::Yahoo.build_location({}) }.should_not raise_error(ArgumentError)
66
+ lambda { WeatherService::Yahoo.build_location }.should raise_error(ArgumentError)
67
+ lambda { WeatherService::Yahoo.build_location({}) }.should_not raise_error(ArgumentError)
71
68
  end
72
69
 
73
70
  it "requires Barometer::Geo input" do
74
- geo = Barometer::Geo.new({})
75
- lambda { Barometer::Yahoo.build_location({}, {}) }.should raise_error(ArgumentError)
76
- lambda { Barometer::Yahoo.build_location({}, geo) }.should_not raise_error(ArgumentError)
71
+ geo = Data::Geo.new({})
72
+ lambda { WeatherService::Yahoo.build_location({}, {}) }.should raise_error(ArgumentError)
73
+ lambda { WeatherService::Yahoo.build_location({}, geo) }.should_not raise_error(ArgumentError)
77
74
  end
78
75
 
79
76
  it "returns Barometer::Location object" do
80
- location = Barometer::Yahoo.build_location({})
81
- location.is_a?(Barometer::Location).should be_true
77
+ location = WeatherService::Yahoo.build_location({})
78
+ location.is_a?(Data::Location).should be_true
82
79
  end
83
80
 
84
81
  end
85
82
 
86
- # describe "building the timezone" do
87
- #
88
- # it "defines the build method" do
89
- # Barometer::Yahoo.respond_to?("build_timezone").should be_true
90
- # end
91
- #
92
- # it "requires Hash input" do
93
- # lambda { Barometer::Yahoo.build_timezone }.should raise_error(ArgumentError)
94
- # lambda { Barometer::Yahoo.build_timezone({}) }.should_not raise_error(ArgumentError)
95
- # end
96
- #
97
- # end
98
-
99
83
  describe "when measuring" do
100
84
 
101
85
  before(:each) do
102
86
  @query = Barometer::Query.new("90210")
103
- @query.preferred = "90210"
104
- @measurement = Barometer::Measurement.new
87
+ @measurement = Data::Measurement.new
105
88
 
106
89
  FakeWeb.register_uri(:get,
107
- "http://weather.yahooapis.com:80/forecastrss?u=c&p=#{CGI.escape(@query.preferred)}",
108
- :string => File.read(File.join(File.dirname(__FILE__),
109
- 'fixtures',
110
- 'yahoo_90210.xml')
90
+ "http://weather.yahooapis.com:80/forecastrss?u=c&p=#{CGI.escape(@query.q)}",
91
+ :string => File.read(File.join(File.dirname(__FILE__),
92
+ '../fixtures/services/yahoo',
93
+ '90210.xml')
111
94
  )
112
95
  )
113
96
  end
@@ -115,27 +98,27 @@ describe "Yahoo" do
115
98
  describe "all" do
116
99
 
117
100
  it "responds to _measure" do
118
- Barometer::Yahoo.respond_to?("_measure").should be_true
101
+ WeatherService::Yahoo.respond_to?("_measure").should be_true
119
102
  end
120
103
 
121
104
  it "requires a Barometer::Measurement object" do
122
- lambda { Barometer::Yahoo._measure(nil, @query) }.should raise_error(ArgumentError)
123
- lambda { Barometer::Yahoo._measure("invlaid", @query) }.should raise_error(ArgumentError)
124
-
125
- lambda { Barometer::Yahoo._measure(@measurement, @query) }.should_not raise_error(ArgumentError)
105
+ lambda { WeatherService::Yahoo._measure(nil, @query) }.should raise_error(ArgumentError)
106
+ lambda { WeatherService::Yahoo._measure("invlaid", @query) }.should raise_error(ArgumentError)
107
+
108
+ lambda { WeatherService::Yahoo._measure(@measurement, @query) }.should_not raise_error(ArgumentError)
126
109
  end
127
110
 
128
111
  it "requires a Barometer::Query query" do
129
- lambda { Barometer::Yahoo._measure }.should raise_error(ArgumentError)
130
- lambda { Barometer::Yahoo._measure(@measurement, 1) }.should raise_error(ArgumentError)
112
+ lambda { WeatherService::Yahoo._measure }.should raise_error(ArgumentError)
113
+ lambda { WeatherService::Yahoo._measure(@measurement, 1) }.should raise_error(ArgumentError)
131
114
 
132
- lambda { Barometer::Yahoo._measure(@measurement, @query) }.should_not raise_error(ArgumentError)
115
+ lambda { WeatherService::Yahoo._measure(@measurement, @query) }.should_not raise_error(ArgumentError)
133
116
  end
134
117
 
135
118
  it "returns a Barometer::Measurement object" do
136
- result = Barometer::Yahoo._measure(@measurement, @query)
137
- result.is_a?(Barometer::Measurement).should be_true
138
- result.current.is_a?(Barometer::CurrentMeasurement).should be_true
119
+ result = WeatherService::Yahoo._measure(@measurement, @query)
120
+ result.is_a?(Data::Measurement).should be_true
121
+ result.current.is_a?(Data::CurrentMeasurement).should be_true
139
122
  result.forecast.is_a?(Array).should be_true
140
123
 
141
124
  result.source.should == :yahoo
@@ -148,25 +131,25 @@ describe "Yahoo" do
148
131
  describe "when answering the simple questions," do
149
132
 
150
133
  before(:each) do
151
- @measurement = Barometer::Measurement.new
134
+ @measurement = Data::Measurement.new
152
135
  end
153
136
 
154
137
  describe "currently_wet_by_icon?" do
155
138
 
156
139
  before(:each) do
157
- @measurement.current = Barometer::CurrentMeasurement.new
140
+ @measurement.current = Data::CurrentMeasurement.new
158
141
  end
159
142
 
160
143
  it "returns true if matching icon code" do
161
144
  @measurement.current.icon = "4"
162
145
  @measurement.current.icon?.should be_true
163
- Barometer::Yahoo.currently_wet_by_icon?(@measurement.current).should be_true
146
+ WeatherService::Yahoo.currently_wet_by_icon?(@measurement.current).should be_true
164
147
  end
165
148
 
166
149
  it "returns false if NO matching icon code" do
167
150
  @measurement.current.icon = "32"
168
151
  @measurement.current.icon?.should be_true
169
- Barometer::Yahoo.currently_wet_by_icon?(@measurement.current).should be_false
152
+ WeatherService::Yahoo.currently_wet_by_icon?(@measurement.current).should be_false
170
153
  end
171
154
 
172
155
  end
@@ -174,7 +157,7 @@ describe "Yahoo" do
174
157
  describe "forecasted_wet_by_icon?" do
175
158
 
176
159
  before(:each) do
177
- @measurement.forecast = [Barometer::ForecastMeasurement.new]
160
+ @measurement.forecast = [Data::ForecastMeasurement.new]
178
161
  @measurement.forecast.first.date = Date.today
179
162
  @measurement.forecast.size.should == 1
180
163
  end
@@ -182,13 +165,13 @@ describe "Yahoo" do
182
165
  it "returns true if matching icon code" do
183
166
  @measurement.forecast.first.icon = "4"
184
167
  @measurement.forecast.first.icon?.should be_true
185
- Barometer::Yahoo.forecasted_wet_by_icon?(@measurement.forecast.first).should be_true
168
+ WeatherService::Yahoo.forecasted_wet_by_icon?(@measurement.forecast.first).should be_true
186
169
  end
187
170
 
188
171
  it "returns false if NO matching icon code" do
189
172
  @measurement.forecast.first.icon = "32"
190
173
  @measurement.forecast.first.icon?.should be_true
191
- Barometer::Yahoo.forecasted_wet_by_icon?(@measurement.forecast.first).should be_false
174
+ WeatherService::Yahoo.forecasted_wet_by_icon?(@measurement.forecast.first).should be_false
192
175
  end
193
176
 
194
177
  end
@@ -196,19 +179,19 @@ describe "Yahoo" do
196
179
  describe "currently_sunny_by_icon?" do
197
180
 
198
181
  before(:each) do
199
- @measurement.current = Barometer::CurrentMeasurement.new
182
+ @measurement.current = Data::CurrentMeasurement.new
200
183
  end
201
184
 
202
185
  it "returns true if matching icon code" do
203
186
  @measurement.current.icon = "32"
204
187
  @measurement.current.icon?.should be_true
205
- Barometer::Yahoo.currently_sunny_by_icon?(@measurement.current).should be_true
188
+ WeatherService::Yahoo.currently_sunny_by_icon?(@measurement.current).should be_true
206
189
  end
207
190
 
208
191
  it "returns false if NO matching icon code" do
209
192
  @measurement.current.icon = "4"
210
193
  @measurement.current.icon?.should be_true
211
- Barometer::Yahoo.currently_sunny_by_icon?(@measurement.current).should be_false
194
+ WeatherService::Yahoo.currently_sunny_by_icon?(@measurement.current).should be_false
212
195
  end
213
196
 
214
197
  end
@@ -216,7 +199,7 @@ describe "Yahoo" do
216
199
  describe "forecasted_sunny_by_icon?" do
217
200
 
218
201
  before(:each) do
219
- @measurement.forecast = [Barometer::ForecastMeasurement.new]
202
+ @measurement.forecast = [Data::ForecastMeasurement.new]
220
203
  @measurement.forecast.first.date = Date.today
221
204
  @measurement.forecast.size.should == 1
222
205
  end
@@ -224,13 +207,13 @@ describe "Yahoo" do
224
207
  it "returns true if matching icon code" do
225
208
  @measurement.forecast.first.icon = "32"
226
209
  @measurement.forecast.first.icon?.should be_true
227
- Barometer::Yahoo.forecasted_sunny_by_icon?(@measurement.forecast.first).should be_true
210
+ WeatherService::Yahoo.forecasted_sunny_by_icon?(@measurement.forecast.first).should be_true
228
211
  end
229
212
 
230
213
  it "returns false if NO matching icon code" do
231
214
  @measurement.forecast.first.icon = "4"
232
215
  @measurement.forecast.first.icon?.should be_true
233
- Barometer::Yahoo.forecasted_sunny_by_icon?(@measurement.forecast.first).should be_false
216
+ WeatherService::Yahoo.forecasted_sunny_by_icon?(@measurement.forecast.first).should be_false
234
217
  end
235
218
 
236
219
  end
@@ -241,28 +224,29 @@ describe "Yahoo" do
241
224
 
242
225
  before(:each) do
243
226
  @query = Barometer::Query.new("90210")
244
- @query.preferred = "90210"
245
- @measurement = Barometer::Measurement.new
227
+ @measurement = Data::Measurement.new
246
228
 
247
229
  FakeWeb.register_uri(:get,
248
- "http://weather.yahooapis.com:80/forecastrss?u=c&p=#{CGI.escape(@query.preferred)}",
230
+ "http://weather.yahooapis.com:80/forecastrss?u=c&p=#{CGI.escape(@query.q)}",
249
231
  :string => File.read(File.join(File.dirname(__FILE__),
250
- 'fixtures',
251
- 'yahoo_90210.xml')
232
+ '../fixtures/services/yahoo',
233
+ '90210.xml')
252
234
  )
253
235
  )
254
236
  end
255
237
 
256
238
  # TODO: complete this
257
239
  it "should correctly build the data" do
258
- result = Barometer::Yahoo._measure(@measurement, @query)
240
+ result = WeatherService::Yahoo._measure(@measurement, @query)
259
241
 
260
- sun_rise = Barometer::Zone.merge("6:09 am", "Sun, 26 Apr 2009 10:51 am PDT", "PDT")
261
- sun_set = Barometer::Zone.merge("7:34 pm", "Sun, 26 Apr 2009 10:51 am PDT", "PDT")
242
+ #sun_rise = Barometer::Zone.merge("6:09 am", "Sun, 26 Apr 2009 10:51 am PDT", "PDT")
243
+ #sun_set = Barometer::Zone.merge("7:34 pm", "Sun, 26 Apr 2009 10:51 am PDT", "PDT")
262
244
 
263
245
  # build current
264
- @measurement.current.sun.rise.should == sun_rise
265
- @measurement.current.sun.set.should == sun_set
246
+ #@measurement.current.sun.rise.should == sun_rise
247
+ #@measurement.current.sun.set.should == sun_set
248
+ @measurement.current.sun.rise.to_s.should == "06:09 am"
249
+ @measurement.current.sun.set.to_s.should == "07:34 pm"
266
250
 
267
251
  # builds location
268
252
  @measurement.location.city.should == "Beverly Hills"
@@ -272,13 +256,13 @@ describe "Yahoo" do
272
256
 
273
257
  @measurement.forecast[0].condition.should == "Mostly Sunny"
274
258
  @measurement.forecast[0].icon.should == "34"
275
- @measurement.forecast[0].sun.rise.should == sun_rise + (60*60*24*0)
276
- @measurement.forecast[0].sun.set.should == sun_set + (60*60*24*0)
259
+ @measurement.forecast[0].sun.rise.should == "06:09 am"
260
+ @measurement.forecast[0].sun.set.should == "07:34 pm"
277
261
 
278
262
  @measurement.forecast[1].condition.should == "Cloudy"
279
263
  @measurement.forecast[1].icon.should == "26"
280
- @measurement.forecast[1].sun.rise.should == sun_rise + (60*60*24*1)
281
- @measurement.forecast[1].sun.set.should == sun_set + (60*60*24*1)
264
+ @measurement.forecast[1].sun.rise.should == "06:09 am"
265
+ @measurement.forecast[1].sun.set.should == "07:34 pm"
282
266
 
283
267
  end
284
268
  # <yweather:location city="Beverly Hills" region="CA" country="US"/>
@@ -38,16 +38,16 @@ describe "Weather" do
38
38
 
39
39
  before(:each) do
40
40
  module Barometer
41
- class Measurement
41
+ class Data::Measurement
42
42
  attr_accessor :success
43
43
  end
44
44
  end
45
45
  @weather = Barometer::Weather.new
46
- @wunderground = Barometer::Measurement.new(:wunderground)
46
+ @wunderground = Data::Measurement.new(:wunderground)
47
47
  @wunderground.success = true
48
- @yahoo = Barometer::Measurement.new(:yahoo)
48
+ @yahoo = Data::Measurement.new(:yahoo)
49
49
  @yahoo.success = true
50
- @google = Barometer::Measurement.new(:google)
50
+ @google = Data::Measurement.new(:google)
51
51
  @weather.measurements << @wunderground
52
52
  @weather.measurements << @yahoo
53
53
  @weather.measurements << @google
@@ -82,36 +82,47 @@ describe "Weather" do
82
82
 
83
83
  before(:each) do
84
84
  @weather = Barometer::Weather.new
85
- @wunderground = Barometer::Measurement.new(:wunderground)
86
- @wunderground.current = Barometer::CurrentMeasurement.new
85
+ @wunderground = Data::Measurement.new(:wunderground)
86
+ @wunderground.current = Data::CurrentMeasurement.new
87
87
  @wunderground.success = true
88
- @yahoo = Barometer::Measurement.new(:yahoo)
89
- @yahoo.current = Barometer::CurrentMeasurement.new
88
+ @yahoo = Data::Measurement.new(:yahoo)
89
+ @yahoo.current = Data::CurrentMeasurement.new
90
90
  @yahoo.success = true
91
- @google = Barometer::Measurement.new(:google)
91
+ @google = Data::Measurement.new(:google)
92
92
  @weather.measurements << @wunderground
93
93
  @weather.measurements << @yahoo
94
94
  @weather.measurements << @google
95
95
  end
96
96
 
97
97
  it "doesn't include nil values" do
98
- @weather.source(:wunderground).current.temperature = Barometer::Temperature.new
98
+ @weather.source(:wunderground).current.temperature = Data::Temperature.new
99
99
  @weather.source(:wunderground).current.temperature.c = 10
100
100
 
101
101
  @weather.temperature.c.should == 10
102
102
 
103
- @weather.source(:yahoo).current.temperature = Barometer::Temperature.new
103
+ @weather.source(:yahoo).current.temperature = Data::Temperature.new
104
104
  @weather.source(:yahoo).current.temperature.c = nil
105
105
 
106
106
  @weather.temperature.c.should == 10
107
107
  end
108
108
 
109
+ it "respects the measurement weight" do
110
+ @weather.source(:wunderground).current.temperature = Data::Temperature.new
111
+ @weather.source(:wunderground).current.temperature.c = 10
112
+ @weather.source(:yahoo).current.temperature = Data::Temperature.new
113
+ @weather.source(:yahoo).current.temperature.c = 4
114
+
115
+ @weather.measurements.first.weight = 2
116
+
117
+ @weather.temperature.c.should == 8
118
+ end
119
+
109
120
  describe "for temperature" do
110
121
 
111
122
  before(:each) do
112
- @weather.source(:wunderground).current.temperature = Barometer::Temperature.new
123
+ @weather.source(:wunderground).current.temperature = Data::Temperature.new
113
124
  @weather.source(:wunderground).current.temperature.c = 10
114
- @weather.source(:yahoo).current.temperature = Barometer::Temperature.new
125
+ @weather.source(:yahoo).current.temperature = Data::Temperature.new
115
126
  @weather.source(:yahoo).current.temperature.c = 6
116
127
  end
117
128
 
@@ -128,9 +139,9 @@ describe "Weather" do
128
139
  describe "for wind" do
129
140
 
130
141
  before(:each) do
131
- @weather.source(:wunderground).current.wind = Barometer::Speed.new
142
+ @weather.source(:wunderground).current.wind = Data::Speed.new
132
143
  @weather.source(:wunderground).current.wind.kph = 10
133
- @weather.source(:yahoo).current.wind = Barometer::Speed.new
144
+ @weather.source(:yahoo).current.wind = Data::Speed.new
134
145
  @weather.source(:yahoo).current.wind.kph = 6
135
146
  end
136
147
 
@@ -164,9 +175,9 @@ describe "Weather" do
164
175
  describe "for pressure" do
165
176
 
166
177
  before(:each) do
167
- @weather.source(:wunderground).current.pressure = Barometer::Pressure.new
178
+ @weather.source(:wunderground).current.pressure = Data::Pressure.new
168
179
  @weather.source(:wunderground).current.pressure.mb = 10
169
- @weather.source(:yahoo).current.pressure = Barometer::Pressure.new
180
+ @weather.source(:yahoo).current.pressure = Data::Pressure.new
170
181
  @weather.source(:yahoo).current.pressure.mb = 6
171
182
  end
172
183
 
@@ -183,9 +194,9 @@ describe "Weather" do
183
194
  describe "for dew_point" do
184
195
 
185
196
  before(:each) do
186
- @weather.source(:wunderground).current.dew_point = Barometer::Temperature.new
197
+ @weather.source(:wunderground).current.dew_point = Data::Temperature.new
187
198
  @weather.source(:wunderground).current.dew_point.c = 10
188
- @weather.source(:yahoo).current.dew_point = Barometer::Temperature.new
199
+ @weather.source(:yahoo).current.dew_point = Data::Temperature.new
189
200
  @weather.source(:yahoo).current.dew_point.c = 6
190
201
  end
191
202
 
@@ -202,9 +213,9 @@ describe "Weather" do
202
213
  describe "for heat_index" do
203
214
 
204
215
  before(:each) do
205
- @weather.source(:wunderground).current.heat_index = Barometer::Temperature.new
216
+ @weather.source(:wunderground).current.heat_index = Data::Temperature.new
206
217
  @weather.source(:wunderground).current.heat_index.c = 10
207
- @weather.source(:yahoo).current.heat_index = Barometer::Temperature.new
218
+ @weather.source(:yahoo).current.heat_index = Data::Temperature.new
208
219
  @weather.source(:yahoo).current.heat_index.c = 6
209
220
  end
210
221
 
@@ -221,9 +232,9 @@ describe "Weather" do
221
232
  describe "for wind_chill" do
222
233
 
223
234
  before(:each) do
224
- @weather.source(:wunderground).current.wind_chill = Barometer::Temperature.new
235
+ @weather.source(:wunderground).current.wind_chill = Data::Temperature.new
225
236
  @weather.source(:wunderground).current.wind_chill.c = 10
226
- @weather.source(:yahoo).current.wind_chill = Barometer::Temperature.new
237
+ @weather.source(:yahoo).current.wind_chill = Data::Temperature.new
227
238
  @weather.source(:yahoo).current.wind_chill.c = 6
228
239
  end
229
240
 
@@ -240,9 +251,9 @@ describe "Weather" do
240
251
  describe "for visibility" do
241
252
 
242
253
  before(:each) do
243
- @weather.source(:wunderground).current.visibility = Barometer::Distance.new
254
+ @weather.source(:wunderground).current.visibility = Data::Distance.new
244
255
  @weather.source(:wunderground).current.visibility.km = 10
245
- @weather.source(:yahoo).current.visibility = Barometer::Distance.new
256
+ @weather.source(:yahoo).current.visibility = Data::Distance.new
246
257
  @weather.source(:yahoo).current.visibility.km = 6
247
258
  end
248
259
 
@@ -262,6 +273,7 @@ describe "Weather" do
262
273
 
263
274
  before(:each) do
264
275
  @weather = Barometer::Weather.new
276
+ @now = Data::LocalDateTime.parse("2:05 pm")
265
277
  end
266
278
 
267
279
  describe "windy?" do
@@ -272,9 +284,9 @@ describe "Weather" do
272
284
  lambda { @weather.windy?(1.1) }.should_not raise_error(ArgumentError)
273
285
  end
274
286
 
275
- it "requires time as a Time object" do
276
- lambda { @weather.windy?(1,"a") }.should raise_error(ArgumentError)
277
- lambda { @weather.windy?(1,Time.now.utc) }.should_not raise_error(ArgumentError)
287
+ it "requires time as a Data::LocalTime object" do
288
+ #lambda { @weather.windy?(1,"a") }.should raise_error(ArgumentError)
289
+ lambda { @weather.windy?(1,@now) }.should_not raise_error(ArgumentError)
278
290
  end
279
291
 
280
292
  it "returns nil when no measurements" do
@@ -283,20 +295,20 @@ describe "Weather" do
283
295
  end
284
296
 
285
297
  it "returns true if a measurement returns true" do
286
- wunderground = Barometer::Measurement.new(:wunderground)
298
+ wunderground = Data::Measurement.new(:wunderground)
287
299
  wunderground.success = true
288
300
  @weather.measurements << wunderground
289
- module Barometer; class Measurement
301
+ module Barometer; class Data::Measurement
290
302
  def windy?(a=nil,b=nil); true; end
291
303
  end; end
292
304
  @weather.windy?.should be_true
293
305
  end
294
306
 
295
307
  it "returns false if a measurement returns false" do
296
- wunderground = Barometer::Measurement.new(:wunderground)
308
+ wunderground = Data::Measurement.new(:wunderground)
297
309
  wunderground.success = true
298
310
  @weather.measurements << wunderground
299
- module Barometer; class Measurement
311
+ module Barometer; class Data::Measurement
300
312
  def windy?(a=nil,b=nil); false; end
301
313
  end; end
302
314
  @weather.windy?.should be_false
@@ -312,9 +324,9 @@ describe "Weather" do
312
324
  lambda { @weather.wet?(1.1) }.should_not raise_error(ArgumentError)
313
325
  end
314
326
 
315
- it "requires time as a Time object" do
316
- lambda { @weather.wet?(1,"a") }.should raise_error(ArgumentError)
317
- lambda { @weather.wet?(1,Time.now.utc) }.should_not raise_error(ArgumentError)
327
+ it "requires time as a Data::LocalTime object" do
328
+ #lambda { @weather.wet?(1,"a") }.should raise_error(ArgumentError)
329
+ lambda { @weather.wet?(1,@now) }.should_not raise_error(ArgumentError)
318
330
  end
319
331
 
320
332
  it "returns nil when no measurements" do
@@ -323,20 +335,20 @@ describe "Weather" do
323
335
  end
324
336
 
325
337
  it "returns true if a measurement returns true" do
326
- wunderground = Barometer::Measurement.new(:wunderground)
338
+ wunderground = Data::Measurement.new(:wunderground)
327
339
  wunderground.success = true
328
340
  @weather.measurements << wunderground
329
- module Barometer; class Measurement
341
+ module Barometer; class Data::Measurement
330
342
  def wet?(a=nil,b=nil); true; end
331
343
  end; end
332
344
  @weather.wet?.should be_true
333
345
  end
334
346
 
335
347
  it "returns false if a measurement returns false" do
336
- wunderground = Barometer::Measurement.new(:wunderground)
348
+ wunderground = Data::Measurement.new(:wunderground)
337
349
  wunderground.success = true
338
350
  @weather.measurements << wunderground
339
- module Barometer; class Measurement
351
+ module Barometer; class Data::Measurement
340
352
  def wet?(a=nil,b=nil); false; end
341
353
  end; end
342
354
  @weather.wet?.should be_false
@@ -346,14 +358,14 @@ describe "Weather" do
346
358
 
347
359
  describe "day? and night?" do
348
360
 
349
- it "requires time as a Time object" do
350
- lambda { @weather.day?("a") }.should raise_error(ArgumentError)
351
- lambda { @weather.day?(Time.now.utc) }.should_not raise_error(ArgumentError)
361
+ it "requires time as a Data::LocalTime object" do
362
+ #lambda { @weather.day?("a") }.should raise_error(ArgumentError)
363
+ lambda { @weather.day?(@now) }.should_not raise_error(ArgumentError)
352
364
  end
353
365
 
354
- it "requires time as a Time object" do
355
- lambda { @weather.night?("a") }.should raise_error(ArgumentError)
356
- lambda { @weather.night?(Time.now.utc) }.should_not raise_error(ArgumentError)
366
+ it "requires time as a Data::LocalTime object" do
367
+ #lambda { @weather.night?("a") }.should raise_error(ArgumentError)
368
+ lambda { @weather.night?(@now) }.should_not raise_error(ArgumentError)
357
369
  end
358
370
 
359
371
  it "returns nil when no measurements" do
@@ -363,10 +375,10 @@ describe "Weather" do
363
375
  end
364
376
 
365
377
  it "returns true if a measurement returns true (night is opposite)" do
366
- wunderground = Barometer::Measurement.new(:wunderground)
378
+ wunderground = Data::Measurement.new(:wunderground)
367
379
  wunderground.success = true
368
380
  @weather.measurements << wunderground
369
- module Barometer; class Measurement
381
+ module Barometer; class Data::Measurement
370
382
  def day?(a=nil); true; end
371
383
  end; end
372
384
  @weather.day?.should be_true
@@ -374,10 +386,10 @@ describe "Weather" do
374
386
  end
375
387
 
376
388
  it "returns false if a measurement returns false (night is opposite)" do
377
- wunderground = Barometer::Measurement.new(:wunderground)
389
+ wunderground = Data::Measurement.new(:wunderground)
378
390
  wunderground.success = true
379
391
  @weather.measurements << wunderground
380
- module Barometer; class Measurement
392
+ module Barometer; class Data::Measurement
381
393
  def day?(a=nil); false; end
382
394
  end; end
383
395
  @weather.day?.should be_false
@@ -388,9 +400,9 @@ describe "Weather" do
388
400
 
389
401
  describe "sunny?" do
390
402
 
391
- it "requires time as a Time object" do
392
- lambda { @weather.sunny?("a") }.should raise_error(ArgumentError)
393
- lambda { @weather.sunny?(Time.now.utc) }.should_not raise_error(ArgumentError)
403
+ it "requires time as a Data::LocalTime object" do
404
+ #lambda { @weather.sunny?("a") }.should raise_error(ArgumentError)
405
+ lambda { @weather.sunny?(@now) }.should_not raise_error(ArgumentError)
394
406
  end
395
407
 
396
408
  it "returns nil when no measurements" do
@@ -399,40 +411,40 @@ describe "Weather" do
399
411
  end
400
412
 
401
413
  it "returns true if a measurement returns true" do
402
- wunderground = Barometer::Measurement.new(:wunderground)
414
+ wunderground = Data::Measurement.new(:wunderground)
403
415
  wunderground.success = true
404
416
  @weather.measurements << wunderground
405
- module Barometer; class Measurement
417
+ module Barometer; class Data::Measurement
406
418
  def day?(a=nil); true; end
407
419
  end; end
408
- module Barometer; class Measurement
420
+ module Barometer; class Data::Measurement
409
421
  def sunny?(a=nil,b=nil); true; end
410
422
  end; end
411
423
  @weather.sunny?.should be_true
412
424
  end
413
425
 
414
426
  it "returns false if a measurement returns false" do
415
- wunderground = Barometer::Measurement.new(:wunderground)
427
+ wunderground = Data::Measurement.new(:wunderground)
416
428
  wunderground.success = true
417
429
  @weather.measurements << wunderground
418
- module Barometer; class Measurement
430
+ module Barometer; class Data::Measurement
419
431
  def day?(a=nil); true; end
420
432
  end; end
421
- module Barometer; class Measurement
433
+ module Barometer; class Data::Measurement
422
434
  def sunny?(a=nil,b=nil); false; end
423
435
  end; end
424
436
  @weather.sunny?.should be_false
425
437
  end
426
438
 
427
439
  it "returns false if night time" do
428
- wunderground = Barometer::Measurement.new(:wunderground)
440
+ wunderground = Data::Measurement.new(:wunderground)
429
441
  wunderground.success = true
430
442
  @weather.measurements << wunderground
431
- module Barometer; class Measurement
443
+ module Barometer; class Data::Measurement
432
444
  def sunny?(a=nil,b=nil); true; end
433
445
  end; end
434
446
  @weather.sunny?.should be_true
435
- module Barometer; class Measurement
447
+ module Barometer; class Data::Measurement
436
448
  def day?(a=nil); false; end
437
449
  end; end
438
450
  @weather.sunny?.should be_false