myweatherforecast 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/myweatherforecast.rb +78 -3
- data.tar.gz.sig +0 -0
- metadata +1 -1
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76f62520a708432f5a5b3c2c9304b5efedc2972e
|
4
|
+
data.tar.gz: e760fc1785af1ad2649f94759413070d7ef5b8df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e48099ceacb8f5c1ea1dfd19183be6773813042cb2608d6b49a3d1ba166c09aa70cecda2406194d4e043bb8ab542ba34f3c90d473144b3222e5fe0b83c6053d0
|
7
|
+
data.tar.gz: 86ce36fa0b4d34195eb00ea918d708b75d7a2210ecfdbd2e243e998839e885f1fef8b18f8736839c50f52df0c411667e68fd3129b5f6280a4c65a432bb7e864b
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/myweatherforecast.rb
CHANGED
@@ -2,9 +2,11 @@
|
|
2
2
|
|
3
3
|
# file: myweatherforecast.rb
|
4
4
|
|
5
|
+
require 'json'
|
5
6
|
require 'time'
|
6
7
|
require 'geocoder'
|
7
8
|
require 'forecast_io'
|
9
|
+
require 'open-uri'
|
8
10
|
|
9
11
|
|
10
12
|
|
@@ -13,18 +15,27 @@ require 'forecast_io'
|
|
13
15
|
|
14
16
|
class MyWeatherForecast
|
15
17
|
|
16
|
-
def initialize(*location, api_key: nil, units: :auto)
|
18
|
+
def initialize(*location, api_key: nil, units: :auto, timeout: 3)
|
17
19
|
|
18
20
|
lat, lon = if location.length > 1 then
|
19
21
|
|
20
22
|
location
|
21
23
|
|
22
|
-
|
24
|
+
elsif location.any?
|
23
25
|
|
24
26
|
results = Geocoder.search(location.first)
|
25
27
|
return puts 'location not found' unless results.any?
|
26
28
|
results[0].coordinates
|
27
29
|
|
30
|
+
else
|
31
|
+
|
32
|
+
h = JSON.parse open('http://jsonip.com/').read
|
33
|
+
Geocoder.configure(timeout: timeout)
|
34
|
+
results = Geocoder.search(h['ip'])
|
35
|
+
return puts 'could not determine location from IP address' unless \
|
36
|
+
results.any?
|
37
|
+
results[0].coordinates
|
38
|
+
|
28
39
|
end
|
29
40
|
|
30
41
|
ForecastIO.api_key = api_key
|
@@ -112,11 +123,42 @@ class MyWeatherForecast
|
|
112
123
|
DaysAhead.new(@forecast, @tlabel, index: i)
|
113
124
|
end
|
114
125
|
|
126
|
+
end
|
127
|
+
|
128
|
+
class OutlookDay < Day
|
129
|
+
|
130
|
+
def initialize(day, tlabel)
|
131
|
+
@x = day
|
132
|
+
@tlabel = tlabel
|
133
|
+
end
|
134
|
+
|
135
|
+
def at()
|
136
|
+
end
|
137
|
+
|
138
|
+
def to_s
|
139
|
+
"min: %d%s max: %d%s, %s" % [@x.tempmin, @tlabel, \
|
140
|
+
@x.tempmax, @tlabel, @x.summary]
|
141
|
+
end
|
142
|
+
|
143
|
+
def temperature()
|
144
|
+
end
|
145
|
+
|
146
|
+
def tempmin
|
147
|
+
"%s°" % @x.temperatureMin.round
|
148
|
+
end
|
149
|
+
|
150
|
+
def tempmax
|
151
|
+
"%s°" % @x.temperatureMax.round
|
152
|
+
end
|
153
|
+
|
154
|
+
|
115
155
|
end
|
116
156
|
|
117
157
|
def today()
|
118
158
|
Day.new(@forecast, @tlabel)
|
119
159
|
end
|
160
|
+
|
161
|
+
alias now today
|
120
162
|
|
121
163
|
def tomorrow()
|
122
164
|
|
@@ -128,5 +170,38 @@ class MyWeatherForecast
|
|
128
170
|
i += 1 until Time.at(@forecast['hourly']['data'][i]['time']).hour == 12
|
129
171
|
DaysAhead.new(@forecast, @tlabel, index: i)
|
130
172
|
end
|
173
|
+
|
174
|
+
def monday() day :monday end
|
175
|
+
def tuesday() day :tuesday end
|
176
|
+
def wednesday() day :wednesday end
|
177
|
+
def thursday() day :thursday end
|
178
|
+
def friday() day :friday end
|
179
|
+
def saturday() day :saturday end
|
180
|
+
def sunday() day :sunday end
|
181
|
+
|
182
|
+
alias sat saturday
|
183
|
+
alias sun sunday
|
184
|
+
alias mon monday
|
185
|
+
alias tue tuesday
|
186
|
+
alias wed wednesday
|
187
|
+
alias thu thursday
|
188
|
+
alias fri friday
|
189
|
+
|
190
|
+
private
|
191
|
+
|
192
|
+
def day(name)
|
193
|
+
|
194
|
+
name = (name.to_s + '?').to_sym
|
195
|
+
len = @forecast['hourly']['data'].length
|
196
|
+
i = 0
|
197
|
+
i += 1 until Time.at(@forecast['hourly']['data'][i]['time']).\
|
198
|
+
method(name).call or i >= len - 1
|
199
|
+
return DaysAhead.new(@forecast, @tlabel, index: i) unless i == len - 1
|
200
|
+
|
201
|
+
d = 0
|
202
|
+
d += 1 until Time.at(@forecast['daily']['data'][d].time).method(name).call
|
203
|
+
Time.at(@forecast['daily']['data'][d].time)
|
204
|
+
OutlookDay.new(@forecast['daily']['data'][d], @tlabel)
|
205
|
+
end
|
131
206
|
|
132
|
-
end
|
207
|
+
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
metadata.gz.sig
CHANGED
Binary file
|