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
@@ -7,16 +7,16 @@ module Barometer
|
|
7
7
|
# with methods for insertion and searching
|
8
8
|
#
|
9
9
|
class Measurement::ResultArray < Array
|
10
|
-
|
10
|
+
|
11
11
|
def <<(forecast)
|
12
12
|
raise ArgumentError unless forecast.is_a?(Measurement::Result)
|
13
13
|
super(forecast)
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
def [](index)
|
17
17
|
index.is_a?(Fixnum) ? super(index) : self.for(index)
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
#
|
21
21
|
# Returns a forecast for a day given by a Date, DateTime,
|
22
22
|
# Time, or a string that can be parsed to a Data::LocalDateTime
|
@@ -24,9 +24,9 @@ module Barometer
|
|
24
24
|
# credit: http://github.com/jdpace/weatherman/
|
25
25
|
#
|
26
26
|
def for(datetime)
|
27
|
-
|
27
|
+
|
28
28
|
return nil unless self.size > 0
|
29
|
-
|
29
|
+
|
30
30
|
# Format date into a Date class
|
31
31
|
datetime = case datetime.class.name
|
32
32
|
when 'Date'
|
@@ -41,35 +41,35 @@ module Barometer
|
|
41
41
|
when 'DateTime'
|
42
42
|
Data::LocalDateTime.parse(datetime)
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
day = nil
|
46
46
|
self.each do |f|
|
47
47
|
day = f if f.for_datetime?(datetime)
|
48
48
|
end
|
49
49
|
return day
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
#
|
53
53
|
# answer simple questions
|
54
54
|
#
|
55
|
-
|
55
|
+
|
56
56
|
def windy?(datetime, threshold=10)
|
57
57
|
(forecast = self[datetime]) ? forecast.windy?(threshold) : nil
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
def day?(datetime)
|
61
61
|
local_time = Data::LocalTime.parse(datetime)
|
62
62
|
(forecast = self[datetime]) ? forecast.day?(local_time) : nil
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
def sunny?(datetime, sunny_icons=nil)
|
66
66
|
local_time = Data::LocalTime.parse(datetime)
|
67
67
|
(forecast = self[datetime]) ? forecast.sunny?(local_time, sunny_icons) : nil
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
def wet?(datetime, wet_icons=nil, pop_threshold=50, humidity_threshold=99)
|
71
71
|
(forecast = self[datetime]) ? forecast.wet?(wet_icons,pop_threshold,humidity_threshold) : nil
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
end
|
75
75
|
end
|
data/lib/barometer/query.rb
CHANGED
@@ -17,7 +17,7 @@ module Barometer
|
|
17
17
|
# not accept the query string.
|
18
18
|
#
|
19
19
|
class Query
|
20
|
-
|
20
|
+
|
21
21
|
# This array defines the order to check a query for the format
|
22
22
|
#
|
23
23
|
FORMATS = %w(
|
@@ -29,18 +29,18 @@ module Barometer
|
|
29
29
|
:coordinates => "Coordinates", :icao => "Icao",
|
30
30
|
:woe_id => "WoeID", :geocode => "Geocode"
|
31
31
|
}
|
32
|
-
|
32
|
+
|
33
33
|
attr_writer :q
|
34
34
|
attr_accessor :format, :country_code
|
35
35
|
attr_accessor :geo, :timezone, :conversions
|
36
|
-
|
36
|
+
|
37
37
|
def initialize(query=nil)
|
38
38
|
return unless query
|
39
39
|
@q = query
|
40
40
|
self.analyze!
|
41
41
|
@conversions = {}
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
def q
|
45
45
|
format ? Barometer::Query::Format.const_get(FORMAT_MAP[format.to_sym].to_s).convert_query(@q) : @q
|
46
46
|
end
|
@@ -59,14 +59,14 @@ module Barometer
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
# take a list of acceptable (and ordered by preference) formats and convert
|
64
64
|
# the current query (q) into the most preferred and acceptable format. a
|
65
65
|
# side effect of the conversions may reveal the country_code, if so save it
|
66
66
|
#
|
67
67
|
def convert!(preferred_formats=nil)
|
68
68
|
raise ArgumentError unless (preferred_formats && preferred_formats.size > 0)
|
69
|
-
|
69
|
+
|
70
70
|
# why convert if we are already there?
|
71
71
|
# (except in the case that the serivce excepts coordinates and we have a
|
72
72
|
# a geocode ... the google geocode results are superior)
|
@@ -79,7 +79,7 @@ module Barometer
|
|
79
79
|
converted_query = self.dup
|
80
80
|
end
|
81
81
|
end
|
82
|
-
|
82
|
+
|
83
83
|
unless skip_conversion
|
84
84
|
# go through each acceptable format and try to convert to that
|
85
85
|
converted = false
|
@@ -94,7 +94,7 @@ module Barometer
|
|
94
94
|
unless converted
|
95
95
|
unless converted_query = get_conversion(preferred_format)
|
96
96
|
converted_query = Query::Format.const_get(klass.to_s).to(self)
|
97
|
-
end
|
97
|
+
end
|
98
98
|
converted = true if converted_query
|
99
99
|
end
|
100
100
|
if converted
|
@@ -104,7 +104,7 @@ module Barometer
|
|
104
104
|
end
|
105
105
|
end
|
106
106
|
end
|
107
|
-
|
107
|
+
|
108
108
|
# force geocode?, unless we already did
|
109
109
|
#
|
110
110
|
if Barometer.force_geocode && !@geo
|
@@ -117,7 +117,7 @@ module Barometer
|
|
117
117
|
converted_query.geo = @geo.dup
|
118
118
|
end
|
119
119
|
end
|
120
|
-
|
120
|
+
|
121
121
|
# enhance timezone?, unless we already did
|
122
122
|
#
|
123
123
|
if Barometer.enhance_timezone && !@timezone
|
@@ -129,10 +129,10 @@ module Barometer
|
|
129
129
|
converted_query.timezone = @timezone.dup
|
130
130
|
end
|
131
131
|
end
|
132
|
-
|
132
|
+
|
133
133
|
converted_query
|
134
134
|
end
|
135
|
-
|
135
|
+
|
136
136
|
# save the important parts of the conversion ... by saving conversion we
|
137
137
|
# can avoid doing the same conversion multiple times
|
138
138
|
#
|
@@ -162,11 +162,11 @@ end
|
|
162
162
|
return nil unless self.format == Query::Format::Coordinates.format
|
163
163
|
Query::Format::Coordinates.parse_latitude(self.q)
|
164
164
|
end
|
165
|
-
|
165
|
+
|
166
166
|
def longitude
|
167
167
|
return nil unless self.format == Query::Format::Coordinates.format
|
168
168
|
Query::Format::Coordinates.parse_longitude(self.q)
|
169
169
|
end
|
170
|
-
|
170
|
+
|
171
171
|
end
|
172
|
-
end
|
172
|
+
end
|
data/lib/barometer/services.rb
CHANGED
@@ -4,10 +4,9 @@ $:.unshift(File.dirname(__FILE__))
|
|
4
4
|
#
|
5
5
|
require 'weather_services/service'
|
6
6
|
require 'weather_services/wunderground'
|
7
|
-
require 'weather_services/google'
|
8
7
|
require 'weather_services/yahoo'
|
9
|
-
require 'weather_services/weather_dot_com'
|
10
8
|
require 'weather_services/weather_bug'
|
9
|
+
require 'weather_services/noaa'
|
11
10
|
|
12
11
|
#
|
13
12
|
# web services (non weather)
|
@@ -16,4 +15,5 @@ require 'web_services/web_service'
|
|
16
15
|
require 'web_services/geocode'
|
17
16
|
require 'web_services/weather_id'
|
18
17
|
require 'web_services/timezone'
|
19
|
-
require 'web_services/placemaker'
|
18
|
+
require 'web_services/placemaker'
|
19
|
+
require 'web_services/noaa_station_id'
|
@@ -11,18 +11,18 @@ one_letter:
|
|
11
11
|
U : RU
|
12
12
|
Y : AU
|
13
13
|
Z : CN
|
14
|
-
|
14
|
+
|
15
15
|
two_letter:
|
16
16
|
# A - Western South Pacific
|
17
17
|
AG : SB
|
18
18
|
AN : NR
|
19
19
|
AY : PG
|
20
|
-
|
20
|
+
|
21
21
|
# B - Iceland/Greenland and Kosovo
|
22
22
|
BG : GL
|
23
23
|
BI : IS
|
24
24
|
#BK : Kosovo (also LY Serbia (RS) because of disputes)
|
25
|
-
|
25
|
+
|
26
26
|
# D - West Africa
|
27
27
|
DA : DZ
|
28
28
|
DB : BJ
|
@@ -33,7 +33,7 @@ two_letter:
|
|
33
33
|
DR : NE
|
34
34
|
DT : TN
|
35
35
|
# DX : Togolese Republic
|
36
|
-
|
36
|
+
|
37
37
|
# E - Northern Europe
|
38
38
|
EB : BE
|
39
39
|
ED : DE
|
@@ -50,7 +50,7 @@ two_letter:
|
|
50
50
|
ET : DE
|
51
51
|
EV : LV
|
52
52
|
EY : LT
|
53
|
-
|
53
|
+
|
54
54
|
# F - Southern Africa
|
55
55
|
FA : ZA
|
56
56
|
FB : BW
|
@@ -75,7 +75,7 @@ two_letter:
|
|
75
75
|
FX : LS
|
76
76
|
FY : NA
|
77
77
|
FZ : CD
|
78
|
-
|
78
|
+
|
79
79
|
# G - Northwestern Africa
|
80
80
|
GA : ML
|
81
81
|
GB : GM
|
@@ -90,7 +90,7 @@ two_letter:
|
|
90
90
|
GS : EH
|
91
91
|
GU : GN
|
92
92
|
GV : CV
|
93
|
-
|
93
|
+
|
94
94
|
# H - Northeastern Africa
|
95
95
|
HA : ET
|
96
96
|
HB : BI
|
@@ -105,7 +105,7 @@ two_letter:
|
|
105
105
|
HS : SD
|
106
106
|
HT : TZ
|
107
107
|
HU : UG
|
108
|
-
|
108
|
+
|
109
109
|
# L - Southern Europe,Israel and Turkey
|
110
110
|
LA : AL
|
111
111
|
LB : BG
|
@@ -133,7 +133,7 @@ two_letter:
|
|
133
133
|
LX : GI
|
134
134
|
#LY : Serbia (RS) and Montenegro (ME)
|
135
135
|
LZ : SK
|
136
|
-
|
136
|
+
|
137
137
|
# M - Central America and Mexico
|
138
138
|
MB : TC
|
139
139
|
MD : DO
|
@@ -150,7 +150,7 @@ two_letter:
|
|
150
150
|
MW : KY
|
151
151
|
MY : BS
|
152
152
|
MZ : BZ
|
153
|
-
|
153
|
+
|
154
154
|
# N - South Pacific
|
155
155
|
NC : CK
|
156
156
|
# NF : Fiji (FJ), Tonga (TO)
|
@@ -162,7 +162,7 @@ two_letter:
|
|
162
162
|
NV : VU
|
163
163
|
NW : NC
|
164
164
|
# NZ : New Zealand (NZ), Antarctica (AQ)
|
165
|
-
|
165
|
+
|
166
166
|
# O - Southwest Asia (excluding Israel and Turkey), Afghanistan and Pakistan
|
167
167
|
OA : AF
|
168
168
|
OB : BH
|
@@ -178,7 +178,7 @@ two_letter:
|
|
178
178
|
OS : SY
|
179
179
|
OT : QA
|
180
180
|
OY : YE
|
181
|
-
|
181
|
+
|
182
182
|
# P - Eastern North Pacific
|
183
183
|
PA : US
|
184
184
|
# PB : Baker Island
|
@@ -194,14 +194,14 @@ two_letter:
|
|
194
194
|
PP : US
|
195
195
|
# PT : Federated States of Micronesia (FM), Palau (PW)
|
196
196
|
# PW : Wake Island
|
197
|
-
|
197
|
+
|
198
198
|
# R - Western North Pacific
|
199
199
|
RC : TW
|
200
200
|
RJ : JP
|
201
201
|
RK : KR
|
202
202
|
RO : JP
|
203
203
|
RP : PH
|
204
|
-
|
204
|
+
|
205
205
|
# S - South America
|
206
206
|
SA : AR
|
207
207
|
SB : BR
|
@@ -221,7 +221,7 @@ two_letter:
|
|
221
221
|
SV : VE
|
222
222
|
SW : BR
|
223
223
|
SY : GY
|
224
|
-
|
224
|
+
|
225
225
|
# T - Caribbean
|
226
226
|
TA : AG
|
227
227
|
TB : BB
|
@@ -239,7 +239,7 @@ two_letter:
|
|
239
239
|
TU : VG
|
240
240
|
TV : VC
|
241
241
|
TX : BM
|
242
|
-
|
242
|
+
|
243
243
|
# U - Russia and former Soviet States
|
244
244
|
UA : KZ
|
245
245
|
UB : AZ
|
@@ -248,7 +248,7 @@ two_letter:
|
|
248
248
|
UK : UA
|
249
249
|
UM : BY
|
250
250
|
#UT Tajikistan (TJ), Turkmenistan (TM), Uzbekistan (UZ)
|
251
|
-
|
251
|
+
|
252
252
|
# V - South Asia (except Afghanistan and Pakistan) and mainland Southeast Asia
|
253
253
|
VA : IN
|
254
254
|
VC : LK
|
@@ -266,7 +266,7 @@ two_letter:
|
|
266
266
|
VT : TH
|
267
267
|
VV : VN
|
268
268
|
VY : MM
|
269
|
-
|
269
|
+
|
270
270
|
# W - Maritime Southeast Asia (except the Philippines)
|
271
271
|
WA : ID
|
272
272
|
# WB : Malaysia (MY), Brunei (BN)
|
@@ -276,7 +276,7 @@ two_letter:
|
|
276
276
|
WQ : ID
|
277
277
|
WR : ID
|
278
278
|
WS : SG
|
279
|
-
|
279
|
+
|
280
280
|
# Z - China, Mongolia and North Korea
|
281
281
|
ZK : KP
|
282
|
-
ZM : MN
|
282
|
+
ZM : MN
|
data/lib/barometer/weather.rb
CHANGED
@@ -6,19 +6,19 @@ module Barometer
|
|
6
6
|
# methods to interact with the data
|
7
7
|
#
|
8
8
|
class Weather
|
9
|
-
|
9
|
+
|
10
10
|
attr_accessor :measurements
|
11
11
|
attr_accessor :start_at, :end_at
|
12
|
-
|
12
|
+
|
13
13
|
def initialize; @measurements = []; end
|
14
|
-
|
14
|
+
|
15
15
|
# the default measurement is the first successful measurement
|
16
16
|
#
|
17
17
|
def default
|
18
18
|
return nil unless self.sources
|
19
19
|
self.source(self.sources.first)
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
# find the measurement for the given source, if it exists
|
23
23
|
#
|
24
24
|
def source(source)
|
@@ -28,32 +28,32 @@ module Barometer
|
|
28
28
|
end
|
29
29
|
nil
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
# list successful sources
|
33
33
|
#
|
34
34
|
def sources
|
35
35
|
@measurements.collect {|m| m.source.to_sym if m.success?}.compact
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
#
|
39
39
|
# Quick access methods
|
40
40
|
#
|
41
|
-
|
41
|
+
|
42
42
|
def metric?; self.default ? self.default.metric? : true; end
|
43
43
|
def current; (default = self.default) ? default.current : nil; end
|
44
44
|
def forecast; (default = self.default) ? default.forecast : nil; end
|
45
45
|
def now; self.current; end
|
46
|
-
|
46
|
+
|
47
47
|
def today
|
48
48
|
default = self.default
|
49
49
|
default && default.forecast ? default.forecast[0] : nil
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
def tomorrow
|
53
53
|
default = self.default
|
54
54
|
default && default.forecast ? default.forecast[1] : nil
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
# measurement search
|
58
58
|
# this will search the default measurements forecasts looking for
|
59
59
|
# the matching date
|
@@ -62,19 +62,19 @@ module Barometer
|
|
62
62
|
default = self.default
|
63
63
|
default && default.forecast ? default.for(query) : nil
|
64
64
|
end
|
65
|
-
|
66
|
-
|
65
|
+
|
66
|
+
|
67
67
|
#
|
68
68
|
# helper methods
|
69
69
|
#
|
70
70
|
# these are handy methods that can average values for successful weather
|
71
71
|
# sources, or answer a simple question (ie: weather.windy?)
|
72
72
|
#
|
73
|
-
|
73
|
+
|
74
74
|
#
|
75
75
|
# averages
|
76
76
|
#
|
77
|
-
|
77
|
+
|
78
78
|
# this assumes calculating for current, and that "to_f" for a value
|
79
79
|
# will return the value needed
|
80
80
|
# value_name = the name of the value we are averaging
|
@@ -97,7 +97,7 @@ module Barometer
|
|
97
97
|
return nil unless values && values.size > 0
|
98
98
|
values.inject(0.0) { |sum,v| sum += v if v } / values.size
|
99
99
|
end
|
100
|
-
|
100
|
+
|
101
101
|
def average(value_name, do_average=true, class_name=nil)
|
102
102
|
if class_name
|
103
103
|
if do_average
|
@@ -111,7 +111,7 @@ module Barometer
|
|
111
111
|
end
|
112
112
|
avg
|
113
113
|
end
|
114
|
-
|
114
|
+
|
115
115
|
# average of all values
|
116
116
|
#
|
117
117
|
def humidity(do_average=true); average("humidity",do_average); end
|
@@ -122,29 +122,29 @@ module Barometer
|
|
122
122
|
def heat_index(do_average=true); average("heat_index",do_average,"Temperature"); end
|
123
123
|
def wind_chill(do_average=true); average("wind_chill",do_average,"Temperature"); end
|
124
124
|
def visibility(do_average=true); average("visibility",do_average,"Distance"); end
|
125
|
-
|
125
|
+
|
126
126
|
#
|
127
127
|
# quick access methods
|
128
128
|
#
|
129
|
-
|
129
|
+
|
130
130
|
# what is the current local time and date?
|
131
131
|
# def time
|
132
132
|
# end
|
133
|
-
|
133
|
+
|
134
134
|
# def icon
|
135
135
|
# self.current.icon
|
136
136
|
# end
|
137
|
-
|
137
|
+
|
138
138
|
#
|
139
139
|
# simple questions
|
140
140
|
# pass the question on to each successful measurement until we get an answer
|
141
141
|
#
|
142
|
-
|
142
|
+
|
143
143
|
def windy?(time_string=nil, threshold=10)
|
144
144
|
local_datetime = Data::LocalDateTime.parse(time_string)
|
145
145
|
raise ArgumentError unless (threshold.is_a?(Fixnum) || threshold.is_a?(Float))
|
146
146
|
raise ArgumentError unless (local_datetime.nil? || local_datetime.is_a?(Data::LocalDateTime))
|
147
|
-
|
147
|
+
|
148
148
|
is_windy = nil
|
149
149
|
@measurements.each do |measurement|
|
150
150
|
if measurement.success?
|
@@ -159,7 +159,7 @@ module Barometer
|
|
159
159
|
local_datetime = Data::LocalDateTime.parse(time_string)
|
160
160
|
raise ArgumentError unless (threshold.is_a?(Fixnum) || threshold.is_a?(Float))
|
161
161
|
raise ArgumentError unless (local_datetime.nil? || local_datetime.is_a?(Data::LocalDateTime))
|
162
|
-
|
162
|
+
|
163
163
|
is_wet = nil
|
164
164
|
@measurements.each do |measurement|
|
165
165
|
if measurement.success?
|
@@ -173,7 +173,7 @@ module Barometer
|
|
173
173
|
def day?(time_string=nil)
|
174
174
|
local_datetime = Data::LocalDateTime.parse(time_string)
|
175
175
|
raise ArgumentError unless (local_datetime.nil? || local_datetime.is_a?(Data::LocalDateTime))
|
176
|
-
|
176
|
+
|
177
177
|
is_day = nil
|
178
178
|
@measurements.each do |measurement|
|
179
179
|
if measurement.success?
|
@@ -194,7 +194,7 @@ module Barometer
|
|
194
194
|
def sunny?(time_string=nil)
|
195
195
|
local_datetime = Data::LocalDateTime.parse(time_string)
|
196
196
|
raise ArgumentError unless (local_datetime.nil? || local_datetime.is_a?(Data::LocalDateTime))
|
197
|
-
|
197
|
+
|
198
198
|
is_sunny = nil
|
199
199
|
@measurements.each do |measurement|
|
200
200
|
if measurement.success?
|
@@ -207,5 +207,5 @@ module Barometer
|
|
207
207
|
end
|
208
208
|
|
209
209
|
end
|
210
|
-
|
211
|
-
end
|
210
|
+
|
211
|
+
end
|