weatheruby 0.4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/bin/weatheruby +6 -0
- data/lib/weather/planner.rb +250 -0
- data/lib/weatheruby.rb +2 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4df1b7c19c8e24f493a06d5e6d2e1a9e171d367f
|
|
4
|
+
data.tar.gz: b2bd0127cdbba81ef3fecf12948eafa3b598229d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0864852867eed9f0f47ba5b67324e47fc725fef086d99e3ccc2b87369bd68d7bc3c992e4a2767a875ed21d5af2009f27b63a83583c10b283e41e608090a82f13
|
|
7
|
+
data.tar.gz: e4d13673968de97a6ce69e2c4b72659b000513fa7de5f0aee4f898ee4190484cfc46002b999674c2ce97375516a035594d2ba0ed471cd39a07d7bee79720722b
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
## Version 0
|
|
3
|
+
### Version 0.5.0
|
|
4
|
+
* Add support for all Weather Underground Planner APIs.
|
|
5
|
+
|
|
3
6
|
### Version 0.4.2
|
|
4
7
|
* No longer fails with an ArgumentError if the CLI is passed no arguments. Instead it outputs the usage information, so that it is actually a useful thing.
|
|
5
8
|
|
data/bin/weatheruby
CHANGED
|
@@ -8,6 +8,12 @@ require 'rainbow'
|
|
|
8
8
|
require 'string-utility'
|
|
9
9
|
require_relative '../lib/weatheruby'
|
|
10
10
|
|
|
11
|
+
# Planner not supported here because it will eventually get its own CLI. That
|
|
12
|
+
# would be way too many API calls for a single app, when most of the info
|
|
13
|
+
# provided by the Planner would not even be useful.
|
|
14
|
+
# TODO Write the Planner CLI: weatheruby_planner or something.
|
|
15
|
+
|
|
16
|
+
|
|
11
17
|
@args = {
|
|
12
18
|
help: false,
|
|
13
19
|
verbose: false,
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
module Weather
|
|
2
|
+
module Planner
|
|
3
|
+
# Gets the chance of snow within the date range.
|
|
4
|
+
# @see #get_planner_response
|
|
5
|
+
def chance_of_snow(start_date, end_date, location)
|
|
6
|
+
get_chance_of('chanceofsnowday', start_date, end_date, location)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# Gets the chance of hail within the date range.
|
|
10
|
+
# @see #get_planner_response
|
|
11
|
+
def chance_of_hail(start_date, end_date, location)
|
|
12
|
+
get_chance_of('chanceofhailday', start_date, end_date, location)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Gets the chance of temperatures above 0 C/32 F within the date range.
|
|
16
|
+
# @see #get_planner_response
|
|
17
|
+
def chance_of_not_freezing(start_date, end_date, location)
|
|
18
|
+
get_chance_of('tempoverfreezing', start_date, end_date, location)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Gets the chance of temperatures below 0 C/32 F within the date range.
|
|
22
|
+
# @see #get_planner_response
|
|
23
|
+
def chance_of_freezing(start_date, end_date, location)
|
|
24
|
+
get_chance_of('tempbelowfreezing', start_date, end_date, location)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Gets chance of sultry within the date range.
|
|
28
|
+
# @see #get_planner_response
|
|
29
|
+
def chance_of_sultry(start_date, end_date, location)
|
|
30
|
+
get_chance_of('chanceofsultryday', start_date, end_date, location)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Gets the chance of a tornado within the date range.
|
|
34
|
+
# @see #get_planner_response
|
|
35
|
+
def chance_of_tornado(start_date, end_date, location)
|
|
36
|
+
get_chance_of('chanceoftornadoday', start_date, end_date, location)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Gets the chance of snow on the ground within the date range.
|
|
40
|
+
# @see #get_planner_response
|
|
41
|
+
def chance_of_groundsnow(start_date, end_date, location)
|
|
42
|
+
get_chance_of('chanceofsnowonground', start_date, end_date, location)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Gets the chance of thunderstorms within the date range.
|
|
46
|
+
# @see #get_planner_response
|
|
47
|
+
def chance_of_thunderstorms(start_date, end_date, location)
|
|
48
|
+
get_chance_of('chanceofthunderday', start_date, end_date, location)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Gets the chance of temperatures above 32.2 C/90 F within the date range.
|
|
52
|
+
# @see #get_planner_response
|
|
53
|
+
def chance_of_heat(start_date, end_date, location)
|
|
54
|
+
get_chance_of('tempoverninety', start_date, end_date, location)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Gets the chance of rain within the date range.
|
|
58
|
+
# @see #get_planner_response
|
|
59
|
+
def chance_of_rain(start_date, end_date, location)
|
|
60
|
+
get_chance_of('chanceofrainday', start_date, end_date, location)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Gets the chance of precipitation within the date range.
|
|
64
|
+
# @see #get_planner_response
|
|
65
|
+
def chance_of_precipitation(start_date, end_date, location)
|
|
66
|
+
get_chance_of('chanceofprecip', start_date, end_date, location)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Gets the chance of humidity within the date range.
|
|
70
|
+
# @see #get_planner_response
|
|
71
|
+
def chance_of_humid(start_date, end_date, location)
|
|
72
|
+
get_chance_of('chanceofhumidday', start_date, end_date, location)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Gets the chance of fog within the date range.
|
|
76
|
+
# @see #get_planner_response
|
|
77
|
+
def chance_of_fog(start_date, end_date, location)
|
|
78
|
+
get_chance_of('chanceoffogday', start_date, end_date, location)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Gets the chance of cloudy conditions within the date range.
|
|
82
|
+
# @see #get_planner_response
|
|
83
|
+
def chance_of_cloudy(start_date, end_date, location)
|
|
84
|
+
get_chance_of('chanceofcloudyday', start_date, end_date, location)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Gets the chance of sunshine within the date range.
|
|
88
|
+
# @see #get_planner_response
|
|
89
|
+
def chance_of_sunny(start_date, end_date, location)
|
|
90
|
+
get_chance_of('chanceofsunnycloudyday', start_date, end_date, location)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Gets the chance of partially cloudy conditions within the date range.
|
|
94
|
+
# @see #get_planner_response
|
|
95
|
+
def chance_of_partlycloudy(start_date, end_date, location)
|
|
96
|
+
get_chance_of('chanceofpartlycloudyday', start_date, end_date, location)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Gets the chance of high winds within the date range.
|
|
100
|
+
# @see #get_planner_response
|
|
101
|
+
def chance_of_high_wind(start_date, end_date, location)
|
|
102
|
+
get_chance_of('chanceofwindyday', start_date, end_date, location)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Gets the chance of a temperature of 15.5 C/60 F within the date range.
|
|
106
|
+
# @see #get_planner_response
|
|
107
|
+
def chance_of_warmth(start_date, end_date, location)
|
|
108
|
+
get_chance_of('tempoversixty', start_date, end_date, location)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Gets the dewpoint highs and lows for the date range.
|
|
112
|
+
# @see #get_planner_response
|
|
113
|
+
# @return [Hash] Highs and lows minimum, average, and maximum for both
|
|
114
|
+
# metric and imperial systems.
|
|
115
|
+
# @return [String] The error if possible.
|
|
116
|
+
def get_dewpoints(start_date, end_date, location)
|
|
117
|
+
response = get_planner_response(start_date, end_date, location)
|
|
118
|
+
return response['response']['error'] unless
|
|
119
|
+
response['response']['error'].nil?
|
|
120
|
+
highs = response['trip']['dewpoint_high']
|
|
121
|
+
lows = response['trip']['dewpoint_low']
|
|
122
|
+
|
|
123
|
+
{
|
|
124
|
+
high: {
|
|
125
|
+
imperial: {
|
|
126
|
+
minimum: highs['min']['F'].to_i,
|
|
127
|
+
maximum: highs['max']['F'].to_i,
|
|
128
|
+
average: highs['avg']['F'].to_i
|
|
129
|
+
},
|
|
130
|
+
metric: {
|
|
131
|
+
minimum: highs['min']['C'].to_i,
|
|
132
|
+
maximum: highs['max']['C'].to_i,
|
|
133
|
+
average: highs['avg']['C'].to_i
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
low: {
|
|
137
|
+
imperial: {
|
|
138
|
+
minimum: lows['min']['F'].to_i,
|
|
139
|
+
maximum: lows['max']['F'].to_i,
|
|
140
|
+
average: lows['avg']['F'].to_i
|
|
141
|
+
},
|
|
142
|
+
metric: {
|
|
143
|
+
minimum: lows['min']['C'].to_i,
|
|
144
|
+
maximum: lows['max']['C'].to_i,
|
|
145
|
+
average: lows['avg']['C'].to_i
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Gets the precipitation amounts (not chance) for the date range.
|
|
152
|
+
# @see #get_planner_response
|
|
153
|
+
# @return [Hash] Minimum, maximum, and average precipitation quantities for
|
|
154
|
+
# the location in both inches and centimeters.
|
|
155
|
+
# @return [String] The error if possible.
|
|
156
|
+
def get_precipitation(start_date, end_date, location)
|
|
157
|
+
response = get_planner_response(start_date, end_date, location)
|
|
158
|
+
return response['response']['error'] unless
|
|
159
|
+
response['response']['error'].nil?
|
|
160
|
+
min = response['trip']['precip']['min']
|
|
161
|
+
avg = response['trip']['precip']['avg']
|
|
162
|
+
max = response['trip']['precip']['max']
|
|
163
|
+
|
|
164
|
+
{
|
|
165
|
+
minimum: {
|
|
166
|
+
inch: min['in'].to_i,
|
|
167
|
+
centimeter: min['cm'].to_i
|
|
168
|
+
},
|
|
169
|
+
maximum: {
|
|
170
|
+
inch: max['in'].to_i,
|
|
171
|
+
centimeter: max['cm'].to_i
|
|
172
|
+
},
|
|
173
|
+
average: {
|
|
174
|
+
inch: avg['in'].to_i,
|
|
175
|
+
centimeter: avg['cm'].to_i
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# Gets the highs and lows for the date range.
|
|
181
|
+
# @see #get_planner_response
|
|
182
|
+
# @return [Hash] Highs and lows minimum, average, and maximum for both
|
|
183
|
+
# metric and imperial systems.
|
|
184
|
+
def get_temperatures(start_date, end_date, location)
|
|
185
|
+
response = get_planner_response(start_date, end_date, location)
|
|
186
|
+
return response['response']['error'] unless
|
|
187
|
+
response['response']['error'].nil?
|
|
188
|
+
highs = response['trip']['temp_high']
|
|
189
|
+
lows = response['trip']['temp_low']
|
|
190
|
+
|
|
191
|
+
{
|
|
192
|
+
high: {
|
|
193
|
+
imperial: {
|
|
194
|
+
minimum: highs['min']['F'].to_i,
|
|
195
|
+
maximum: highs['max']['F'].to_i,
|
|
196
|
+
average: highs['avg']['F'].to_i
|
|
197
|
+
},
|
|
198
|
+
metric: {
|
|
199
|
+
minimum: highs['min']['C'].to_i,
|
|
200
|
+
maximum: highs['max']['C'].to_i,
|
|
201
|
+
average: highs['avg']['C'].to_i
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
low: {
|
|
205
|
+
imperial: {
|
|
206
|
+
minimum: lows['min']['F'].to_i,
|
|
207
|
+
maximum: lows['max']['F'].to_i,
|
|
208
|
+
average: lows['avg']['F'].to_i
|
|
209
|
+
},
|
|
210
|
+
metric: {
|
|
211
|
+
minimum: lows['min']['C'].to_i,
|
|
212
|
+
maximum: lows['max']['C'].to_i,
|
|
213
|
+
average: lows['avg']['C'].to_i
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
private
|
|
220
|
+
|
|
221
|
+
# Gets the full planner API response.
|
|
222
|
+
# @param start_date [DateTime] The date to start at. Only month and day
|
|
223
|
+
# actually matter.
|
|
224
|
+
# @param end_date [DateTime] The date to end at. Only month and day actually
|
|
225
|
+
# matter.
|
|
226
|
+
# @param location [String] The location to get the planner data for.
|
|
227
|
+
# @since 0.5.0
|
|
228
|
+
# @return [Hash] (see {Weatheruby#get #get})
|
|
229
|
+
def get_planner_response(start_date, end_date, location)
|
|
230
|
+
start = start_date.strftime('%m%d')
|
|
231
|
+
final = end_date.strftime('%m%d')
|
|
232
|
+
get("planner_#{start}#{final}", location)
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# Gets the chance of any given string key in the chance_of hash returned by
|
|
236
|
+
# get_planner_response.
|
|
237
|
+
# @param subject [String] The chance_of hash's key.
|
|
238
|
+
# @param start_date [DateTime] (see {#get_planner_response})
|
|
239
|
+
# @param end_date [DateTime] (see {#get_planner_response})
|
|
240
|
+
# @param location [String] (see {#get_planner_response})
|
|
241
|
+
# @since 0.5.0
|
|
242
|
+
# @return [Fixnum] The chance of the subject happening.
|
|
243
|
+
def get_chance_of(subject, start_date, end_date, location)
|
|
244
|
+
response = get_planner_response(start_date, end_date, location)
|
|
245
|
+
return unless response['response']['error'].nil?
|
|
246
|
+
|
|
247
|
+
response['trip']['chance_of'][subject]['percentage'].to_i
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
end
|
data/lib/weatheruby.rb
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
require 'httpclient'
|
|
2
2
|
require 'json'
|
|
3
3
|
require_relative 'weather/actions'
|
|
4
|
+
require_relative 'weather/planner'
|
|
4
5
|
require_relative 'weather/exceptions'
|
|
5
6
|
|
|
6
7
|
class Weatheruby
|
|
7
8
|
include Weather::Actions
|
|
9
|
+
include Weather::Planner
|
|
8
10
|
|
|
9
11
|
# Creates a new instance of Weatheruby.
|
|
10
12
|
# @param api_key [String] Your personal API key obtained on sign up for
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: weatheruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Eli Foster
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-12-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: httpclient
|
|
@@ -63,6 +63,7 @@ files:
|
|
|
63
63
|
- bin/weatheruby
|
|
64
64
|
- lib/weather/actions.rb
|
|
65
65
|
- lib/weather/exceptions.rb
|
|
66
|
+
- lib/weather/planner.rb
|
|
66
67
|
- lib/weatheruby.rb
|
|
67
68
|
homepage: https://github.com/elifoster/weatheruby
|
|
68
69
|
licenses:
|