lita-forecast 0.1.3 → 0.1.4
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/CONTRIBUTING.md +9 -0
- data/README.md +3 -4
- data/lib/lita/handlers/forecast/current.rb +6 -0
- data/lib/lita/handlers/forecast/location.rb +24 -1
- data/lib/lita-forecast/version.rb +1 -1
- data/lita-forecast.gemspec +1 -1
- data/spec/lita/handlers/forecast/current_spec.rb +44 -2
- data/spec/lita/handlers/forecast/location_spec.rb +135 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0ca70495987b9e91016e2d017d053fc7826b46bf
|
4
|
+
data.tar.gz: 7012323fbbdff18f5dd4d06bb49ec2c869517745
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c23171c3445e152ebc2c387eced2664e8df2b349714642c571dbe942417eb007e68541d15f3932348c3fb2b42fc8c954cea4c727aa766309ecb42299c229f4e
|
7
|
+
data.tar.gz: 873076adb7b04093a1dad99307d350f56e0adef16d52291c10f7cff7fab060a2b83db122eb235d64c83fc3e3bcb16b10ccc933011366ef93dc643e4d86d5ab9e
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
lita-forecast
|
2
|
+
=============
|
3
|
+
|
4
|
+
CONTRIBUTING
|
5
|
+
------------
|
6
|
+
Something wrong or you want to submit an improvement? Fork the repo, make your
|
7
|
+
changes on a feature branch, write some tests, and submit a pull request. I
|
8
|
+
only ask that the commits have useful information and use proper/complete
|
9
|
+
sentences.
|
data/README.md
CHANGED
@@ -17,10 +17,9 @@ provided in the `LICENSE` file.
|
|
17
17
|
|
18
18
|
CONTRIBUTING
|
19
19
|
------------
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
sentences.
|
20
|
+
See [CONTRIBUTION.md](https://github.com/theckman/lita-forecast/blob/master/CONTRIBUTING.md)
|
21
|
+
for information on contributing back to this project.
|
22
|
+
|
24
23
|
|
25
24
|
INSTALLATION
|
26
25
|
------------
|
@@ -7,6 +7,8 @@ module LitaForecast
|
|
7
7
|
class Current
|
8
8
|
include LitaForecast::Mixins
|
9
9
|
|
10
|
+
INFO_UNAVAIL ||= 'Information unavailable. :('
|
11
|
+
|
10
12
|
def initialize(forecast)
|
11
13
|
@f = forecast
|
12
14
|
end
|
@@ -56,10 +58,14 @@ module LitaForecast
|
|
56
58
|
|
57
59
|
def next_hour
|
58
60
|
@f['minutely']['summary']
|
61
|
+
rescue
|
62
|
+
INFO_UNAVAIL
|
59
63
|
end
|
60
64
|
|
61
65
|
def today
|
62
66
|
@f['hourly']['summary']
|
67
|
+
rescue
|
68
|
+
INFO_UNAVAIL
|
63
69
|
end
|
64
70
|
end
|
65
71
|
end
|
@@ -22,10 +22,33 @@ module LitaForecast
|
|
22
22
|
gl = geo_location(g)
|
23
23
|
loc = { lat: g['geometry']['location']['lat'],
|
24
24
|
lng: g['geometry']['location']['lng'],
|
25
|
-
desc:
|
25
|
+
desc: desc(gl) }
|
26
26
|
end
|
27
27
|
|
28
28
|
loc
|
29
29
|
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def desc(loc)
|
34
|
+
l = ''
|
35
|
+
h = { c: city(loc), s: state(loc) }
|
36
|
+
l << h[:c]
|
37
|
+
l << ', ' unless h[:c].empty? || h[:s].empty?
|
38
|
+
l << h[:s]
|
39
|
+
l
|
40
|
+
end
|
41
|
+
|
42
|
+
def city(loc)
|
43
|
+
c = ''
|
44
|
+
c << loc[:city] if loc[:city].is_a?(String) && !loc[:city].empty?
|
45
|
+
c
|
46
|
+
end
|
47
|
+
|
48
|
+
def state(loc)
|
49
|
+
s = ''
|
50
|
+
s << loc[:state] if loc[:state].is_a?(String) && !loc[:state].empty?
|
51
|
+
s
|
52
|
+
end
|
30
53
|
end
|
31
54
|
end
|
data/lita-forecast.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |g|
|
|
21
21
|
g.test_files = %x(git ls-files spec/*).split
|
22
22
|
g.files = %x(git ls-files).split
|
23
23
|
|
24
|
-
g.add_development_dependency 'bundler', '~> 1.5
|
24
|
+
g.add_development_dependency 'bundler', '~> 1.5'
|
25
25
|
g.add_development_dependency 'rake', '~> 10.2.2'
|
26
26
|
g.add_development_dependency 'rubocop', '~> 0.19.1'
|
27
27
|
g.add_development_dependency 'rspec', '>= 3.0.0.beta2'
|
@@ -20,7 +20,25 @@ describe LitaForecast::Current do
|
|
20
20
|
'flags' => { 'units' => 'us' }
|
21
21
|
}
|
22
22
|
end
|
23
|
+
let(:missing_info_forecast) do
|
24
|
+
{
|
25
|
+
'currently' => {
|
26
|
+
'temperature' => 100.11,
|
27
|
+
'apparentTemperature' => 102.11,
|
28
|
+
'summary' => 'weather',
|
29
|
+
'windBearing' => 0,
|
30
|
+
'windSpeed' => 5.11,
|
31
|
+
'humidity' => 0.10,
|
32
|
+
'dewPoint' => 20.11,
|
33
|
+
'pressure' => 1020.11,
|
34
|
+
'cloudCover' => 0.01
|
35
|
+
},
|
36
|
+
'flags' => { 'units' => 'us' }
|
37
|
+
}
|
38
|
+
end
|
23
39
|
let(:current) { described_class.new(forecast) }
|
40
|
+
let(:current_no_summary) { described_class.new(missing_info_forecast) }
|
41
|
+
let(:summary_fail) { 'Information unavailable. :(' }
|
24
42
|
|
25
43
|
describe '#new' do
|
26
44
|
context 'when given more than one arg' do
|
@@ -50,6 +68,14 @@ describe LitaForecast::Current do
|
|
50
68
|
end
|
51
69
|
end
|
52
70
|
|
71
|
+
describe '::INFO_UNAVAIL' do
|
72
|
+
subject { LitaForecast::Current::INFO_UNAVAIL }
|
73
|
+
|
74
|
+
it { should be_an_instance_of String }
|
75
|
+
|
76
|
+
it { should eql 'Information unavailable. :(' }
|
77
|
+
end
|
78
|
+
|
53
79
|
describe '.currently' do
|
54
80
|
context 'when given one arg' do
|
55
81
|
it 'should raise error ArgumentError' do
|
@@ -210,7 +236,7 @@ describe LitaForecast::Current do
|
|
210
236
|
end
|
211
237
|
end
|
212
238
|
|
213
|
-
context 'when
|
239
|
+
context 'when there is a summary' do
|
214
240
|
subject { current.send(:next_hour) }
|
215
241
|
let(:next_hour) { 'minutely weather' }
|
216
242
|
|
@@ -218,6 +244,14 @@ describe LitaForecast::Current do
|
|
218
244
|
|
219
245
|
it { should eql next_hour }
|
220
246
|
end
|
247
|
+
|
248
|
+
context 'when there is not a summary' do
|
249
|
+
subject { current_no_summary.send(:next_hour) }
|
250
|
+
|
251
|
+
it { should be_an_instance_of String }
|
252
|
+
|
253
|
+
it { should eql summary_fail }
|
254
|
+
end
|
221
255
|
end
|
222
256
|
|
223
257
|
describe '.today' do
|
@@ -229,7 +263,7 @@ describe LitaForecast::Current do
|
|
229
263
|
end
|
230
264
|
end
|
231
265
|
|
232
|
-
context 'when
|
266
|
+
context 'when there is a summary' do
|
233
267
|
subject { current.send(:today) }
|
234
268
|
let(:today) { 'hourly weather' }
|
235
269
|
|
@@ -237,6 +271,14 @@ describe LitaForecast::Current do
|
|
237
271
|
|
238
272
|
it { should eql today }
|
239
273
|
end
|
274
|
+
|
275
|
+
context 'when there is not a summary' do
|
276
|
+
subject { current_no_summary.send(:today) }
|
277
|
+
|
278
|
+
it { should be_an_instance_of String }
|
279
|
+
|
280
|
+
it { should eql summary_fail }
|
281
|
+
end
|
240
282
|
end
|
241
283
|
|
242
284
|
describe '.conditions' do
|
@@ -65,6 +65,141 @@ describe LitaForecast::Location do
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
+
describe '.city' do
|
69
|
+
context 'when given more than one arg' do
|
70
|
+
it 'should raise ArgumentError' do
|
71
|
+
expect do
|
72
|
+
@lfloc.send(:city, nil, nil)
|
73
|
+
end.to raise_error ArgumentError
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'when given less than one arg' do
|
78
|
+
it 'should raise ArgumentError' do
|
79
|
+
expect do
|
80
|
+
@lfloc.send(:city)
|
81
|
+
end.to raise_error ArgumentError
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'when given a location with a city and state' do
|
86
|
+
let(:location) { { city: 'San Francisco', state: 'CA' } }
|
87
|
+
subject { @lfloc.send(:city, location) }
|
88
|
+
|
89
|
+
it { should be_an_instance_of String }
|
90
|
+
|
91
|
+
it { should eql 'San Francisco' }
|
92
|
+
end
|
93
|
+
|
94
|
+
context 'when given a location with a city' do
|
95
|
+
let(:location) { { city: 'San Francisco' } }
|
96
|
+
subject { @lfloc.send(:city, location) }
|
97
|
+
|
98
|
+
it { should be_an_instance_of String }
|
99
|
+
|
100
|
+
it { should eql 'San Francisco' }
|
101
|
+
end
|
102
|
+
|
103
|
+
context 'when given a location without a city' do
|
104
|
+
let(:location) { { state: 'CA' } }
|
105
|
+
subject { @lfloc.send(:city, location) }
|
106
|
+
|
107
|
+
it { should be_an_instance_of String }
|
108
|
+
|
109
|
+
it { should eql '' }
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe '.state' do
|
114
|
+
context 'when given more than one arg' do
|
115
|
+
it 'should raise ArgumentError' do
|
116
|
+
expect do
|
117
|
+
subject.send(:state, nil, nil)
|
118
|
+
end.to raise_error ArgumentError
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
context 'when given less than one arg' do
|
123
|
+
it 'should raise ArgumentError' do
|
124
|
+
expect do
|
125
|
+
subject.send(:state)
|
126
|
+
end.to raise_error ArgumentError
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context 'when given location with a city and a state' do
|
131
|
+
let(:location) { { city: 'San Francisco', state: 'CA' } }
|
132
|
+
subject { @lfloc.send(:state, location) }
|
133
|
+
|
134
|
+
it { should be_an_instance_of String }
|
135
|
+
|
136
|
+
it { should eql 'CA' }
|
137
|
+
end
|
138
|
+
|
139
|
+
context 'when given location with a state' do
|
140
|
+
let(:location) { { state: 'CA' } }
|
141
|
+
subject { @lfloc.send(:state, location) }
|
142
|
+
|
143
|
+
it { should be_an_instance_of String }
|
144
|
+
|
145
|
+
it { should eql 'CA' }
|
146
|
+
end
|
147
|
+
|
148
|
+
context 'when given location with only a city' do
|
149
|
+
let(:location) { { city: 'San Francisco' } }
|
150
|
+
subject { @lfloc.send(:state, location) }
|
151
|
+
|
152
|
+
it { should be_an_instance_of String }
|
153
|
+
|
154
|
+
it { should eql '' }
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
describe '.desc' do
|
159
|
+
context 'when given more than one arg' do
|
160
|
+
it 'should raise ArgumentError' do
|
161
|
+
expect do
|
162
|
+
@lfloc.send(:desc, nil, nil)
|
163
|
+
end.to raise_error ArgumentError
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
context 'when given less than one arg' do
|
168
|
+
it 'should raise Argument Error' do
|
169
|
+
expect do
|
170
|
+
@lfloc.send(:desc)
|
171
|
+
end.to raise_error ArgumentError
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context 'when provided a location with a city and state' do
|
176
|
+
let(:loc_hash) { { city: 'San Francisco', state: 'CA' } }
|
177
|
+
subject { @lfloc.send(:desc, loc_hash) }
|
178
|
+
|
179
|
+
it { should be_an_instance_of String }
|
180
|
+
|
181
|
+
it { should eql 'San Francisco, CA'}
|
182
|
+
end
|
183
|
+
|
184
|
+
context 'when provided a location with only a state' do
|
185
|
+
let(:loc_hash) { { state: 'CA' } }
|
186
|
+
subject { @lfloc.send(:desc, loc_hash) }
|
187
|
+
|
188
|
+
it { should be_an_instance_of String }
|
189
|
+
|
190
|
+
it { should eql 'CA' }
|
191
|
+
end
|
192
|
+
|
193
|
+
context 'when provided a location with only a city' do
|
194
|
+
let(:loc_hash) { { city: 'San Francisco' } }
|
195
|
+
subject { @lfloc.send(:desc, loc_hash) }
|
196
|
+
|
197
|
+
it { should be_an_instance_of String }
|
198
|
+
|
199
|
+
it { should eql 'San Francisco' }
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
68
203
|
describe '.find_location' do
|
69
204
|
before do
|
70
205
|
allow_any_instance_of(Geocoder).to receive(:search)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lita-forecast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Heckman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03
|
11
|
+
date: 2014-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.5
|
19
|
+
version: '1.5'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.5
|
26
|
+
version: '1.5'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -174,6 +174,7 @@ files:
|
|
174
174
|
- ".rspec"
|
175
175
|
- ".rubocop.yml"
|
176
176
|
- ".travis.yml"
|
177
|
+
- CONTRIBUTING.md
|
177
178
|
- Gemfile
|
178
179
|
- LICENSE
|
179
180
|
- README.md
|