weatheruby 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/weather/actions.rb +161 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 093f7d9f2737698be51c4686072424b28245aadc
|
4
|
+
data.tar.gz: 814d49c28ade652024e010a4d6230c0e37b765ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61355f4a8b3691b51bf9b5a44ade57d1bd11b2c611fe0faae0db22ba521ff38c7815123684370a42cd3b8495ae8d65de5985935d5e6b56e21a09a64ad089eb90
|
7
|
+
data.tar.gz: d10b898728d47b70f35b337c85bef4f9eaa236e45a88491289ce10e8b726bb58dd1d9c69b1d67e914064398dbd00085c886cea249e1a15d63311bfc8f3ebc303
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
# Changelog
|
2
2
|
## Version 0
|
3
|
+
### Version 0.2.0
|
4
|
+
* New complex_forecast_10day and simple_forecast_20day.
|
5
|
+
* New complex_forecast and simple_forecast methods. It's funny, complex_forecast uses the simpleforecast stuff from the API.
|
6
|
+
* New hurricane_data method.
|
7
|
+
* New record_low and record_high methods.
|
8
|
+
|
3
9
|
### Version 0.1.0
|
4
10
|
* Intial version. Includes #conditions, #moon_phase, and #alerts.
|
data/lib/weather/actions.rb
CHANGED
@@ -2,7 +2,7 @@ module Weather
|
|
2
2
|
module Actions
|
3
3
|
# Gets alert information for a location.
|
4
4
|
# @param location [String] The place to get the alert data for.
|
5
|
-
# @return [Hash/Nil] Nil if there are no alerts, or a hash of
|
5
|
+
# @return [Hash/Nil] Nil if there are no alerts, or a hash of hashes
|
6
6
|
# containing relevant data if not. Each array in the hash contains
|
7
7
|
# information for a different alert.
|
8
8
|
def alerts(location)
|
@@ -41,7 +41,7 @@ module Weather
|
|
41
41
|
ret
|
42
42
|
end
|
43
43
|
|
44
|
-
# Gets
|
44
|
+
# Gets weather conditions for the location.
|
45
45
|
# @param location [String] The place to get the weather report for.
|
46
46
|
# @return [Hash] A hash containing strings of relevant weather information.
|
47
47
|
def conditions(location)
|
@@ -77,5 +77,164 @@ module Weather
|
|
77
77
|
ret
|
78
78
|
end
|
79
79
|
|
80
|
+
# Gets the record low for the location.
|
81
|
+
# @param location [String] The place to get the record low for.
|
82
|
+
# @return [Hash] A hash containing a few integers of data.
|
83
|
+
def record_low(location)
|
84
|
+
response = get('almanac', location)
|
85
|
+
|
86
|
+
ret = {
|
87
|
+
:average_low_f => response['almanac']['temp_low']['normal']['F'].to_i,
|
88
|
+
:average_low_c => response['almanac']['temp_low']['normal']['C'].to_i,
|
89
|
+
:record_year => response['almanac']['temp_low']['recordyear'].to_i,
|
90
|
+
:record_low_f => response['almanac']['temp_low']['record']['F'].to_i,
|
91
|
+
:record_low_c => response['almanac']['temp_low']['record']['C'].to_i
|
92
|
+
}
|
93
|
+
|
94
|
+
ret
|
95
|
+
end
|
96
|
+
|
97
|
+
# Gets the record high for the location.
|
98
|
+
# @param location [String] The place to get the record high for.
|
99
|
+
# @return [Hash] A hash containing a few integers of data.
|
100
|
+
def record_high(location)
|
101
|
+
response = get('almanac', location)
|
102
|
+
|
103
|
+
ret = {
|
104
|
+
:average_high_f => response['almanac']['temp_high']['normal']['F'].to_i,
|
105
|
+
:average_high_c => response['almanac']['temp_high']['normal']['C'].to_i,
|
106
|
+
:record_year => response['almanac']['temp_high']['recordyear'].to_i,
|
107
|
+
:record_high_f => response['almanac']['temp_high']['record']['F'].to_i,
|
108
|
+
:record_high_c => response['almanac']['temp_high']['record']['C'].to_i
|
109
|
+
}
|
110
|
+
|
111
|
+
ret
|
112
|
+
end
|
113
|
+
|
114
|
+
# Gets data for currently-happening hurricanes around the world.
|
115
|
+
# @return [Hash] A hash containing hashes of data. Each sub-hash is named
|
116
|
+
# as the "nice" name for the hurricane (example: Hurricane Daniel).
|
117
|
+
def hurricane_data
|
118
|
+
response = get('currenthurricane', 'view')
|
119
|
+
|
120
|
+
ret = {}
|
121
|
+
response['currenthurricane'].each do |h|
|
122
|
+
ret[h['stormInfo']['stormName_Nice']] = {
|
123
|
+
:name => h['stormInfo']['stormName'],
|
124
|
+
:number => h['stormInfo']['stormNumber'],
|
125
|
+
:category => h['Current']['Category'],
|
126
|
+
:time => h['Current']['Time']['pretty'],
|
127
|
+
:wind_speed_mph => h['Current']['WindSpeed']['Mph'],
|
128
|
+
:wind_speed_kts => h['Current']['WindSpeed']['Kts'],
|
129
|
+
:wind_speed_kph => h['Current']['WindSpeed']['Kph'],
|
130
|
+
:gust_speed_mph => h['Current']['WindGust']['Mph'],
|
131
|
+
:gust_speed_kts => h['Current']['WindGust']['Kts'],
|
132
|
+
:gust_speed_kph => h['Current']['WindGust']['Kph'],
|
133
|
+
}
|
134
|
+
end
|
135
|
+
|
136
|
+
ret
|
137
|
+
end
|
138
|
+
|
139
|
+
# Gets the basic forecast information for the location.
|
140
|
+
# @param location [String] The place to get the forecast for.
|
141
|
+
# @return [Hash] A hash containing hashes of information. Sub-hashes are
|
142
|
+
# named as their "period", or the day in relation to the current day.
|
143
|
+
# For example: 0 is today, 1 is tomorrow, etc. It does not organize itself
|
144
|
+
# by weekday. That is what the weekday_name key is for.
|
145
|
+
def simple_forecast(location)
|
146
|
+
response = get('forecast', location)
|
147
|
+
|
148
|
+
return parse_simple_forecast(response)
|
149
|
+
end
|
150
|
+
|
151
|
+
# Gets more complicated forecast information for the location. Only gets
|
152
|
+
# the forecast for the next three days.
|
153
|
+
# @param location [String] The place to get the forecast for.
|
154
|
+
# @return [Hash] A hash containing hashes of information. Sub-hashes are
|
155
|
+
# named as their "period", or the day in relation to the current day.
|
156
|
+
# For example: 0 is today, 1 is tomorrow, etc. It does not organize itself
|
157
|
+
# by weekday. Unlike simple_forecast, you do not get very many strings in
|
158
|
+
# this method.
|
159
|
+
def complex_forecast(location)
|
160
|
+
response = get('forecast', location)
|
161
|
+
|
162
|
+
return parse_complex_forecast(response)
|
163
|
+
end
|
164
|
+
|
165
|
+
# Exactly the same as #simple_forecast, except that it gets the data for
|
166
|
+
# 20 days.
|
167
|
+
def simple_forecast_20day(location)
|
168
|
+
response = get('forecast10day', location)
|
169
|
+
|
170
|
+
return parse_simple_forecast(response)
|
171
|
+
end
|
172
|
+
|
173
|
+
# Exactly the same as #complex_forecast, except that it gets the data for
|
174
|
+
# 10 days.
|
175
|
+
def complex_forecast_10day(location)
|
176
|
+
response = get('forecast10day', location)
|
177
|
+
|
178
|
+
return parse_complex_forecast(response)
|
179
|
+
end
|
180
|
+
|
181
|
+
private
|
182
|
+
# Parses the simple forecast information.
|
183
|
+
def parse_simple_forecast(response)
|
184
|
+
ret = {}
|
185
|
+
|
186
|
+
response['forecast']['txt_forecast']['forecastday'].each do |f|
|
187
|
+
ret[f['period']] = {
|
188
|
+
:weekday_name => f['title'],
|
189
|
+
:text => f['fcttext'],
|
190
|
+
:text_metric => f['fcttext_metric']
|
191
|
+
}
|
192
|
+
end
|
193
|
+
|
194
|
+
ret
|
195
|
+
end
|
196
|
+
|
197
|
+
# Parses the complex forecast information.
|
198
|
+
def parse_complex_forecast(response)
|
199
|
+
ret = {}
|
200
|
+
|
201
|
+
response['forecast']['simpleforecast']['forecastday'].each do |f|
|
202
|
+
ret[f['period'] - 1] = {
|
203
|
+
:high_f => f['high']['fahrenheit'].to_i,
|
204
|
+
:high_c => f['high']['celsius'].to_i,
|
205
|
+
:low_f => f['low']['fahrenheit'].to_i,
|
206
|
+
:low_c => f['low']['celsius'].to_i,
|
207
|
+
:conditions => f['conditions'].to_i,
|
208
|
+
:snow => {
|
209
|
+
:snow_total_in => f['snow_allday']['in'],
|
210
|
+
:snow_total_cm => f['snow_allday']['cm'],
|
211
|
+
:snow_night_in => f['snow_night']['in'],
|
212
|
+
:snow_night_cm => f['snow_night']['cm'],
|
213
|
+
:snow_day_in => f['snow_day']['in'],
|
214
|
+
:snow_day_cm => f['snow_day']['cm']
|
215
|
+
},
|
216
|
+
:quantative_precipitation => {
|
217
|
+
:qpf_total_in => f['qpf_allday']['in'],
|
218
|
+
:qpf_total_cm => f['qpf_allday']['cm'],
|
219
|
+
:qpf_night_in => f['qpf_night']['in'],
|
220
|
+
:qpf_night_cm => f['qpf_night']['cm'],
|
221
|
+
:qpf_day_in => f['qpf_day']['in'],
|
222
|
+
:qpf_day_cm => f['qpf_day']['cm']
|
223
|
+
},
|
224
|
+
:wind => {
|
225
|
+
:average_mph => f['avewind']['mph'],
|
226
|
+
:average_kph => f['avewind']['kph'],
|
227
|
+
:average_dir => f['avewind']['dir'],
|
228
|
+
:average_temp => f['avewind']['degrees'],
|
229
|
+
:max_mph => f['maxwind']['mph'],
|
230
|
+
:max_kph => f['maxwind']['kph'],
|
231
|
+
:max_dir => f['maxwind']['dir'],
|
232
|
+
:max_temp => f['maxwind']['degrees']
|
233
|
+
}
|
234
|
+
}
|
235
|
+
end
|
236
|
+
|
237
|
+
ret
|
238
|
+
end
|
80
239
|
end
|
81
240
|
end
|