barometer 0.7.3 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.travis.yml +7 -0
- data/LICENSE +1 -1
- data/{README.rdoc → README.md} +124 -110
- data/Rakefile +1 -21
- data/TODO +8 -9
- data/barometer.gemspec +20 -19
- data/bin/barometer +36 -83
- data/lib/barometer.rb +13 -11
- data/lib/barometer/base.rb +10 -10
- data/lib/barometer/data.rb +1 -1
- data/lib/barometer/data/distance.rb +25 -25
- data/lib/barometer/data/geo.rb +9 -9
- data/lib/barometer/data/local_datetime.rb +24 -20
- data/lib/barometer/data/local_time.rb +13 -13
- data/lib/barometer/data/location.rb +6 -6
- data/lib/barometer/data/pressure.rb +24 -24
- data/lib/barometer/data/speed.rb +28 -28
- data/lib/barometer/data/sun.rb +7 -7
- data/lib/barometer/data/temperature.rb +29 -29
- data/lib/barometer/data/units.rb +9 -9
- data/lib/barometer/data/zone.rb +19 -19
- data/lib/barometer/formats.rb +1 -1
- data/lib/barometer/formats/coordinates.rb +7 -7
- data/lib/barometer/formats/format.rb +6 -6
- data/lib/barometer/formats/geocode.rb +5 -5
- data/lib/barometer/formats/icao.rb +6 -6
- data/lib/barometer/formats/postalcode.rb +3 -3
- data/lib/barometer/formats/short_zipcode.rb +2 -2
- data/lib/barometer/formats/weather_id.rb +10 -10
- data/lib/barometer/formats/woe_id.rb +20 -20
- data/lib/barometer/formats/zipcode.rb +3 -3
- data/lib/barometer/key_file_parser.rb +20 -0
- data/lib/barometer/measurements/measurement.rb +32 -32
- data/lib/barometer/measurements/result.rb +39 -39
- data/lib/barometer/measurements/result_array.rb +12 -12
- data/lib/barometer/query.rb +15 -15
- data/lib/barometer/services.rb +3 -3
- data/lib/barometer/translations/icao_country_codes.yml +20 -20
- data/lib/barometer/translations/weather_country_codes.yml +1 -1
- data/lib/barometer/translations/zone_codes.yml +2 -2
- data/lib/barometer/version.rb +3 -0
- data/lib/barometer/weather.rb +27 -27
- data/lib/barometer/weather_services/noaa.rb +314 -3
- data/lib/barometer/weather_services/service.rb +32 -30
- data/lib/barometer/weather_services/weather_bug.rb +35 -33
- data/lib/barometer/weather_services/wunderground.rb +31 -29
- data/lib/barometer/weather_services/yahoo.rb +36 -35
- data/lib/barometer/web_services/geocode.rb +5 -7
- data/lib/barometer/web_services/noaa_station_id.rb +53 -0
- data/lib/barometer/web_services/placemaker.rb +11 -13
- data/lib/barometer/web_services/timezone.rb +5 -7
- data/lib/barometer/web_services/weather_id.rb +4 -6
- data/lib/barometer/web_services/web_service.rb +4 -4
- data/spec/barometer_spec.rb +25 -27
- data/spec/cassettes/Barometer.json +1 -0
- data/spec/cassettes/Query.json +1 -0
- data/spec/cassettes/Query_Format_Coordinates.json +1 -0
- data/spec/cassettes/Query_Format_Geocode.json +1 -0
- data/spec/cassettes/Query_Format_WeatherID.json +1 -0
- data/spec/cassettes/Query_Format_WoeID.json +1 -0
- data/spec/cassettes/WeatherService.json +1 -0
- data/spec/cassettes/WeatherService_Noaa.json +1 -0
- data/spec/cassettes/WeatherService_WeatherBug.json +1 -0
- data/spec/cassettes/WeatherService_Wunderground.json +1 -0
- data/spec/cassettes/WeatherService_Yahoo.json +1 -0
- data/spec/cassettes/WebService_Geocode.json +1 -0
- data/spec/cassettes/WebService_NoaaStation.json +1 -0
- data/spec/data/distance_spec.rb +60 -60
- data/spec/data/geo_spec.rb +23 -23
- data/spec/data/local_datetime_spec.rb +44 -44
- data/spec/data/local_time_spec.rb +47 -47
- data/spec/data/location_spec.rb +16 -16
- data/spec/data/pressure_spec.rb +61 -61
- data/spec/data/speed_spec.rb +69 -69
- data/spec/data/sun_spec.rb +25 -25
- data/spec/data/temperature_spec.rb +68 -68
- data/spec/data/units_spec.rb +21 -21
- data/spec/data/zone_spec.rb +35 -35
- data/spec/formats/coordinates_spec.rb +27 -27
- data/spec/formats/format_spec.rb +17 -25
- data/spec/formats/geocode_spec.rb +23 -31
- data/spec/formats/icao_spec.rb +26 -32
- data/spec/formats/postalcode_spec.rb +22 -28
- data/spec/formats/short_zipcode_spec.rb +20 -26
- data/spec/formats/weather_id_spec.rb +57 -67
- data/spec/formats/woe_id_spec.rb +59 -59
- data/spec/formats/zipcode_spec.rb +39 -47
- data/spec/key_file_parser_spec.rb +28 -0
- data/spec/measurements/measurement_spec.rb +79 -133
- data/spec/measurements/result_array_spec.rb +23 -38
- data/spec/measurements/result_spec.rb +100 -128
- data/spec/query_spec.rb +83 -100
- data/spec/spec_helper.rb +24 -6
- data/spec/weather_services/noaa_spec.rb +179 -0
- data/spec/weather_services/services_spec.rb +28 -36
- data/spec/weather_services/weather_bug_spec.rb +57 -77
- data/spec/weather_services/wunderground_spec.rb +36 -65
- data/spec/weather_services/yahoo_spec.rb +38 -60
- data/spec/weather_spec.rb +79 -79
- data/spec/web_services/geocode_spec.rb +7 -11
- data/spec/web_services/noaa_station_id_spec.rb +33 -0
- data/spec/web_services/placemaker_spec.rb +7 -12
- data/spec/web_services/web_services_spec.rb +3 -9
- metadata +214 -163
- data/VERSION.yml +0 -5
- data/lib/barometer/weather_services/google.rb +0 -142
- data/lib/barometer/weather_services/weather_dot_com.rb +0 -279
- data/spec/fakeweb_helper.rb +0 -179
- data/spec/fixtures/formats/weather_id/90210.xml +0 -7
- data/spec/fixtures/formats/weather_id/from_USGA0028.xml +0 -3
- data/spec/fixtures/formats/weather_id/ksfo.xml +0 -1
- data/spec/fixtures/formats/weather_id/manhattan.xml +0 -7
- data/spec/fixtures/formats/weather_id/new_york.xml +0 -1
- data/spec/fixtures/formats/weather_id/the_hills.xml +0 -1
- data/spec/fixtures/geocode/40_73_v3.json +0 -497
- data/spec/fixtures/geocode/90210_v3.json +0 -63
- data/spec/fixtures/geocode/T5B4M9_v3.json +0 -68
- data/spec/fixtures/geocode/atlanta_v3.json +0 -58
- data/spec/fixtures/geocode/calgary_ab_v3.json +0 -58
- data/spec/fixtures/geocode/ksfo_v3.json +0 -73
- data/spec/fixtures/geocode/newyork_ny_v3.json +0 -58
- data/spec/fixtures/services/google/calgary_ab.xml +0 -1
- data/spec/fixtures/services/placemaker/T5B4M9.xml +0 -65
- data/spec/fixtures/services/placemaker/atlanta.xml +0 -65
- data/spec/fixtures/services/placemaker/coords.xml +0 -65
- data/spec/fixtures/services/placemaker/ksfo.xml +0 -65
- data/spec/fixtures/services/placemaker/new_york.xml +0 -65
- data/spec/fixtures/services/placemaker/the_hills.xml +0 -65
- data/spec/fixtures/services/placemaker/w615702.xml +0 -47
- data/spec/fixtures/services/weather_bug/90210_current.xml +0 -93
- data/spec/fixtures/services/weather_bug/90210_forecast.xml +0 -76
- data/spec/fixtures/services/weather_dot_com/90210.xml +0 -1
- data/spec/fixtures/services/wunderground/current_calgary_ab.xml +0 -9
- data/spec/fixtures/services/wunderground/forecast_calgary_ab.xml +0 -13
- data/spec/fixtures/services/yahoo/90210.xml +0 -3
- data/spec/weather_services/google_spec.rb +0 -181
- data/spec/weather_services/weather_dot_com_spec.rb +0 -224
@@ -1,33 +1,28 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
|
3
|
-
describe
|
4
|
-
|
3
|
+
describe Barometer::Measurement::ResultArray do
|
5
4
|
describe "instance methods" do
|
6
|
-
|
7
5
|
before(:each) do
|
8
|
-
@array = Measurement::ResultArray.new
|
6
|
+
@array = Barometer::Measurement::ResultArray.new
|
9
7
|
end
|
10
|
-
|
8
|
+
|
11
9
|
describe "'<<'" do
|
12
|
-
|
13
|
-
it "requires Measurement::Result" do
|
10
|
+
it "requires Barometer::Measurement::Result" do
|
14
11
|
lambda { @array << "invalid" }.should raise_error(ArgumentError)
|
15
12
|
end
|
16
|
-
|
13
|
+
|
17
14
|
it "adds ForecastMeasurement" do
|
18
15
|
@array.size.should == 0
|
19
|
-
forecast = Measurement::Result.new
|
16
|
+
forecast = Barometer::Measurement::Result.new
|
20
17
|
@array << forecast
|
21
18
|
@array.size.should == 1
|
22
19
|
end
|
23
|
-
|
24
20
|
end
|
25
|
-
|
26
|
-
describe "when searching forecasts using 'for'" do
|
27
21
|
|
22
|
+
describe "when searching forecasts using 'for'" do
|
28
23
|
before(:each) do
|
29
24
|
1.upto(4) do |i|
|
30
|
-
forecast_measurement = Measurement::Result.new
|
25
|
+
forecast_measurement = Barometer::Measurement::Result.new
|
31
26
|
forecast_measurement.date = Date.parse((Time.now + (i * 60 * 60 * 24)).to_s)
|
32
27
|
@array << forecast_measurement
|
33
28
|
end
|
@@ -37,7 +32,7 @@ describe "Result Array" do
|
|
37
32
|
end
|
38
33
|
|
39
34
|
it "returns nil when there are no forecasts" do
|
40
|
-
@array = Measurement::ResultArray.new
|
35
|
+
@array = Barometer::Measurement::ResultArray.new
|
41
36
|
@array.size.should == 0
|
42
37
|
@array.for(@tommorrow).should be_nil
|
43
38
|
end
|
@@ -76,38 +71,32 @@ describe "Result Array" do
|
|
76
71
|
yesterday.class.should == Time
|
77
72
|
@array.for(yesterday).should be_nil
|
78
73
|
end
|
79
|
-
|
74
|
+
|
80
75
|
it "finds using '[]'" do
|
81
76
|
tommorrow = @tommorrow.to_s
|
82
77
|
tommorrow.class.should == String
|
83
78
|
@array[tommorrow].should == @array.first
|
84
79
|
end
|
85
|
-
|
86
80
|
end
|
87
|
-
|
88
81
|
end
|
89
|
-
|
82
|
+
|
90
83
|
describe "simple questions" do
|
91
|
-
|
92
84
|
before(:each) do
|
93
|
-
@array = Measurement::ResultArray.new
|
94
|
-
#@early = Data::LocalTime("6:00 am")
|
95
|
-
#@noon = Data::LocalTime("12:00 pm")
|
96
|
-
#@late = Data::LocalTime("8:00 pm")
|
85
|
+
@array = Barometer::Measurement::ResultArray.new
|
97
86
|
@now = Time.utc(2009,5,5,10,30,25)
|
98
|
-
|
87
|
+
|
99
88
|
@sun_icons = %w(sunny)
|
100
|
-
|
89
|
+
|
101
90
|
0.upto(1) do |i|
|
102
|
-
forecast_measurement = Measurement::Result.new
|
91
|
+
forecast_measurement = Barometer::Measurement::Result.new
|
103
92
|
forecast_measurement.date = Date.parse((@now + (i * 60 * 60 * 24)).to_s)
|
104
93
|
wind = Data::Speed.new
|
105
94
|
wind << (i * 5)
|
106
95
|
forecast_measurement.wind = wind
|
107
96
|
forecast_measurement.sun = Data::Sun.new(
|
108
97
|
Data::LocalTime.parse("9:00 am"), Data::LocalTime.parse("3:00 pm"))
|
109
|
-
forecast_measurement.icon = "sunny"
|
110
|
-
forecast_measurement.pop = 40
|
98
|
+
forecast_measurement.icon = "sunny"
|
99
|
+
forecast_measurement.pop = 40
|
111
100
|
forecast_measurement.humidity = 95
|
112
101
|
@array << forecast_measurement
|
113
102
|
end
|
@@ -117,13 +106,13 @@ describe "Result Array" do
|
|
117
106
|
@earlier = (@now - (60 * 60 * 3))
|
118
107
|
@later = (@now + (60 * 60 * 6))
|
119
108
|
end
|
120
|
-
|
109
|
+
|
121
110
|
it "answers windy?" do
|
122
111
|
@array.windy?(@tommorrow).should be_false
|
123
112
|
@array.windy?(@tommorrow,1).should be_true
|
124
113
|
@array.windy?(@yesterday).should be_nil
|
125
114
|
end
|
126
|
-
|
115
|
+
|
127
116
|
it "answers day?" do
|
128
117
|
@array.day?(@yesterday).should be_nil
|
129
118
|
@array.day?(@earlier).should be_false
|
@@ -131,35 +120,31 @@ describe "Result Array" do
|
|
131
120
|
@array.day?(@tommorrow).should be_true
|
132
121
|
@array.day?(@now).should be_true
|
133
122
|
end
|
134
|
-
|
123
|
+
|
135
124
|
it "answers sunny?" do
|
136
125
|
@array.sunny?(@tommorrow,%w(rain)).should be_false
|
137
126
|
@array.sunny?(@tommorrow,@sun_icons).should be_true
|
138
127
|
@array.sunny?(@yesterday).should be_nil
|
139
128
|
end
|
140
|
-
|
129
|
+
|
141
130
|
describe "wet?" do
|
142
|
-
|
143
131
|
it "answers via pop" do
|
144
132
|
@array.wet?(@tommorrow).should be_false
|
145
133
|
@array.wet?(@tommorrow,nil,50).should be_false
|
146
134
|
@array.wet?(@tommorrow,nil,30).should be_true
|
147
135
|
end
|
148
|
-
|
136
|
+
|
149
137
|
it "answers via humidity" do
|
150
138
|
@array.wet?(@tommorrow).should be_false
|
151
139
|
@array.wet?(@tommorrow,nil,50,99).should be_false
|
152
140
|
@array.wet?(@tommorrow,nil,50,90).should be_true
|
153
141
|
end
|
154
|
-
|
142
|
+
|
155
143
|
it "answers via icon" do
|
156
144
|
@array.wet?(@tommorrow,%w(rain)).should be_false
|
157
145
|
# pretend that "sun" means wet
|
158
146
|
@array.wet?(@tommorrow,@sun_icons).should be_true
|
159
147
|
end
|
160
|
-
|
161
148
|
end
|
162
|
-
|
163
149
|
end
|
164
|
-
|
165
150
|
end
|
@@ -1,45 +1,43 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
|
3
|
-
describe
|
4
|
-
|
3
|
+
describe Barometer::Measurement::Result do
|
5
4
|
describe "when initialized" do
|
6
|
-
|
7
5
|
before(:each) do
|
8
|
-
@result = Measurement::Result.new
|
6
|
+
@result = Barometer::Measurement::Result.new
|
9
7
|
end
|
10
|
-
|
8
|
+
|
11
9
|
it "responds to temperature" do
|
12
10
|
@result.temperature.should be_nil
|
13
11
|
end
|
14
|
-
|
12
|
+
|
15
13
|
it "responds to dew_point" do
|
16
14
|
@result.dew_point.should be_nil
|
17
15
|
end
|
18
|
-
|
16
|
+
|
19
17
|
it "responds to heat_index" do
|
20
18
|
@result.heat_index.should be_nil
|
21
19
|
end
|
22
|
-
|
20
|
+
|
23
21
|
it "responds to wind_chill" do
|
24
22
|
@result.wind_chill.should be_nil
|
25
23
|
end
|
26
|
-
|
24
|
+
|
27
25
|
it "responds to pressure" do
|
28
26
|
@result.pressure.should be_nil
|
29
27
|
end
|
30
|
-
|
28
|
+
|
31
29
|
it "responds to visibility" do
|
32
30
|
@result.pressure.should be_nil
|
33
31
|
end
|
34
|
-
|
32
|
+
|
35
33
|
it "responds to current_at" do
|
36
34
|
@result.current_at.should be_nil
|
37
35
|
end
|
38
|
-
|
36
|
+
|
39
37
|
it "responds to updated_at" do
|
40
38
|
@result.updated_at.should be_nil
|
41
39
|
end
|
42
|
-
|
40
|
+
|
43
41
|
it "responds to date" do
|
44
42
|
@result.date.should be_nil
|
45
43
|
end
|
@@ -47,217 +45,215 @@ describe "Result Measurement" do
|
|
47
45
|
it "responds to low" do
|
48
46
|
@result.low.should be_nil
|
49
47
|
end
|
50
|
-
|
48
|
+
|
51
49
|
it "responds to high" do
|
52
50
|
@result.high.should be_nil
|
53
51
|
end
|
54
|
-
|
52
|
+
|
55
53
|
it "responds to pop" do
|
56
54
|
@result.pop.should be_nil
|
57
55
|
end
|
58
|
-
|
56
|
+
|
59
57
|
it "responds to valid_start_date" do
|
60
58
|
@result.valid_start_date.should be_nil
|
61
59
|
end
|
62
|
-
|
60
|
+
|
63
61
|
it "responds to valid_end_date" do
|
64
62
|
@result.valid_end_date.should be_nil
|
65
63
|
end
|
66
|
-
|
64
|
+
|
67
65
|
it "responds to description" do
|
68
66
|
@result.description.should be_nil
|
69
67
|
end
|
70
|
-
|
68
|
+
|
71
69
|
it "responds to humidity" do
|
72
70
|
@result.humidity.should be_nil
|
73
71
|
end
|
74
|
-
|
72
|
+
|
75
73
|
it "responds to icon" do
|
76
74
|
@result.icon.should be_nil
|
77
75
|
end
|
78
|
-
|
76
|
+
|
79
77
|
it "responds to condition" do
|
80
78
|
@result.condition.should be_nil
|
81
79
|
end
|
82
|
-
|
80
|
+
|
83
81
|
it "responds to wind" do
|
84
82
|
@result.wind.should be_nil
|
85
83
|
end
|
86
|
-
|
84
|
+
|
87
85
|
it "responds to sun" do
|
88
86
|
@result.sun.should be_nil
|
89
87
|
end
|
90
|
-
|
88
|
+
|
91
89
|
it "responds to metric" do
|
92
90
|
@result.metric.should be_true
|
93
91
|
end
|
94
|
-
|
92
|
+
|
95
93
|
it "responds to metric?" do
|
96
94
|
@result.metric?.should be_true
|
97
95
|
@result.metric = false
|
98
96
|
@result.metric?.should be_false
|
99
97
|
end
|
100
|
-
|
101
98
|
end
|
102
|
-
|
99
|
+
|
103
100
|
describe "when writing data" do
|
104
|
-
|
105
101
|
before(:each) do
|
106
|
-
@result = Measurement::Result.new
|
102
|
+
@result = Barometer::Measurement::Result.new
|
107
103
|
end
|
108
|
-
|
104
|
+
|
109
105
|
it "only accepts Data::Temperature for temperature" do
|
110
106
|
invalid_data = 1
|
111
107
|
invalid_data.class.should_not == Data::Temperature
|
112
108
|
lambda { @result.temperature = invalid_data }.should raise_error(ArgumentError)
|
113
|
-
|
109
|
+
|
114
110
|
valid_data = Data::Temperature.new
|
115
111
|
valid_data.class.should == Data::Temperature
|
116
112
|
lambda { @result.temperature = valid_data }.should_not raise_error(ArgumentError)
|
117
113
|
end
|
118
|
-
|
114
|
+
|
119
115
|
it "only accepts Data::Temperature for dew_point" do
|
120
116
|
invalid_data = 1
|
121
117
|
invalid_data.class.should_not == Data::Temperature
|
122
118
|
lambda { @result.dew_point = invalid_data }.should raise_error(ArgumentError)
|
123
|
-
|
119
|
+
|
124
120
|
valid_data = Data::Temperature.new
|
125
121
|
valid_data.class.should == Data::Temperature
|
126
122
|
lambda { @result.dew_point = valid_data }.should_not raise_error(ArgumentError)
|
127
123
|
end
|
128
|
-
|
124
|
+
|
129
125
|
it "only accepts Data::Temperature for heat_index" do
|
130
126
|
invalid_data = 1
|
131
127
|
invalid_data.class.should_not == Data::Temperature
|
132
128
|
lambda { @result.heat_index = invalid_data }.should raise_error(ArgumentError)
|
133
|
-
|
129
|
+
|
134
130
|
valid_data = Data::Temperature.new
|
135
131
|
valid_data.class.should == Data::Temperature
|
136
132
|
lambda { @result.heat_index = valid_data }.should_not raise_error(ArgumentError)
|
137
133
|
end
|
138
|
-
|
134
|
+
|
139
135
|
it "only accepts Data::Temperature for wind_chill" do
|
140
136
|
invalid_data = 1
|
141
137
|
invalid_data.class.should_not == Data::Temperature
|
142
138
|
lambda { @result.wind_chill = invalid_data }.should raise_error(ArgumentError)
|
143
|
-
|
139
|
+
|
144
140
|
valid_data = Data::Temperature.new
|
145
141
|
valid_data.class.should == Data::Temperature
|
146
142
|
lambda { @result.wind_chill = valid_data }.should_not raise_error(ArgumentError)
|
147
143
|
end
|
148
|
-
|
144
|
+
|
149
145
|
it "only accepts Data::Pressure for pressure" do
|
150
146
|
invalid_data = 1
|
151
147
|
invalid_data.class.should_not == Data::Pressure
|
152
148
|
lambda { @result.pressure = invalid_data }.should raise_error(ArgumentError)
|
153
|
-
|
149
|
+
|
154
150
|
valid_data = Data::Pressure.new
|
155
151
|
valid_data.class.should == Data::Pressure
|
156
152
|
lambda { @result.pressure = valid_data }.should_not raise_error(ArgumentError)
|
157
153
|
end
|
158
|
-
|
154
|
+
|
159
155
|
it "only accepts Data::Distance for visibility" do
|
160
156
|
invalid_data = 1
|
161
157
|
invalid_data.class.should_not == Data::Distance
|
162
158
|
lambda { @result.visibility = invalid_data }.should raise_error(ArgumentError)
|
163
|
-
|
159
|
+
|
164
160
|
valid_data = Data::Distance.new
|
165
161
|
valid_data.class.should == Data::Distance
|
166
162
|
lambda { @result.visibility = valid_data }.should_not raise_error(ArgumentError)
|
167
163
|
end
|
168
|
-
|
164
|
+
|
169
165
|
it "only accepts Data::LocalTime || Data::LocalDateTime current_at" do
|
170
166
|
invalid_data = 1
|
171
167
|
invalid_data.class.should_not == Data::LocalTime
|
172
168
|
invalid_data.class.should_not == Data::LocalDateTime
|
173
169
|
lambda { @result.current_at = invalid_data }.should raise_error(ArgumentError)
|
174
|
-
|
170
|
+
|
175
171
|
valid_data = Data::LocalTime.new
|
176
172
|
valid_data.class.should == Data::LocalTime
|
177
173
|
lambda { @result.current_at = valid_data }.should_not raise_error(ArgumentError)
|
178
|
-
|
174
|
+
|
179
175
|
valid_data = Data::LocalDateTime.new(2009,1,1)
|
180
176
|
valid_data.class.should == Data::LocalDateTime
|
181
177
|
lambda { @result.current_at = valid_data }.should_not raise_error(ArgumentError)
|
182
178
|
end
|
183
|
-
|
179
|
+
|
184
180
|
it "only accepts Data::LocalTime || Data::LocalDateTime current_at" do
|
185
181
|
invalid_data = 1
|
186
182
|
invalid_data.class.should_not == Data::LocalTime
|
187
183
|
invalid_data.class.should_not == Data::LocalDateTime
|
188
184
|
lambda { @result.updated_at = invalid_data }.should raise_error(ArgumentError)
|
189
|
-
|
185
|
+
|
190
186
|
valid_data = Data::LocalTime.new
|
191
187
|
valid_data.class.should == Data::LocalTime
|
192
188
|
lambda { @result.updated_at = valid_data }.should_not raise_error(ArgumentError)
|
193
|
-
|
189
|
+
|
194
190
|
valid_data = Data::LocalDateTime.new(2009,1,1)
|
195
191
|
valid_data.class.should == Data::LocalDateTime
|
196
192
|
lambda { @result.updated_at = valid_data }.should_not raise_error(ArgumentError)
|
197
193
|
end
|
198
|
-
|
194
|
+
|
199
195
|
it "only accepts Date for date" do
|
200
196
|
invalid_data = 1
|
201
197
|
invalid_data.class.should_not == Date
|
202
198
|
lambda { @result.date = invalid_data }.should raise_error(ArgumentError)
|
203
|
-
|
199
|
+
|
204
200
|
valid_data = Date.new
|
205
201
|
valid_data.class.should == Date
|
206
202
|
lambda { @result.date = valid_data }.should_not raise_error(ArgumentError)
|
207
203
|
end
|
208
|
-
|
204
|
+
|
209
205
|
it "only accepts Data::Temperature for high" do
|
210
206
|
invalid_data = 1
|
211
207
|
invalid_data.class.should_not == Data::Temperature
|
212
208
|
lambda { @result.high = invalid_data }.should raise_error(ArgumentError)
|
213
|
-
|
209
|
+
|
214
210
|
valid_data = Data::Temperature.new
|
215
211
|
valid_data.class.should == Data::Temperature
|
216
212
|
lambda { @result.high = valid_data }.should_not raise_error(ArgumentError)
|
217
213
|
end
|
218
|
-
|
214
|
+
|
219
215
|
it "only accepts Data::Temperature for low" do
|
220
216
|
invalid_data = 1
|
221
217
|
invalid_data.class.should_not == Data::Temperature
|
222
218
|
lambda { @result.low = invalid_data }.should raise_error(ArgumentError)
|
223
|
-
|
219
|
+
|
224
220
|
valid_data = Data::Temperature.new
|
225
221
|
valid_data.class.should == Data::Temperature
|
226
222
|
lambda { @result.low = valid_data }.should_not raise_error(ArgumentError)
|
227
223
|
end
|
228
|
-
|
224
|
+
|
229
225
|
it "only accepts Fixnum for pop" do
|
230
226
|
invalid_data = "test"
|
231
227
|
invalid_data.class.should_not == Fixnum
|
232
228
|
lambda { @result.pop = invalid_data }.should raise_error(ArgumentError)
|
233
|
-
|
229
|
+
|
234
230
|
valid_data = 50
|
235
231
|
valid_data.class.should == Fixnum
|
236
232
|
lambda { @result.pop = valid_data }.should_not raise_error(ArgumentError)
|
237
233
|
end
|
238
|
-
|
234
|
+
|
239
235
|
it "only accepts Data::LocalDateTime for valid_start_date" do
|
240
236
|
invalid_data = 1
|
241
237
|
invalid_data.class.should_not == Data::LocalDateTime
|
242
238
|
lambda { @result.valid_start_date = invalid_data }.should raise_error(ArgumentError)
|
243
|
-
|
239
|
+
|
244
240
|
valid_data = Data::LocalDateTime.new(2009,1,1)
|
245
241
|
valid_data.class.should == Data::LocalDateTime
|
246
242
|
lambda { @result.valid_start_date = valid_data }.should_not raise_error(ArgumentError)
|
247
243
|
end
|
248
|
-
|
244
|
+
|
249
245
|
it "only accepts Data::LocalDateTime for valid_end_date" do
|
250
246
|
invalid_data = 1
|
251
247
|
invalid_data.class.should_not == Data::LocalDateTime
|
252
248
|
lambda { @result.valid_end_date = invalid_data }.should raise_error(ArgumentError)
|
253
|
-
|
249
|
+
|
254
250
|
valid_data = Data::LocalDateTime.new(2009,1,1)
|
255
251
|
valid_data.class.should == Data::LocalDateTime
|
256
252
|
lambda { @result.valid_end_date = valid_data }.should_not raise_error(ArgumentError)
|
257
253
|
end
|
258
|
-
|
254
|
+
|
259
255
|
it "sets valid_start_date and valid_end_date if given date" do
|
260
|
-
forecast = Measurement::Result.new
|
256
|
+
forecast = Barometer::Measurement::Result.new
|
261
257
|
forecast.valid_start_date.should be_nil
|
262
258
|
forecast.valid_end_date.should be_nil
|
263
259
|
date = Date.new(2009,05,05)
|
@@ -269,7 +265,7 @@ describe "Result Measurement" do
|
|
269
265
|
forecast.valid_start_date.hour.should == 0
|
270
266
|
forecast.valid_start_date.min.should == 0
|
271
267
|
forecast.valid_start_date.sec.should == 0
|
272
|
-
|
268
|
+
|
273
269
|
forecast.valid_end_date.should_not be_nil
|
274
270
|
forecast.valid_end_date.year.should == date.year
|
275
271
|
forecast.valid_end_date.month.should == date.month
|
@@ -278,119 +274,114 @@ describe "Result Measurement" do
|
|
278
274
|
forecast.valid_end_date.min.should == 59
|
279
275
|
forecast.valid_end_date.sec.should == 59
|
280
276
|
end
|
281
|
-
|
277
|
+
|
282
278
|
it "returns true if the valid_date range includes the given date" do
|
283
|
-
forecast = Measurement::Result.new
|
279
|
+
forecast = Barometer::Measurement::Result.new
|
284
280
|
forecast.date = Date.new(2009,05,05)
|
285
281
|
forecast.for_datetime?(Data::LocalDateTime.new(2009,5,5,12,0,0)).should be_true
|
286
282
|
end
|
287
|
-
|
283
|
+
|
288
284
|
it "returns false if the valid_date range excludes the given date" do
|
289
|
-
forecast = Measurement::Result.new
|
285
|
+
forecast = Barometer::Measurement::Result.new
|
290
286
|
forecast.date = Date.new(2009,05,05)
|
291
287
|
forecast.for_datetime?(Data::LocalDateTime.new(2009,5,4,12,0,0)).should be_false
|
292
288
|
end
|
293
|
-
|
289
|
+
|
294
290
|
it "only accepts Fixnum or Float for humidity" do
|
295
291
|
invalid_data = "invalid"
|
296
292
|
invalid_data.class.should_not == Fixnum
|
297
293
|
invalid_data.class.should_not == Float
|
298
294
|
lambda { @result.humidity = invalid_data }.should raise_error(ArgumentError)
|
299
|
-
|
295
|
+
|
300
296
|
valid_data = 1.to_i
|
301
297
|
valid_data.class.should == Fixnum
|
302
298
|
lambda { @result.humidity = valid_data }.should_not raise_error(ArgumentError)
|
303
|
-
|
299
|
+
|
304
300
|
valid_data = 1.0.to_f
|
305
301
|
valid_data.class.should == Float
|
306
302
|
lambda { @result.humidity = valid_data }.should_not raise_error(ArgumentError)
|
307
303
|
end
|
308
|
-
|
304
|
+
|
309
305
|
it "only accepts String for icon" do
|
310
306
|
invalid_data = 1
|
311
307
|
invalid_data.class.should_not == String
|
312
308
|
lambda { @result.icon = invalid_data }.should raise_error(ArgumentError)
|
313
|
-
|
309
|
+
|
314
310
|
valid_data = "valid"
|
315
311
|
valid_data.class.should == String
|
316
312
|
lambda { @result.icon = valid_data }.should_not raise_error(ArgumentError)
|
317
313
|
end
|
318
|
-
|
314
|
+
|
319
315
|
it "only accepts String for condition" do
|
320
316
|
invalid_data = 1
|
321
317
|
invalid_data.class.should_not == String
|
322
318
|
lambda { @result.condition = invalid_data }.should raise_error(ArgumentError)
|
323
|
-
|
319
|
+
|
324
320
|
valid_data = "valid"
|
325
321
|
valid_data.class.should == String
|
326
322
|
lambda { @result.condition = valid_data }.should_not raise_error(ArgumentError)
|
327
323
|
end
|
328
|
-
|
324
|
+
|
329
325
|
it "only accepts Data::Speed for wind" do
|
330
326
|
invalid_data = 1
|
331
327
|
invalid_data.class.should_not == Data::Speed
|
332
328
|
lambda { @result.wind = invalid_data }.should raise_error(ArgumentError)
|
333
|
-
|
329
|
+
|
334
330
|
valid_data = Data::Speed.new
|
335
331
|
valid_data.class.should == Data::Speed
|
336
332
|
lambda { @result.wind = valid_data }.should_not raise_error(ArgumentError)
|
337
333
|
end
|
338
|
-
|
334
|
+
|
339
335
|
it "only accepts Data::Sun for sun" do
|
340
336
|
invalid_data = 1
|
341
337
|
invalid_data.class.should_not == Data::Sun
|
342
338
|
lambda { @result.sun = invalid_data }.should raise_error(ArgumentError)
|
343
|
-
|
339
|
+
|
344
340
|
valid_data = Data::Sun.new
|
345
341
|
valid_data.class.should == Data::Sun
|
346
342
|
lambda { @result.sun = valid_data }.should_not raise_error(ArgumentError)
|
347
343
|
end
|
348
|
-
|
349
344
|
end
|
350
|
-
|
345
|
+
|
351
346
|
describe "method missing" do
|
352
|
-
|
353
347
|
before(:each) do
|
354
|
-
@result = Measurement::Result.new
|
348
|
+
@result = Barometer::Measurement::Result.new
|
355
349
|
end
|
356
|
-
|
350
|
+
|
357
351
|
it "responds to method + ?" do
|
358
352
|
valid_method = "humidity"
|
359
353
|
@result.respond_to?(valid_method).should be_true
|
360
354
|
lambda { @result.send(valid_method + "?") }.should_not raise_error(NoMethodError)
|
361
355
|
end
|
362
|
-
|
356
|
+
|
363
357
|
it "ignores non_method + ?" do
|
364
358
|
invalid_method = "humid"
|
365
359
|
@result.respond_to?(invalid_method).should be_false
|
366
360
|
lambda { @result.send(invalid_method + "?") }.should raise_error(NoMethodError)
|
367
361
|
end
|
368
|
-
|
362
|
+
|
369
363
|
it "returns true if set" do
|
370
364
|
@result.humidity = 10
|
371
365
|
@result.humidity.should_not be_nil
|
372
366
|
@result.humidity?.should be_true
|
373
367
|
end
|
374
|
-
|
368
|
+
|
375
369
|
it "returns false if not set" do
|
376
370
|
@result.humidity.should be_nil
|
377
371
|
@result.humidity?.should be_false
|
378
372
|
end
|
379
|
-
|
380
373
|
end
|
381
|
-
|
374
|
+
|
382
375
|
describe "answer simple questions, like" do
|
383
|
-
|
384
376
|
before(:each) do
|
385
|
-
@result = Measurement::Result.new
|
377
|
+
@result = Barometer::Measurement::Result.new
|
386
378
|
@result.temperature = Data::Temperature.new
|
387
379
|
@result.temperature << 5
|
388
380
|
@dew_point = Data::Temperature.new
|
389
381
|
@dew_point << 10
|
390
382
|
end
|
391
|
-
|
383
|
+
|
392
384
|
describe "windy?" do
|
393
|
-
|
394
385
|
before(:each) do
|
395
386
|
@wind = Data::Speed.new
|
396
387
|
@wind << 11
|
@@ -401,7 +392,7 @@ describe "Result Measurement" do
|
|
401
392
|
lambda { @result.windy? }.should_not raise_error(ArgumentError)
|
402
393
|
lambda { @result.windy?(10) }.should_not raise_error(ArgumentError)
|
403
394
|
end
|
404
|
-
|
395
|
+
|
405
396
|
it "returns nil when no wind" do
|
406
397
|
@result.wind?.should be_false
|
407
398
|
@result.windy?.should be_nil
|
@@ -409,28 +400,26 @@ describe "Result Measurement" do
|
|
409
400
|
@result.wind?.should be_true
|
410
401
|
@result.windy?.should_not be_nil
|
411
402
|
end
|
412
|
-
|
403
|
+
|
413
404
|
it "return true when current wind over threshold" do
|
414
405
|
@result.wind = @wind
|
415
406
|
@result.windy?.should be_true
|
416
407
|
@result.windy?(10).should be_true
|
417
408
|
end
|
418
|
-
|
409
|
+
|
419
410
|
it "return false when current wind under threshold" do
|
420
411
|
@result.wind = @wind
|
421
412
|
@result.windy?(15).should be_false
|
422
413
|
end
|
423
|
-
|
424
414
|
end
|
425
|
-
|
415
|
+
|
426
416
|
describe "day?" do
|
427
|
-
|
428
417
|
before(:each) do
|
429
418
|
@early_time = Data::LocalTime.parse("6:00 am")
|
430
419
|
@mid_time = Data::LocalTime.parse("11:00 am")
|
431
420
|
@late_time = Data::LocalTime.parse("8:00 pm")
|
432
421
|
@sun = Data::Sun.new(@early_time, @late_time)
|
433
|
-
|
422
|
+
|
434
423
|
end
|
435
424
|
|
436
425
|
it "requires Data::LocalTime object" do
|
@@ -439,7 +428,7 @@ describe "Result Measurement" do
|
|
439
428
|
lambda { @result.day? }.should raise_error(ArgumentError)
|
440
429
|
lambda { @result.day?(@mid_time) }.should_not raise_error(ArgumentError)
|
441
430
|
end
|
442
|
-
|
431
|
+
|
443
432
|
it "returns nil when no sun" do
|
444
433
|
@result.sun?.should be_false
|
445
434
|
@result.day?(@mid_time).should be_nil
|
@@ -447,28 +436,25 @@ describe "Result Measurement" do
|
|
447
436
|
@result.sun?.should be_true
|
448
437
|
@result.day?(@mid_time).should_not be_nil
|
449
438
|
end
|
450
|
-
|
439
|
+
|
451
440
|
it "return true when time between rise and set" do
|
452
441
|
@result.sun = @sun
|
453
442
|
@result.day?(@mid_time).should be_true
|
454
443
|
end
|
455
|
-
|
444
|
+
|
456
445
|
it "return false when time before rise or after set" do
|
457
446
|
sun = Data::Sun.new(@mid_time, @late_time)
|
458
447
|
@result.sun = sun
|
459
448
|
@result.day?(@early_time).should be_false
|
460
|
-
|
449
|
+
|
461
450
|
sun = Data::Sun.new(@early_time, @mid_time)
|
462
451
|
@result.sun = sun
|
463
452
|
@result.day?(@late_time).should be_false
|
464
453
|
end
|
465
|
-
|
466
454
|
end
|
467
|
-
|
455
|
+
|
468
456
|
describe "wet?" do
|
469
|
-
|
470
457
|
describe "wet_by_humidity?" do
|
471
|
-
|
472
458
|
it "requires real threshold number (or nil)" do
|
473
459
|
lambda { @result.send("_wet_by_humidity?","invalid") }.should raise_error(ArgumentError)
|
474
460
|
lambda { @result.send("_wet_by_humidity?") }.should_not raise_error(ArgumentError)
|
@@ -497,11 +483,9 @@ describe "Result Measurement" do
|
|
497
483
|
@result.send("_wet_by_humidity?",99).should be_false
|
498
484
|
@result.wet?(nil,99).should be_false
|
499
485
|
end
|
500
|
-
|
501
486
|
end
|
502
|
-
|
487
|
+
|
503
488
|
describe "wet_by_icon?" do
|
504
|
-
|
505
489
|
before(:each) do
|
506
490
|
@wet_icons = %w(rain thunderstorm)
|
507
491
|
end
|
@@ -534,11 +518,9 @@ describe "Result Measurement" do
|
|
534
518
|
@result.send("_wet_by_icon?",@wet_icons).should be_false
|
535
519
|
@result.wet?(@wet_icons).should be_false
|
536
520
|
end
|
537
|
-
|
538
521
|
end
|
539
|
-
|
522
|
+
|
540
523
|
describe "wet_by_dewpoint?" do
|
541
|
-
|
542
524
|
it "returns nil when no dewpoint" do
|
543
525
|
@result.dew_point?.should be_false
|
544
526
|
@result.send("_wet_by_dewpoint?").should be_nil
|
@@ -561,11 +543,9 @@ describe "Result Measurement" do
|
|
561
543
|
@result.send("_wet_by_dewpoint?").should be_false
|
562
544
|
@result.wet?.should be_false
|
563
545
|
end
|
564
|
-
|
565
546
|
end
|
566
|
-
|
547
|
+
|
567
548
|
describe "wet_by_pop?" do
|
568
|
-
|
569
549
|
it "requires real threshold number (or nil)" do
|
570
550
|
lambda { @result.send("_wet_by_pop?","invalid") }.should raise_error(ArgumentError)
|
571
551
|
lambda { @result.send("_wet_by_pop?") }.should_not raise_error(ArgumentError)
|
@@ -593,22 +573,18 @@ describe "Result Measurement" do
|
|
593
573
|
@result.send("_wet_by_pop?",50).should be_false
|
594
574
|
@result.wet?.should be_false
|
595
575
|
end
|
596
|
-
|
597
576
|
end
|
598
|
-
|
599
577
|
end
|
600
|
-
|
578
|
+
|
601
579
|
describe "sunny?" do
|
602
|
-
|
603
580
|
describe "sunny_by_icon?" do
|
604
|
-
|
605
581
|
before(:each) do
|
606
582
|
@sunny_icons = %w(sunny clear)
|
607
583
|
@early_time = Data::LocalTime.parse("6:00 am")
|
608
584
|
@mid_time = Data::LocalTime.parse("11:00 am")
|
609
585
|
@late_time = Data::LocalTime.parse("8:00 pm")
|
610
586
|
@sun = Data::Sun.new(@early_time, @late_time)
|
611
|
-
|
587
|
+
|
612
588
|
@result.sun = @sun
|
613
589
|
end
|
614
590
|
|
@@ -640,21 +616,17 @@ describe "Result Measurement" do
|
|
640
616
|
@result.send("_sunny_by_icon?",@sunny_icons).should be_false
|
641
617
|
@result.sunny?(@mid_time,@sunny_icons).should be_false
|
642
618
|
end
|
643
|
-
|
619
|
+
|
644
620
|
it "returns false when night" do
|
645
621
|
@result.icon = "sunny"
|
646
622
|
@result.send("_sunny_by_icon?",@sunny_icons).should be_true
|
647
623
|
@result.sunny?(@mid_time,@sunny_icons).should be_true
|
648
|
-
|
624
|
+
|
649
625
|
@sun = Data::Sun.new(@mid_time, @late_time)
|
650
626
|
@result.sun = @sun
|
651
627
|
@result.sunny?(@early_time,@sunny_icons).should be_false
|
652
628
|
end
|
653
|
-
|
654
629
|
end
|
655
|
-
|
656
630
|
end
|
657
|
-
|
658
631
|
end
|
659
|
-
|
660
|
-
end
|
632
|
+
end
|