weatheruby 0.5.3 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ec55f6012d626daf9b8c87842dcfbec4b7849be4
4
- data.tar.gz: b297fd400ecc7360f5251603e37ab15b0ea81bab
3
+ metadata.gz: 026ed072be84b5a96eb75c83db822615c325cd08
4
+ data.tar.gz: 5e4f4279b2b2504db4c55967ac5dcbe94efadcaf
5
5
  SHA512:
6
- metadata.gz: a552b0e80f9a8f30a803cd48946ee5f14e30de402dd780f12e67c29926cfdcb1c603f0284792608c1f788a958adb0d1f611a2e679ad6fafddb3e3f142bf778fe
7
- data.tar.gz: 525bd9d12e22a924839e19fc10e885475521189513c169274dcabc9b2067db0f9b4e53506a1351e126836aed099c9a6545af159eafd25e37a31d640e484a09c7
6
+ metadata.gz: 4d0a962683862297071511012d7f8ecffb74aabdf47b84d8797241986aaa84d04ae9f2f0ef0d421397efcd7b90c740115fe6c8a65d4a268ae7baf11be43b96ed
7
+ data.tar.gz: 2c6f8f5202a725bf698c0eb02bff7ccf71bb94cd77088cc53131773d6f9b413f77d2ad2303630987483e9c2460b50595b9041ad661ed0bc258f99ce9a680a9c6
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
  ## Version 0
3
+ ### Version 0.6.0
4
+ * Error handling is much more generic now, with a single WeatherError which gets its message from the Weather
5
+ Underground API. With this is also the removal of the `verbose` option. Lastly, no method will return an error
6
+ silently, but actually `fail` with the WeatherError.
7
+ * `language_key` is now an attribute accessor.
8
+
3
9
  ### Version 0.5.3
4
10
  * Update to HTTPClient 2.8
5
11
  * Use pessimistic version requirements, and actually add version requirements for Rainbow and StringUtility.
data/LICENSE.md ADDED
@@ -0,0 +1,25 @@
1
+ # The MIT License (MIT)
2
+
3
+ Copyright © 2016 Eli Foster
4
+
5
+ Permission is hereby granted, free of charge, to any person
6
+ obtaining a copy of this software and associated documentation
7
+ files (the “Software”), to deal in the Software without
8
+ restriction, including without limitation the rights to use,
9
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the
11
+ Software is furnished to do so, subject to the following
12
+ conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
19
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24
+ OTHER DEALINGS IN THE SOFTWARE.
25
+
data/bin/weatheruby CHANGED
@@ -16,7 +16,6 @@ require_relative '../lib/weatheruby'
16
16
 
