myweatherforecast 0.3.1 → 0.3.2
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
- 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
|