barometer 0.1.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.
- data/LICENSE +20 -0
- data/README.rdoc +266 -0
- data/VERSION.yml +4 -0
- data/bin/barometer +63 -0
- data/lib/barometer.rb +52 -0
- data/lib/barometer/base.rb +52 -0
- data/lib/barometer/data.rb +15 -0
- data/lib/barometer/data/current.rb +93 -0
- data/lib/barometer/data/distance.rb +131 -0
- data/lib/barometer/data/forecast.rb +66 -0
- data/lib/barometer/data/geo.rb +98 -0
- data/lib/barometer/data/location.rb +20 -0
- data/lib/barometer/data/measurement.rb +161 -0
- data/lib/barometer/data/pressure.rb +133 -0
- data/lib/barometer/data/speed.rb +147 -0
- data/lib/barometer/data/sun.rb +35 -0
- data/lib/barometer/data/temperature.rb +164 -0
- data/lib/barometer/data/units.rb +55 -0
- data/lib/barometer/data/zone.rb +124 -0
- data/lib/barometer/extensions/graticule.rb +50 -0
- data/lib/barometer/extensions/httparty.rb +21 -0
- data/lib/barometer/query.rb +228 -0
- data/lib/barometer/services.rb +6 -0
- data/lib/barometer/services/google.rb +146 -0
- data/lib/barometer/services/noaa.rb +6 -0
- data/lib/barometer/services/service.rb +324 -0
- data/lib/barometer/services/weather_bug.rb +6 -0
- data/lib/barometer/services/weather_dot_com.rb +6 -0
- data/lib/barometer/services/wunderground.rb +285 -0
- data/lib/barometer/services/yahoo.rb +274 -0
- data/lib/barometer/weather.rb +187 -0
- data/spec/barometer_spec.rb +162 -0
- data/spec/data_current_spec.rb +225 -0
- data/spec/data_distance_spec.rb +336 -0
- data/spec/data_forecast_spec.rb +150 -0
- data/spec/data_geo_spec.rb +90 -0
- data/spec/data_location_spec.rb +59 -0
- data/spec/data_measurement_spec.rb +411 -0
- data/spec/data_pressure_spec.rb +336 -0
- data/spec/data_speed_spec.rb +374 -0
- data/spec/data_sun_spec.rb +76 -0
- data/spec/data_temperature_spec.rb +396 -0
- data/spec/data_zone_spec.rb +133 -0
- data/spec/fixtures/current_calgary_ab.xml +1 -0
- data/spec/fixtures/forecast_calgary_ab.xml +1 -0
- data/spec/fixtures/geocode_40_73.xml +1 -0
- data/spec/fixtures/geocode_90210.xml +1 -0
- data/spec/fixtures/geocode_T5B4M9.xml +1 -0
- data/spec/fixtures/geocode_calgary_ab.xml +1 -0
- data/spec/fixtures/geocode_newyork_ny.xml +1 -0
- data/spec/fixtures/google_calgary_ab.xml +1 -0
- data/spec/fixtures/yahoo_90210.xml +1 -0
- data/spec/query_spec.rb +469 -0
- data/spec/service_google_spec.rb +144 -0
- data/spec/service_wunderground_spec.rb +330 -0
- data/spec/service_yahoo_spec.rb +299 -0
- data/spec/services_spec.rb +1106 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/units_spec.rb +101 -0
- data/spec/weather_spec.rb +265 -0
- metadata +119 -0
@@ -0,0 +1,336 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Pressure" do
|
4
|
+
|
5
|
+
describe "when initialized" do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@pressure = Barometer::Pressure.new
|
9
|
+
end
|
10
|
+
|
11
|
+
it "defines METRIC_UNITS" do
|
12
|
+
Barometer::Pressure.const_defined?("METRIC_UNITS").should be_true
|
13
|
+
Barometer::Pressure::METRIC_UNITS.should == "mb"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "defines IMPERIAL_UNITS" do
|
17
|
+
Barometer::Pressure.const_defined?("IMPERIAL_UNITS").should be_true
|
18
|
+
Barometer::Pressure::IMPERIAL_UNITS.should == "in"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "responds to millibars" do
|
22
|
+
@pressure.millibars.should be_nil
|
23
|
+
end
|
24
|
+
|
25
|
+
it "responds to inches" do
|
26
|
+
@pressure.inches.should be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
it "responds to metric_default" do
|
30
|
+
lambda { @pressure.metric_default = 5 }.should_not raise_error(NotImplementedError)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "responds to imperial_default" do
|
34
|
+
lambda { @pressure.imperial_default = 5 }.should_not raise_error(NotImplementedError)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "responds to nil?" do
|
38
|
+
@pressure.nil?.should be_true
|
39
|
+
@pressure.mb = 5
|
40
|
+
@pressure.nil?.should be_false
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "conversion" do
|
46
|
+
|
47
|
+
# For all conversions
|
48
|
+
# 721.64 mb = 21.31 in
|
49
|
+
before(:each) do
|
50
|
+
@in = 21.31
|
51
|
+
@mb = 721.64
|
52
|
+
end
|
53
|
+
|
54
|
+
it "requires a value, that is either Integer or Float" do
|
55
|
+
Barometer::Pressure.mb_to_in(nil).should be_nil
|
56
|
+
Barometer::Pressure.in_to_mb(nil).should be_nil
|
57
|
+
|
58
|
+
not_float_or_integer = "string"
|
59
|
+
Barometer::Pressure.mb_to_in(not_float_or_integer).should be_nil
|
60
|
+
Barometer::Pressure.in_to_mb(not_float_or_integer).should be_nil
|
61
|
+
end
|
62
|
+
|
63
|
+
it "converts MB to IN" do
|
64
|
+
((Barometer::Pressure.mb_to_in(@mb)*100).round/100.0).should == @in
|
65
|
+
end
|
66
|
+
|
67
|
+
it "converts IN to MB" do
|
68
|
+
((Barometer::Pressure.in_to_mb(@in)*100).round/100.0).should == @mb
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "updating" do
|
74
|
+
|
75
|
+
before(:each) do
|
76
|
+
@pressure = Barometer::Pressure.new
|
77
|
+
@in = 21.31
|
78
|
+
@mb = 721.64
|
79
|
+
end
|
80
|
+
|
81
|
+
it "nils IN if new MB converts to a IN that changes more then 1 unit" do
|
82
|
+
@pressure.inches = (@in + 1.1)
|
83
|
+
@pressure.update_inches(@mb)
|
84
|
+
@pressure.inches.should be_nil
|
85
|
+
end
|
86
|
+
|
87
|
+
it "doesn't update IN if new MB converts to a IN that does not change more then 1 unit" do
|
88
|
+
@pressure.inches = (@in + 0.9)
|
89
|
+
@pressure.update_inches(@mb)
|
90
|
+
@pressure.inches.should == (@in + 0.9)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "doesn't set IN if not already set" do
|
94
|
+
@pressure.inches.should be_nil
|
95
|
+
@pressure.millibars.should be_nil
|
96
|
+
@pressure.update_inches(@mb)
|
97
|
+
@pressure.inches.should be_nil
|
98
|
+
@pressure.millibars.should be_nil
|
99
|
+
end
|
100
|
+
|
101
|
+
it "nils MB if new IN converts to a MB that changes more then 1 unit" do
|
102
|
+
@pressure.millibars = (@mb + 1.1)
|
103
|
+
@pressure.update_millibars(@in)
|
104
|
+
@pressure.millibars.should be_nil
|
105
|
+
end
|
106
|
+
|
107
|
+
it "doesn't update MB if new IN converts to a MB that does not change more then 1 unit" do
|
108
|
+
@pressure.millibars = (@mb + 0.9)
|
109
|
+
@pressure.update_millibars(@in)
|
110
|
+
@pressure.millibars.should == (@mb + 0.9)
|
111
|
+
end
|
112
|
+
|
113
|
+
it "doesn't set MB if not already set" do
|
114
|
+
@pressure.inches.should be_nil
|
115
|
+
@pressure.millibars.should be_nil
|
116
|
+
@pressure.update_millibars(@in)
|
117
|
+
@pressure.inches.should be_nil
|
118
|
+
@pressure.millibars.should be_nil
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
describe "storing" do
|
124
|
+
|
125
|
+
before(:each) do
|
126
|
+
@pressure = Barometer::Pressure.new
|
127
|
+
@in = 21.31
|
128
|
+
@mb = 721.64
|
129
|
+
end
|
130
|
+
|
131
|
+
it "doesn't update MB if nil value (or equivalent)" do
|
132
|
+
@pressure.millibars.should be_nil
|
133
|
+
@pressure.mb = nil
|
134
|
+
@pressure.millibars.should be_nil
|
135
|
+
@pressure.mb = "na"
|
136
|
+
@pressure.millibars.should be_nil
|
137
|
+
end
|
138
|
+
|
139
|
+
it "stores MB and resets IN" do
|
140
|
+
@pressure.millibars.should be_nil
|
141
|
+
@pressure.inches = (@in + 1.1)
|
142
|
+
@pressure.mb = @mb
|
143
|
+
@pressure.millibars.should == @mb
|
144
|
+
@pressure.inches.should be_nil
|
145
|
+
end
|
146
|
+
|
147
|
+
it "doesn't update IN if nil value (or equivalent)" do
|
148
|
+
@pressure.inches.should be_nil
|
149
|
+
@pressure.in = nil
|
150
|
+
@pressure.inches.should be_nil
|
151
|
+
@pressure.in = "na"
|
152
|
+
@pressure.inches.should be_nil
|
153
|
+
end
|
154
|
+
|
155
|
+
it "stores IN and resets MB" do
|
156
|
+
@pressure.inches.should be_nil
|
157
|
+
@pressure.millibars = (@mb + 1.1)
|
158
|
+
@pressure.in = @in
|
159
|
+
@pressure.inches.should == @in
|
160
|
+
@pressure.millibars.should be_nil
|
161
|
+
end
|
162
|
+
|
163
|
+
end
|
164
|
+
|
165
|
+
describe "retrieving" do
|
166
|
+
|
167
|
+
before(:each) do
|
168
|
+
@pressure = Barometer::Pressure.new
|
169
|
+
@in = 21.31
|
170
|
+
@mb = 721.64
|
171
|
+
end
|
172
|
+
|
173
|
+
it "returns MB if it exists" do
|
174
|
+
@pressure.mb = @mb
|
175
|
+
@pressure.millibars.should == @mb
|
176
|
+
@pressure.mb(false).should == @mb
|
177
|
+
end
|
178
|
+
|
179
|
+
it "auto converts from IN if MB is nil and IN exists" do
|
180
|
+
@pressure.in = @in
|
181
|
+
@pressure.inches.should == @in
|
182
|
+
@pressure.millibars.should be_nil
|
183
|
+
@pressure.mb(false).should == @mb
|
184
|
+
end
|
185
|
+
|
186
|
+
it "allows a float to be returned for MB" do
|
187
|
+
mb = 721.12
|
188
|
+
@pressure.mb = mb
|
189
|
+
@pressure.millibars.should == mb
|
190
|
+
@pressure.mb(true).should == mb.to_i
|
191
|
+
@pressure.mb(false).should == mb.to_f
|
192
|
+
end
|
193
|
+
|
194
|
+
it "allows only 2 decimal precision for MB" do
|
195
|
+
mb = 721.1234
|
196
|
+
@pressure.mb = mb
|
197
|
+
@pressure.millibars.should == mb
|
198
|
+
@pressure.mb(false).should == 721.12
|
199
|
+
end
|
200
|
+
|
201
|
+
it "returns IN if it exists" do
|
202
|
+
@pressure.in = @in
|
203
|
+
@pressure.inches.should == @in
|
204
|
+
@pressure.in(false).should == @in
|
205
|
+
end
|
206
|
+
|
207
|
+
it "auto converts from MB if IN is nil and MB exists" do
|
208
|
+
@pressure.mb = @mb
|
209
|
+
@pressure.millibars.should == @mb
|
210
|
+
@pressure.inches.should be_nil
|
211
|
+
@pressure.in(false).should == @in
|
212
|
+
end
|
213
|
+
|
214
|
+
it "allows a float to be returned for IN" do
|
215
|
+
inches = 21.12
|
216
|
+
@pressure.in = inches
|
217
|
+
@pressure.inches.should == inches
|
218
|
+
@pressure.in(true).should == inches.to_i
|
219
|
+
@pressure.in(false).should == inches.to_f
|
220
|
+
end
|
221
|
+
|
222
|
+
it "allows only 2 decimal precision for IN" do
|
223
|
+
inches = 21.1234
|
224
|
+
@pressure.in = inches
|
225
|
+
@pressure.inches.should == inches
|
226
|
+
@pressure.in(false).should == 21.12
|
227
|
+
end
|
228
|
+
|
229
|
+
end
|
230
|
+
|
231
|
+
describe "operators" do
|
232
|
+
|
233
|
+
before(:each) do
|
234
|
+
@in = 21.31
|
235
|
+
@mb = 721.64
|
236
|
+
@pressure_low = Barometer::Pressure.new
|
237
|
+
@pressure_low.mb = (@mb - 1.0)
|
238
|
+
@pressure_high = Barometer::Pressure.new
|
239
|
+
@pressure_high.mb = (@mb + 1.0)
|
240
|
+
@pressure = Barometer::Pressure.new
|
241
|
+
@pressure.mb = @mb
|
242
|
+
@pressure_same = Barometer::Pressure.new
|
243
|
+
@pressure_same.mb = @mb
|
244
|
+
end
|
245
|
+
|
246
|
+
it "defines <=>" do
|
247
|
+
Barometer::Pressure.method_defined?("<=>").should be_true
|
248
|
+
(@pressure_low <=> @pressure_high).should == -1
|
249
|
+
(@pressure_high <=> @pressure_low).should == 1
|
250
|
+
(@pressure <=> @pressure_same).should == 0
|
251
|
+
end
|
252
|
+
|
253
|
+
it "defines <" do
|
254
|
+
Barometer::Pressure.method_defined?("<").should be_true
|
255
|
+
@pressure_low.should < @pressure_high
|
256
|
+
@pressure_high.should_not < @pressure_low
|
257
|
+
@pressure.should_not < @pressure_same
|
258
|
+
end
|
259
|
+
|
260
|
+
it "defines >" do
|
261
|
+
Barometer::Pressure.method_defined?(">").should be_true
|
262
|
+
@pressure_low.should_not > @pressure_high
|
263
|
+
@pressure_high.should > @pressure_low
|
264
|
+
@pressure.should_not > @pressure_same
|
265
|
+
end
|
266
|
+
|
267
|
+
it "defines ==" do
|
268
|
+
Barometer::Pressure.method_defined?("==").should be_true
|
269
|
+
@pressure_low.should_not == @pressure_high
|
270
|
+
@pressure.should == @pressure_same
|
271
|
+
end
|
272
|
+
|
273
|
+
it "defines <=" do
|
274
|
+
Barometer::Pressure.method_defined?("<=").should be_true
|
275
|
+
@pressure_low.should <= @pressure_high
|
276
|
+
@pressure_high.should_not <= @pressure_low
|
277
|
+
@pressure.should <= @pressure_same
|
278
|
+
end
|
279
|
+
|
280
|
+
it "defines >=" do
|
281
|
+
Barometer::Pressure.method_defined?(">=").should be_true
|
282
|
+
@pressure_low.should_not >= @pressure_high
|
283
|
+
@pressure_high.should >= @pressure_low
|
284
|
+
@pressure.should >= @pressure_same
|
285
|
+
end
|
286
|
+
|
287
|
+
end
|
288
|
+
|
289
|
+
describe "changing units" do
|
290
|
+
|
291
|
+
before(:each) do
|
292
|
+
@in = 21.31
|
293
|
+
@mb = 721.64
|
294
|
+
@pressure = Barometer::Pressure.new
|
295
|
+
@pressure.mb = @mb
|
296
|
+
end
|
297
|
+
|
298
|
+
it "returns just the integer value (no units)" do
|
299
|
+
@pressure.metric?.should be_true
|
300
|
+
@pressure.to_i.should == @mb.to_i
|
301
|
+
|
302
|
+
@pressure.imperial!
|
303
|
+
@pressure.metric?.should be_false
|
304
|
+
@pressure.to_i.should == @in.to_i
|
305
|
+
end
|
306
|
+
|
307
|
+
it "returns just the float value (no units)" do
|
308
|
+
@pressure.metric?.should be_true
|
309
|
+
@pressure.to_f.should == @mb.to_f
|
310
|
+
|
311
|
+
@pressure.imperial!
|
312
|
+
@pressure.metric?.should be_false
|
313
|
+
@pressure.to_f.should == @in.to_f
|
314
|
+
end
|
315
|
+
|
316
|
+
it "returns just the integer value with units" do
|
317
|
+
@pressure.metric?.should be_true
|
318
|
+
@pressure.to_s.should == "#{@mb.to_i} #{Barometer::Pressure::METRIC_UNITS}"
|
319
|
+
|
320
|
+
@pressure.imperial!
|
321
|
+
@pressure.metric?.should be_false
|
322
|
+
@pressure.to_s.should == "#{@in.to_i} #{Barometer::Pressure::IMPERIAL_UNITS}"
|
323
|
+
end
|
324
|
+
|
325
|
+
it "returns just the units" do
|
326
|
+
@pressure.metric?.should be_true
|
327
|
+
@pressure.units.should == Barometer::Pressure::METRIC_UNITS
|
328
|
+
|
329
|
+
@pressure.imperial!
|
330
|
+
@pressure.metric?.should be_false
|
331
|
+
@pressure.units.should == Barometer::Pressure::IMPERIAL_UNITS
|
332
|
+
end
|
333
|
+
|
334
|
+
end
|
335
|
+
|
336
|
+
end
|
@@ -0,0 +1,374 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Speed" do
|
4
|
+
|
5
|
+
describe "when initialized" do
|
6
|
+
|
7
|
+
it "defines METRIC_UNITS" do
|
8
|
+
Barometer::Speed.const_defined?("METRIC_UNITS").should be_true
|
9
|
+
Barometer::Speed::METRIC_UNITS.should == "kph"
|
10
|
+
end
|
11
|
+
|
12
|
+
it "defines IMPERIAL_UNITS" do
|
13
|
+
Barometer::Speed.const_defined?("IMPERIAL_UNITS").should be_true
|
14
|
+
Barometer::Speed::IMPERIAL_UNITS.should == "mph"
|
15
|
+
end
|
16
|
+
|
17
|
+
before(:each) do
|
18
|
+
@speed = Barometer::Speed.new
|
19
|
+
end
|
20
|
+
|
21
|
+
it "responds to kilometers" do
|
22
|
+
@speed.kilometers.should be_nil
|
23
|
+
end
|
24
|
+
|
25
|
+
it "responds to miles" do
|
26
|
+
@speed.miles.should be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
it "responds to degrees" do
|
30
|
+
@speed.degrees.should be_nil
|
31
|
+
end
|
32
|
+
|
33
|
+
it "responds to direction" do
|
34
|
+
@speed.direction.should be_nil
|
35
|
+
end
|
36
|
+
|
37
|
+
it "responds to metric_default" do
|
38
|
+
lambda { @speed.metric_default = 5 }.should_not raise_error(NotImplementedError)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "responds to imperial_default" do
|
42
|
+
lambda { @speed.imperial_default = 5 }.should_not raise_error(NotImplementedError)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "responds to nil?" do
|
46
|
+
@speed.nil?.should be_true
|
47
|
+
@speed.kph = 5
|
48
|
+
@speed.nil?.should be_false
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "conversion" do
|
54
|
+
|
55
|
+
# For all conversions
|
56
|
+
# 16.09 km/h = 10.0 mph
|
57
|
+
before(:each) do
|
58
|
+
@m = 10.0
|
59
|
+
@km = 16.09
|
60
|
+
end
|
61
|
+
|
62
|
+
it "requires a value, that is either Integer or Float" do
|
63
|
+
Barometer::Speed.km_to_m(nil).should be_nil
|
64
|
+
Barometer::Speed.m_to_km(nil).should be_nil
|
65
|
+
|
66
|
+
not_float_or_integer = "string"
|
67
|
+
Barometer::Speed.km_to_m(not_float_or_integer).should be_nil
|
68
|
+
Barometer::Speed.m_to_km(not_float_or_integer).should be_nil
|
69
|
+
end
|
70
|
+
|
71
|
+
it "converts km/h to mph" do
|
72
|
+
# to get equality, we need to tone down the precision
|
73
|
+
((Barometer::Speed.km_to_m(@km)*10).round/10.0).should == @m
|
74
|
+
end
|
75
|
+
|
76
|
+
it "converts mph to km/h" do
|
77
|
+
Barometer::Speed.m_to_km(@m).should == @km
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "updating" do
|
83
|
+
|
84
|
+
before(:each) do
|
85
|
+
@speed = Barometer::Speed.new
|
86
|
+
@m = 10.0
|
87
|
+
@km = 16.09
|
88
|
+
end
|
89
|
+
|
90
|
+
it "nils M if new KM converts to a M that changes more then 1 unit" do
|
91
|
+
@speed.miles = (@m + 1.1)
|
92
|
+
@speed.update_miles(@km)
|
93
|
+
@speed.miles.should be_nil
|
94
|
+
end
|
95
|
+
|
96
|
+
it "doesn't update M if new KM converts to a M that does not change more then 1 unit" do
|
97
|
+
@speed.miles = (@m + 0.9)
|
98
|
+
@speed.update_miles(@km)
|
99
|
+
@speed.miles.should == (@m + 0.9)
|
100
|
+
end
|
101
|
+
|
102
|
+
it "doesn't set M if not already set" do
|
103
|
+
@speed.miles.should be_nil
|
104
|
+
@speed.kilometers.should be_nil
|
105
|
+
@speed.update_miles(@km)
|
106
|
+
@speed.miles.should be_nil
|
107
|
+
@speed.kilometers.should be_nil
|
108
|
+
end
|
109
|
+
|
110
|
+
it "nils KM if new M converts to a KM that changes more then 1 unit" do
|
111
|
+
@speed.kilometers = (@km + 1.1)
|
112
|
+
@speed.update_kilometers(@m)
|
113
|
+
@speed.kilometers.should be_nil
|
114
|
+
end
|
115
|
+
|
116
|
+
it "doesn't update KM if new M converts to a KM that does not change more then 1 unit" do
|
117
|
+
@speed.kilometers = (@km + 0.9)
|
118
|
+
@speed.update_kilometers(@m)
|
119
|
+
@speed.kilometers.should == (@km + 0.9)
|
120
|
+
end
|
121
|
+
|
122
|
+
it "doesn't set KM if not already set" do
|
123
|
+
@speed.miles.should be_nil
|
124
|
+
@speed.kilometers.should be_nil
|
125
|
+
@speed.update_kilometers(@m)
|
126
|
+
@speed.miles.should be_nil
|
127
|
+
@speed.kilometers.should be_nil
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
describe "storing" do
|
133
|
+
|
134
|
+
before(:each) do
|
135
|
+
@speed = Barometer::Speed.new
|
136
|
+
@m = 10.0
|
137
|
+
@km = 16.09
|
138
|
+
end
|
139
|
+
|
140
|
+
it "doesn't update KM if nil value (or equivalent)" do
|
141
|
+
@speed.kilometers.should be_nil
|
142
|
+
@speed.kph = nil
|
143
|
+
@speed.kilometers.should be_nil
|
144
|
+
@speed.kph = "na"
|
145
|
+
@speed.kilometers.should be_nil
|
146
|
+
end
|
147
|
+
|
148
|
+
it "stores KM and resets M" do
|
149
|
+
@speed.kilometers.should be_nil
|
150
|
+
@speed.miles = (@m + 1.1)
|
151
|
+
@speed.kph = @km
|
152
|
+
@speed.kilometers.should == @km
|
153
|
+
@speed.miles.should be_nil
|
154
|
+
end
|
155
|
+
|
156
|
+
it "doesn't update M if nil value (or equivalent)" do
|
157
|
+
@speed.miles.should be_nil
|
158
|
+
@speed.mph = nil
|
159
|
+
@speed.miles.should be_nil
|
160
|
+
@speed.mph = "na"
|
161
|
+
@speed.miles.should be_nil
|
162
|
+
end
|
163
|
+
|
164
|
+
it "stores M, resets KM" do
|
165
|
+
@speed.miles.should be_nil
|
166
|
+
@speed.kilometers = (@km + 1.1)
|
167
|
+
@speed.mph = @m
|
168
|
+
@speed.miles.should == @m
|
169
|
+
@speed.kilometers.should be_nil
|
170
|
+
end
|
171
|
+
|
172
|
+
it "doesn't update direction if nil value (or equivalent)" do
|
173
|
+
@speed.direction.should be_nil
|
174
|
+
@speed.direction = nil
|
175
|
+
@speed.direction.should be_nil
|
176
|
+
@speed.direction = "na"
|
177
|
+
@speed.direction.should_not be_nil
|
178
|
+
end
|
179
|
+
|
180
|
+
it "stores direction" do
|
181
|
+
@speed.direction.should be_nil
|
182
|
+
@speed.direction = "SSW"
|
183
|
+
@speed.direction.should == "SSW"
|
184
|
+
end
|
185
|
+
|
186
|
+
it "doesn't update degrees if nil value (or equivalent)" do
|
187
|
+
@speed.degrees.should be_nil
|
188
|
+
@speed.degrees = nil
|
189
|
+
@speed.degrees.should be_nil
|
190
|
+
@speed.degrees = "na"
|
191
|
+
@speed.degrees.should be_nil
|
192
|
+
end
|
193
|
+
|
194
|
+
it "stores degrees" do
|
195
|
+
@speed.degrees.should be_nil
|
196
|
+
@speed.degrees = 90.0
|
197
|
+
@speed.degrees.should == 90.0
|
198
|
+
end
|
199
|
+
|
200
|
+
end
|
201
|
+
|
202
|
+
describe "retrieving" do
|
203
|
+
|
204
|
+
before(:each) do
|
205
|
+
@speed = Barometer::Speed.new
|
206
|
+
@m = 10.0
|
207
|
+
@km = 16.09
|
208
|
+
end
|
209
|
+
|
210
|
+
it "returns KM if it exists" do
|
211
|
+
@speed.kph = @km
|
212
|
+
@speed.kilometers.should == @km
|
213
|
+
@speed.kph(false).should == @km
|
214
|
+
end
|
215
|
+
|
216
|
+
it "auto converts from M if KM is nil and M exists" do
|
217
|
+
@speed.mph = @m
|
218
|
+
@speed.miles.should == @m
|
219
|
+
@speed.kilometers.should be_nil
|
220
|
+
@speed.kph(false).should == @km
|
221
|
+
end
|
222
|
+
|
223
|
+
it "allows a float to be returned for KM" do
|
224
|
+
km = 16.12
|
225
|
+
@speed.kph = km
|
226
|
+
@speed.kilometers.should == km
|
227
|
+
@speed.kph(true).should == km.to_i
|
228
|
+
@speed.kph(false).should == km.to_f
|
229
|
+
end
|
230
|
+
|
231
|
+
it "allows only 2 decimal precision for KM" do
|
232
|
+
km = 16.1234
|
233
|
+
@speed.kph = km
|
234
|
+
@speed.kilometers.should == km
|
235
|
+
@speed.kph(false).should == 16.12
|
236
|
+
end
|
237
|
+
|
238
|
+
it "returns M if it exists" do
|
239
|
+
@speed.mph = @m
|
240
|
+
@speed.miles.should == @m
|
241
|
+
@speed.mph.should == @m
|
242
|
+
end
|
243
|
+
|
244
|
+
it "auto converts from KM if M is nil and KM exists" do
|
245
|
+
@speed.kph = @km
|
246
|
+
@speed.kilometers.should == @km
|
247
|
+
@speed.miles.should be_nil
|
248
|
+
# to get equality, we need to tone down the precision
|
249
|
+
((@speed.mph*10).round/10.0).should == @m
|
250
|
+
end
|
251
|
+
|
252
|
+
it "allows a float to be returned for M" do
|
253
|
+
m = 10.12
|
254
|
+
@speed.mph = m
|
255
|
+
@speed.miles.should == m
|
256
|
+
@speed.mph(true).should == m.to_i
|
257
|
+
@speed.mph(false).should == m.to_f
|
258
|
+
end
|
259
|
+
|
260
|
+
it "allows only 2 decimal precision for M" do
|
261
|
+
m = 10.1234
|
262
|
+
@speed.mph = m
|
263
|
+
@speed.miles.should == m
|
264
|
+
@speed.mph(false).should == 10.12
|
265
|
+
end
|
266
|
+
|
267
|
+
end
|
268
|
+
|
269
|
+
describe "operators" do
|
270
|
+
|
271
|
+
before(:each) do
|
272
|
+
@m = 10.0
|
273
|
+
@km = 16.09
|
274
|
+
@speed_low = Barometer::Speed.new
|
275
|
+
@speed_low.kph = (@km - 1.0)
|
276
|
+
@speed_high = Barometer::Speed.new
|
277
|
+
@speed_high.kph = (@km + 1.0)
|
278
|
+
@speed = Barometer::Speed.new
|
279
|
+
@speed.kph = @km
|
280
|
+
@speed_same = Barometer::Speed.new
|
281
|
+
@speed_same.kph = @km
|
282
|
+
end
|
283
|
+
|
284
|
+
it "defines <=>" do
|
285
|
+
Barometer::Speed.method_defined?("<=>").should be_true
|
286
|
+
(@speed_low <=> @speed_high).should == -1
|
287
|
+
(@speed_high <=> @speed_low).should == 1
|
288
|
+
(@speed <=> @speed_same).should == 0
|
289
|
+
end
|
290
|
+
|
291
|
+
it "defines <" do
|
292
|
+
Barometer::Speed.method_defined?("<").should be_true
|
293
|
+
@speed_low.should < @speed_high
|
294
|
+
@speed_high.should_not < @speed_low
|
295
|
+
@speed.should_not < @speed_same
|
296
|
+
end
|
297
|
+
|
298
|
+
it "defines >" do
|
299
|
+
Barometer::Speed.method_defined?(">").should be_true
|
300
|
+
@speed_low.should_not > @speed_high
|
301
|
+
@speed_high.should > @speed_low
|
302
|
+
@speed.should_not > @speed_same
|
303
|
+
end
|
304
|
+
|
305
|
+
it "defines ==" do
|
306
|
+
Barometer::Speed.method_defined?("==").should be_true
|
307
|
+
@speed_low.should_not == @speed_high
|
308
|
+
@speed.should == @speed_same
|
309
|
+
end
|
310
|
+
|
311
|
+
it "defines <=" do
|
312
|
+
Barometer::Speed.method_defined?("<=").should be_true
|
313
|
+
@speed_low.should <= @speed_high
|
314
|
+
@speed_high.should_not <= @speed_low
|
315
|
+
@speed.should <= @speed_same
|
316
|
+
end
|
317
|
+
|
318
|
+
it "defines >=" do
|
319
|
+
Barometer::Speed.method_defined?(">=").should be_true
|
320
|
+
@speed_low.should_not >= @speed_high
|
321
|
+
@speed_high.should >= @speed_low
|
322
|
+
@speed.should >= @speed_same
|
323
|
+
end
|
324
|
+
|
325
|
+
end
|
326
|
+
|
327
|
+
describe "changing units" do
|
328
|
+
|
329
|
+
before(:each) do
|
330
|
+
@m = 10.51
|
331
|
+
@km = ((Barometer::Speed.m_to_km(@m)*100).round/100.0)
|
332
|
+
@speed = Barometer::Speed.new
|
333
|
+
@speed.mph = @m
|
334
|
+
end
|
335
|
+
|
336
|
+
it "returns just the integer value (no units)" do
|
337
|
+
@speed.metric?.should be_true
|
338
|
+
@speed.to_i.should == @km.to_i
|
339
|
+
|
340
|
+
@speed.imperial!
|
341
|
+
@speed.metric?.should be_false
|
342
|
+
@speed.to_i.should == @m.to_i
|
343
|
+
end
|
344
|
+
|
345
|
+
it "returns just the float value (no units)" do
|
346
|
+
@speed.metric?.should be_true
|
347
|
+
@speed.to_f.should == @km.to_f
|
348
|
+
|
349
|
+
@speed.imperial!
|
350
|
+
@speed.metric?.should be_false
|
351
|
+
@speed.to_f.should == @m.to_f
|
352
|
+
end
|
353
|
+
|
354
|
+
it "returns just the integer value with units" do
|
355
|
+
@speed.metric?.should be_true
|
356
|
+
@speed.to_s.should == "#{@km.to_i} #{Barometer::Speed::METRIC_UNITS}"
|
357
|
+
|
358
|
+
@speed.imperial!
|
359
|
+
@speed.metric?.should be_false
|
360
|
+
@speed.to_s.should == "#{@m.to_i} #{Barometer::Speed::IMPERIAL_UNITS}"
|
361
|
+
end
|
362
|
+
|
363
|
+
it "returns just the units" do
|
364
|
+
@speed.metric?.should be_true
|
365
|
+
@speed.units.should == Barometer::Speed::METRIC_UNITS
|
366
|
+
|
367
|
+
@speed.imperial!
|
368
|
+
@speed.metric?.should be_false
|
369
|
+
@speed.units.should == Barometer::Speed::IMPERIAL_UNITS
|
370
|
+
end
|
371
|
+
|
372
|
+
end
|
373
|
+
|
374
|
+
end
|