17
17
  @args = {
18
18
  help: false,
19
- verbose: false,
20
19
  token: nil,
21
20
  location: nil,
22
21
  language: 'EN'
@@ -24,7 +23,6 @@ require_relative '../lib/weatheruby'
24
23
 
25
24
  usage = 'Usage: weatheruby [t] token [-l] [-j] languagecode [-v] [-h]'
26
25
  help = "-h, --help Show helpful information about Weatheruby usage\n" \
27
- "-v, --verbose Output verbose errors\n" \
28
26
  "-t, --token The token to log in as\n" \
29
27
  "-l, --location The location to get weather data for\n" \
30
28
  '-j, --language The language code to use'
@@ -34,7 +32,6 @@ ARGV.each do |arg|
34
32
  when '-t', '--token' then @args[:token] = ARGV.at(ARGV.index(arg) + 1)
35
33
  when '-h', '--help' then @args[:help] = true
36
34
  when '-l', '--location' then @args[:location] = ARGV.at(ARGV.index(arg) + 1)
37
- when '-v', '--verbose' then @args[:verbose] = true
38
35
  when '-j', '--language' then @args[:language] = ARGV.at(ARGV.index(arg) + 1)
39
36
  end
40
37
  end
@@ -55,11 +52,7 @@ if @args[:token].nil? || @args[:location].nil?
55
52
  exit
56
53
  end
57
54
 
58
- client = Weatheruby.new(@args[:token],
59
- @args[:language],
60
- true,
61
- true,
62
- @args[:verbose])
55
+ client = Weatheruby.new(@args[:token], @args[:language], true, true)
63
56
 
64
57
  conditions = client.conditions(@args[:location])
65
58
  moon = client.moon_phase(@args[:location])
@@ -7,28 +7,20 @@ module Weather
7
7
  # information for a different alert.
8
8
  def alerts(location)
9
9
  response = get('alerts', location)
10
- if response['response']['error'].nil?
11
- ret = []
12
- count = 0
13
- response['alerts'].each do |a|
14
- ret[count] = {
15
- type: a['type'],
16
- description: a['description'],
17
- date: a['date'],
18
- expires: a['expires'],
19
- message: a['message']
20
- }
21
- count += 1
22
- end
23
-
24
- ret
25
- else
26
- if @verbose_errors
27
- return response['response']['error']['description']
28
- else
29
- return response['response']['error']['type']
30
- end
10
+ ret = []
11
+ count = 0
12
+ response['alerts'].each do |a|
13
+ ret[count] = {
14
+ type: a['type'],
15
+ description: a['description'],
16
+ date: a['date'],
17
+ expires: a['expires'],
18
+ message: a['message']
19
+ }
20
+ count += 1
31
21
  end
22
+
23
+ ret
32
24
  end
33
25
 
34
26
  # Gets the current moon phase of the location.
@@ -36,22 +28,13 @@ module Weather
36
28
  # @return [Hash/String] A hash of two integers for the moon phase
37
29
  # information. The age key in the hash contains the moon's age in days,
38
30
  # and the illumination key contains the percentage of how illuminated it
39
- # is. Returns the error type if verbose_errors is off, else the desc.
31
+ # is.
40
32
  def moon_phase(location)
41
33
  response = get('astronomy', location)
42
- if response['response']['error'].nil?
43
- ret = {}
44
- ret[:age] = response['moon_phase']['ageOfMoon'].to_i
45
- ret[:illumination] = response['moon_phase']['percentIlluminated'].to_i
46
-
47
- ret
48
- else
49
- if @verbose_errors
50
- return response['response']['error']['description']
51
- else
52
- return response['response']['error']['type']
53
- end
54
- end
34
+ {
35
+ age: response['moon_phase']['ageOfMoon'].to_i,
36
+ illumination: response['moon_phase']['percentIlluminated'].to_i
37
+ }
55
38
  end
56
39
 
57
40
  # Gets weather conditions for the location.
@@ -59,43 +42,35 @@ module Weather
59
42
  # @return [Hash] A hash containing strings of relevant weather information.
60
43
  def conditions(location)
61
44
  response = get('conditions', location)
62
- if response['response']['error'].nil?
63
- current_observation = response['current_observation']
64
- display_location = current_observation['display_location']
65
-
66
- ret = {
67
- full_name: display_location['full'],
68
- city_name: display_location['city'],
69
- state_abbreviation: display_location['state'],
70
- state_name: display_location['state_name'],
71
- country: display_location['country'],
72
- zip_code: display_location['zip'].to_i,
73
- updated: current_observation['observation_time'],
74
- weather: current_observation['weather'],
75
- formatted_temperature: current_observation['temperature_string'],
76
- temperature_f: current_observation['temp_f'],
77
- temperature_c: current_observation['temp_c'],
78
- humidity: current_observation['relative_humidity'],
79
- formatted_wind: current_observation['wind_string'],
80
- wind_direction: current_observation['wind_dir'],
81
- wind_degrees: current_observation['wind_degrees'],
82
- wind_speed: current_observation['wind_mph'],
83
- wind_gust_speed: current_observation['wind_gust_mph'].to_i,
84
- formatted_feelslike: current_observation['feelslike_string'],
85
- feelslike_f: current_observation['feelslike_f'].to_i,
86
- feelslike_c: current_observation['feelslike_c'].to_i
87
- }
88
-
89
- ret[:humidity] = ret[:humidity].sub('%', '').to_i
90
-
91
- ret
92
- else
93
- if @verbose_errors
94
- return response['response']['error']['description']
95
- else
96
- return response['response']['error']['type']
97
- end
98
- end
45
+ current_observation = response['current_observation']
46
+ display_location = current_observation['display_location']
47
+
48
+ ret = {
49
+ full_name: display_location['full'],
50
+ city_name: display_location['city'],
51
+ state_abbreviation: display_location['state'],
52
+ state_name: display_location['state_name'],
53
+ country: display_location['country'],
54
+ zip_code: display_location['zip'].to_i,
55
+ updated: current_observation['observation_time'],
56
+ weather: current_observation['weather'],
57
+ formatted_temperature: current_observation['temperature_string'],
58
+ temperature_f: current_observation['temp_f'],
59
+ temperature_c: current_observation['temp_c'],
60
+ humidity: current_observation['relative_humidity'],
61
+ formatted_wind: current_observation['wind_string'],
62
+ wind_direction: current_observation['wind_dir'],
63
+ wind_degrees: current_observation['wind_degrees'],
64
+ wind_speed: current_observation['wind_mph'],
65
+ wind_gust_speed: current_observation['wind_gust_mph'].to_i,
66
+ formatted_feelslike: current_observation['feelslike_string'],
67
+ feelslike_f: current_observation['feelslike_f'].to_i,
68
+ feelslike_c: current_observation['feelslike_c'].to_i
69
+ }
70
+
71
+ ret[:humidity] = ret[:humidity].sub('%', '').to_i
72
+
73
+ ret
99
74
  end
100
75
 
101
76
  # Gets the record low for the location.
@@ -103,24 +78,13 @@ module Weather
103
78
  # @return [Hash] A hash containing a few integers of data.
104
79
  def record_low(location)
105
80
  response = get('almanac', location)
106
-
107
- if response['response']['error'].nil?
108
- ret = {
109
- average_low_f: response['almanac']['temp_low']['normal']['F'].to_i,
110
- average_low_c: response['almanac']['temp_low']['normal']['C'].to_i,
111
- record_year: response['almanac']['temp_low']['recordyear'].to_i,
112
- record_low_f: response['almanac']['temp_low']['record']['F'].to_i,
113
- record_low_c: response['almanac']['temp_low']['record']['C'].to_i
114
- }
115
-
116
- ret
117
- else
118
- if @verbose_errors
119
- return response['response']['error']['description']
120
- else
121
- return response['response']['error']['type']
122
- end
123
- end
81
+ {
82
+ average_low_f: response['almanac']['temp_low']['normal']['F'].to_i,
83
+ average_low_c: response['almanac']['temp_low']['normal']['C'].to_i,
84
+ record_year: response['almanac']['temp_low']['recordyear'].to_i,
85
+ record_low_f: response['almanac']['temp_low']['record']['F'].to_i,
86
+ record_low_c: response['almanac']['temp_low']['record']['C'].to_i
87
+ }
124
88
  end
125
89
 
126
90
  # Gets the record high for the location.
@@ -128,24 +92,13 @@ module Weather
128
92
  # @return [Hash] A hash containing a few integers of data.
129
93
  def record_high(location)
130
94
  response = get('almanac', location)
131
-
132
- if response['response']['error'].nil?
133
- ret = {
134
- average_high_f: response['almanac']['temp_high']['normal']['F'].to_i,
135
- average_high_c: response['almanac']['temp_high']['normal']['C'].to_i,
136
- record_year: response['almanac']['temp_high']['recordyear'].to_i,
137
- record_high_f: response['almanac']['temp_high']['record']['F'].to_i,
138
- record_high_c: response['almanac']['temp_high']['record']['C'].to_i
139
- }
140
-
141
- ret
142
- else
143
- if @verbose_errors
144
- return response['response']['error']['description']
145
- else
146
- return response['response']['error']['type']
147
- end
148
- end
95
+ {
96
+ average_high_f: response['almanac']['temp_high']['normal']['F'].to_i,
97
+ average_high_c: response['almanac']['temp_high']['normal']['C'].to_i,
98
+ record_year: response['almanac']['temp_high']['recordyear'].to_i,
99
+ record_high_f: response['almanac']['temp_high']['record']['F'].to_i,
100
+ record_high_c: response['almanac']['temp_high']['record']['C'].to_i
101
+ }
149
102
  end
150
103
 
151
104
  # Gets data for currently-happening hurricanes around the world.
@@ -154,31 +107,23 @@ module Weather
154
107
  def hurricane_data
155
108
  response = get('currenthurricane', 'view')
156
109
 
157
- if response['response']['error'].nil?
158
- ret = {}
159
- response['currenthurricane'].each do |h|
160
- ret[h['stormInfo']['stormName_Nice']] = {
161
- name: h['stormInfo']['stormName'],
162
- number: h['stormInfo']['stormNumber'],
163
- category: h['Current']['Category'],
164
- time: h['Current']['Time']['pretty'],
165
- wind_speed_mph: h['Current']['WindSpeed']['Mph'],
166
- wind_speed_kts: h['Current']['WindSpeed']['Kts'],
167
- wind_speed_kph: h['Current']['WindSpeed']['Kph'],
168
- gust_speed_mph: h['Current']['WindGust']['Mph'],
169
- gust_speed_kts: h['Current']['WindGust']['Kts'],
170
- gust_speed_kph: h['Current']['WindGust']['Kph']
171
- }
172
- end
173
-
174
- ret
175
- else
176
- if @verbose_errors
177
- return response['response']['error']['description']
178
- else
179
- return response['response']['error']['type']
180
- end
110
+ ret = {}
111
+ response['currenthurricane'].each do |h|
112
+ ret[h['stormInfo']['stormName_Nice']] = {
113
+ name: h['stormInfo']['stormName'],
114
+ number: h['stormInfo']['stormNumber'],
115
+ category: h['Current']['Category'],
116
+ time: h['Current']['Time']['pretty'],
117
+ wind_speed_mph: h['Current']['WindSpeed']['Mph'],
118
+ wind_speed_kts: h['Current']['WindSpeed']['Kts'],
119
+ wind_speed_kph: h['Current']['WindSpeed']['Kph'],
120
+ gust_speed_mph: h['Current']['WindGust']['Mph'],
121
+ gust_speed_kts: h['Current']['WindGust']['Kts'],
122
+ gust_speed_kph: h['Current']['WindGust']['Kph']
123
+ }
181
124
  end
125
+
126
+ ret
182
127
  end
183
128
 
184
129
  # Gets the basic forecast information for the location. Only gets data
@@ -228,76 +173,60 @@ module Weather
228
173
 
229
174
  # Parses the simple forecast information.
230
175
  def parse_simple_forecast(response)
231
- if response['response']['error'].nil?
232
- ret = {}
176
+ ret = {}
233
177
 
234
- response['forecast']['txt_forecast']['forecastday'].each do |f|
235
- ret[f['period']] = {
236
- weekday_name: f['title'],
237
- text: f['fcttext'],
238
- text_metric: f['fcttext_metric']
239
- }
240
- end
241
-
242
- ret
243
- else
244
- if @verbose_errors
245
- return response['response']['error']['description']
246
- else
247
- return response['response']['error']['type']
248
- end
178
+ response['forecast']['txt_forecast']['forecastday'].each do |f|
179
+ ret[f['period']] = {
180
+ weekday_name: f['title'],
181
+ text: f['fcttext'],
182
+ text_metric: f['fcttext_metric']
183
+ }
249
184
  end
185
+
186
+ ret
250
187
  end
251
188
 
252
189
  # Parses the complex forecast information.
253
190
  def parse_complex_forecast(response)
254
- if response['response']['error'].nil?
255
- ret = {}
256
-
257
- response['forecast']['simpleforecast']['forecastday'].each do |f|
258
- ret[f['period'] - 1] = {
259
- high_f: f['high']['fahrenheit'].to_i,
260
- high_c: f['high']['celsius'].to_i,
261
- low_f: f['low']['fahrenheit'].to_i,
262
- low_c: f['low']['celsius'].to_i,
263
- conditions: f['conditions'].to_i,
264
- snow: {
265
- snow_total_in: f['snow_allday']['in'],
266
- snow_total_cm: f['snow_allday']['cm'],
267
- snow_night_in: f['snow_night']['in'],
268
- snow_night_cm: f['snow_night']['cm'],
269
- snow_day_in: f['snow_day']['in'],
270
- snow_day_cm: f['snow_day']['cm']
271
- },
272
- quantative_precipitation: {
273
- qpf_total_in: f['qpf_allday']['in'],
274
- qpf_total_cm: f['qpf_allday']['cm'],
275
- qpf_night_in: f['qpf_night']['in'],
276
- qpf_night_cm: f['qpf_night']['cm'],
277
- qpf_day_in: f['qpf_day']['in'],
278
- qpf_day_cm: f['qpf_day']['cm']
279
- },
280
- wind: {
281
- average_mph: f['avewind']['mph'],
282
- average_kph: f['avewind']['kph'],
283
- average_dir: f['avewind']['dir'],
284
- average_temp: f['avewind']['degrees'],
285
- max_mph: f['maxwind']['mph'],
286
- max_kph: f['maxwind']['kph'],
287
- max_dir: f['maxwind']['dir'],
288
- max_temp: f['maxwind']['degrees']
289
- }
191
+ ret = {}
192
+
193
+ response['forecast']['simpleforecast']['forecastday'].each do |f|
194
+ ret[f['period'] - 1] = {
195
+ high_f: f['high']['fahrenheit'].to_i,
196
+ high_c: f['high']['celsius'].to_i,
197
+ low_f: f['low']['fahrenheit'].to_i,
198
+ low_c: f['low']['celsius'].to_i,
199
+ conditions: f['conditions'].to_i,
200
+ snow: {
201
+ snow_total_in: f['snow_allday']['in'],
202
+ snow_total_cm: f['snow_allday']['cm'],
203
+ snow_night_in: f['snow_night']['in'],
204
+ snow_night_cm: f['snow_night']['cm'],
205
+ snow_day_in: f['snow_day']['in'],
206
+ snow_day_cm: f['snow_day']['cm']
207
+ },
208
+ quantative_precipitation: {
209
+ qpf_total_in: f['qpf_allday']['in'],
210
+ qpf_total_cm: f['qpf_allday']['cm'],
211
+ qpf_night_in: f['qpf_night']['in'],
212
+ qpf_night_cm: f['qpf_night']['cm'],
213
+ qpf_day_in: f['qpf_day']['in'],
214
+ qpf_day_cm: f['qpf_day']['cm']
215
+ },
216
+ wind: {
217
+ average_mph: f['avewind']['mph'],
218
+ average_kph: f['avewind']['kph'],
219
+ average_dir: f['avewind']['dir'],
220
+ average_temp: f['avewind']['degrees'],
221
+ max_mph: f['maxwind']['mph'],
222
+ max_kph: f['maxwind']['kph'],
223
+ max_dir: f['maxwind']['dir'],
224
+ max_temp: f['maxwind']['degrees']
290
225
  }
291
- end
292
-
293
- ret
294
- else
295
- if @verbose_errors
296
- return response['response']['error']['description']
297
- else
298
- return response['response']['error']['type']
299
- end
226
+ }
300
227
  end
228
+
229
+ ret
301
230
  end
302
231
  end
303
232
  end
@@ -183,8 +183,6 @@ module Weather
183
183
  # metric and imperial systems.
184
184
  def get_temperatures(start_date, end_date, location)
185
185
  response = get_planner_response(start_date, end_date, location)
186
- return response['response']['error'] unless
187
- response['response']['error'].nil?
188
186
  highs = response['trip']['temp_high']
189
187
  lows = response['trip']['temp_low']
190
188
 
@@ -242,7 +240,6 @@ module Weather
242
240
  # @return [Fixnum] The chance of the subject happening.
243
241
  def get_chance_of(subject, start_date, end_date, location)
244
242
  response = get_planner_response(start_date, end_date, location)
245
- return unless response['response']['error'].nil?
246
243
 
247
244
  response['trip']['chance_of'][subject]['percentage'].to_i
248
245
  end
data/lib/weatheruby.rb CHANGED
@@ -2,38 +2,36 @@ require 'httpclient'
2
2
  require 'json'
3
3
  require_relative 'weather/actions'
4
4
  require_relative 'weather/planner'
5
- require_relative 'weather/exceptions'
6
5
 
7
6
  class Weatheruby
7
+ class WeatherError < StandardError; end
8
+
8
9
  include Weather::Actions
9
10
  include Weather::Planner
10
11
 
12
+ attr_accessor :language_key
13
+
11
14
  # Creates a new instance of Weatheruby.
12
- # @param api_key [String] Your personal API key obtained on sign up for
13
- # Weather Underground.
15
+ # @param api_key [String] Your personal API key obtained on sign up for Weather Underground.
14
16
  # @param language [String] The language code you would like to use.
15
- # @param use_pws [Boolean] Whether to use the Personal Weather Station
16
- # feature.
17
+ # @param use_pws [Boolean] Whether to use the Personal Weather Station feature.
17
18
  # @param use_bestfct [Boolean] Whether to use BestForecast.
18
- # @param verbose_errors [Boolean] Whether to get verbose errors or not.
19
- def initialize(api_key, language = 'EN', use_pws = true, use_bestfct = true,
20
- verbose_errors = false)
19
+ def initialize(api_key, language = 'EN', use_pws = true, use_bestfct = true)
21
20
  @api_key = api_key
22
21
  @language_key = language.upcase
23
22
  @use_pws = use_pws ? 1 : 0
24
23
  @use_bestfct = use_bestfct ? 1 : 0
25
- @verbose_errors = verbose_errors
26
24
 
27
25
  @client = HTTPClient.new
28
26
  end
29
27
 
30
- # Performs a generic HTTP GET request. This method should generally not be
31
- # used by a standard user, unless there is not a method for a particular
32
- # action/feature.
28
+ # Performs a generic HTTP GET request. This method should generally not be used by a standard user, unless there is
29
+ # not a method for a particular action/feature.
33
30
  # @param feature [String] The "feature" parameter defined by Wunderground.
34
31
  # @param location [String] The location of the query.
35
32
  # @param autoparse [Boolean] Whether to automatically parse the response.
36
- # @return [JSON/HTTPMessage] Parsed JSON if true, or raw response if not.
33
+ # @return [Hash/HTTPMessage] Parsed JSON if autoparse is true, or raw response if not.
34
+ # @raise WeatherError if anything goes wrong with the API, or it returns too many results for us to handle.
37
35
  def get(feature, location, autoparse = true)
38
36
  url = "http://api.wunderground.com/api/#{@api_key}/#{feature}/lang:" \
39
37
  "#{@language_key}/pws:#{@use_pws}/bestfct:#{@use_bestfct}/q/" \
@@ -42,14 +40,14 @@ class Weatheruby
42
40
  uri = URI.parse(url)
43
41
  res = @client.get(uri)
44
42
  json = JSON.parse(res.body)
45
- unless json['response']['results'].nil?
46
- fail Weather::Exceptions::TooManyResultsError
43
+ if json['response'].key?('error')
44
+ fail(WeatherError, json['response']['error']['type'] + ': ' + json['response']['error']['description'].capitalize)
47
45
  end
48
-
49
- if autoparse
50
- return json
51
- else
52
- return res
46
+ if json['response'].key?('results')
47
+ fail(WeatherError, 'toomanyresults: Too many results were returned. Try narrowing your search.')
53
48
  end
49
+
50
+
51
+ autoparse ? json : res
54
52
  end
55
53
  end
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.5.3
4
+ version: 0.6.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: 2016-05-02 00:00:00.000000000 Z
11
+ date: 2016-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient
@@ -60,9 +60,9 @@ extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
62
  - CHANGELOG.md
63
+ - LICENSE.md
63
64
  - bin/weatheruby
64
65
  - lib/weather/actions.rb
65
- - lib/weather/exceptions.rb
66
66
  - lib/weather/planner.rb
67
67
  - lib/weatheruby.rb
68
68
  homepage: https://github.com/elifoster/weatheruby
@@ -1,10 +0,0 @@
1
- module Weather
2
- module Exceptions
3
- class TooManyResultsError < StandardError
4
- def message
5
- 'There were too many locations given in the response. Please narrow ' \
6
- 'down your query.'
7
- end
8
- end
9
- end
10
- end