lita-pagerduty 0.0.1
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 +7 -0
- data/.gitignore +17 -0
- data/.rubocop.yml +8 -0
- data/.travis.yml +8 -0
- data/Gemfile +3 -0
- data/LICENSE +19 -0
- data/README.md +67 -0
- data/Rakefile +6 -0
- data/lib/lita/handlers/pagerduty.rb +401 -0
- data/lib/lita-pagerduty.rb +1 -0
- data/lita-pagerduty.gemspec +25 -0
- data/locales/en.yml +4 -0
- data/spec/lita/handlers/pagerduty_spec.rb +457 -0
- data/spec/spec_helper.rb +10 -0
- metadata +158 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c1976196f33f4a430eff395034fd70aeb5ad0ade
|
4
|
+
data.tar.gz: 59f6a07f7e158675e73c5729241adf9d4dc3bc8c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dbc56aedef1af70d73ce6bdb4cc50c6794c1e48e446f06e7727567a3f5a8b75a828b609768145c8d0dcd6c063ebae756793d28e694158a041e55de16974678c0
|
7
|
+
data.tar.gz: 5e60c4a48e19be645a661c8e91dfd3cd1e2fb01cbb940f78719d935a14e4245dfe6f1723aa759cb7313440922848c4c2bbc895382353510114dd7b9f1e3cb72d
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2014 Eric Sigler
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# lita-pagerduty
|
2
|
+
|
3
|
+
[](https://travis-ci.org/esigler/lita-pagerduty)
|
4
|
+
[](https://codeclimate.com/github/esigler/lita-pagerduty)
|
5
|
+
[](https://coveralls.io/r/esigler/lita-pagerduty?branch=master)
|
6
|
+
|
7
|
+
PagerDuty (http://pagerduty.com) handler for checking who's on call, scheduling, ack, resolve, etc.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add lita-pagerduty to your Lita instance's Gemfile:
|
12
|
+
|
13
|
+
``` ruby
|
14
|
+
gem "lita-pagerduty"
|
15
|
+
```
|
16
|
+
|
17
|
+
## Configuration
|
18
|
+
|
19
|
+
Add the following variables to your Lita config file:
|
20
|
+
|
21
|
+
``` ruby
|
22
|
+
config.handlers.pagerduty.api_key = ''
|
23
|
+
config.handlers.pagerduty.subdomain = ''
|
24
|
+
```
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
### Specific incidents
|
29
|
+
|
30
|
+
```
|
31
|
+
Lita pager incidents all - Show all open incidents
|
32
|
+
Lita pager incidents mine - Show all open incidents assigned to me
|
33
|
+
Lita pager incident <incident ID> - Show a specific incident
|
34
|
+
```
|
35
|
+
|
36
|
+
### Incident notes
|
37
|
+
|
38
|
+
```
|
39
|
+
Lita pager notes <incident ID> - Show all notes for a specific incident
|
40
|
+
```
|
41
|
+
|
42
|
+
### Acknowledging an incident
|
43
|
+
|
44
|
+
```
|
45
|
+
Lita pager ack all - Acknowledge all triggered incidents
|
46
|
+
Lita pager ack mine - Acknowledge all triggered incidents assigned to me
|
47
|
+
Lita pager ack <incident ID> - Acknowledge a specific incident
|
48
|
+
```
|
49
|
+
|
50
|
+
### Resolving an incident
|
51
|
+
|
52
|
+
```
|
53
|
+
Lita pager resolve all - Resolve all triggered incidents
|
54
|
+
Lita pager resolve mine - Resolve all triggered incidents assigned to me
|
55
|
+
Lita pager resolve <incident ID> - Resolve a specific incident
|
56
|
+
```
|
57
|
+
|
58
|
+
### Misc
|
59
|
+
|
60
|
+
```
|
61
|
+
Lita pager identify <email address> - Associate your chat user with your email address
|
62
|
+
Lita pager forget - Remove your chat user / email association
|
63
|
+
```
|
64
|
+
|
65
|
+
## License
|
66
|
+
|
67
|
+
[MIT](http://opensource.org/licenses/MIT)
|
data/Rakefile
ADDED
@@ -0,0 +1,401 @@
|
|
1
|
+
require 'lita'
|
2
|
+
require 'pagerduty'
|
3
|
+
|
4
|
+
module Lita
|
5
|
+
module Handlers
|
6
|
+
class Pagerduty < Handler
|
7
|
+
route(
|
8
|
+
/^who\'s\son\scall\?*$/,
|
9
|
+
:whos_on_call,
|
10
|
+
command: true,
|
11
|
+
help: {
|
12
|
+
'who\'s on call?' =>
|
13
|
+
'Show everyone currently on call (not implemented yet)'
|
14
|
+
}
|
15
|
+
)
|
16
|
+
|
17
|
+
route(
|
18
|
+
/^pager\sincidents\sall$/,
|
19
|
+
:incidents_all,
|
20
|
+
command: true,
|
21
|
+
help: {
|
22
|
+
'pager incidents all' => 'Show all open incidents'
|
23
|
+
}
|
24
|
+
)
|
25
|
+
|
26
|
+
route(
|
27
|
+
/^pager\sincidents\smine$/,
|
28
|
+
:incidents_mine,
|
29
|
+
command: true,
|
30
|
+
help: {
|
31
|
+
'pager incidents mine' => 'Show all open incidents assigned to me'
|
32
|
+
}
|
33
|
+
)
|
34
|
+
|
35
|
+
route(
|
36
|
+
/^pager\sincident\s(\w+)$/,
|
37
|
+
:incident,
|
38
|
+
command: true,
|
39
|
+
help: {
|
40
|
+
'pager incident 1234' => 'Show a specific incident'
|
41
|
+
}
|
42
|
+
)
|
43
|
+
|
44
|
+
route(
|
45
|
+
/^pager\snotes\s(\w+)$/,
|
46
|
+
:notes,
|
47
|
+
command: true,
|
48
|
+
help: {
|
49
|
+
'pager notes 1234' => 'Show all notes for a specific incident'
|
50
|
+
}
|
51
|
+
)
|
52
|
+
|
53
|
+
route(
|
54
|
+
/^pager\snote\s(\w+)\s(.+)$/,
|
55
|
+
:note,
|
56
|
+
command: true,
|
57
|
+
help: {
|
58
|
+
'pager note 1234 some text' =>
|
59
|
+
'Add a note to a specific incident (not implemented yet)'
|
60
|
+
}
|
61
|
+
)
|
62
|
+
|
63
|
+
route(
|
64
|
+
/^pager\sack\sall$/,
|
65
|
+
:ack_all,
|
66
|
+
command: true,
|
67
|
+
help: {
|
68
|
+
'pager ack all' => 'Acknowledge all triggered incidents'
|
69
|
+
}
|
70
|
+
)
|
71
|
+
|
72
|
+
route(
|
73
|
+
/^pager\sack\smine$/,
|
74
|
+
:ack_mine,
|
75
|
+
command: true,
|
76
|
+
help: {
|
77
|
+
'pager ack mine' =>
|
78
|
+
'Acknowledge all triggered incidents assigned to me'
|
79
|
+
}
|
80
|
+
)
|
81
|
+
|
82
|
+
route(
|
83
|
+
/^pager\sack\s(\w+)$/,
|
84
|
+
:ack,
|
85
|
+
command: true,
|
86
|
+
help: {
|
87
|
+
'pager ack 1234' => 'Acknowledge a specific incident'
|
88
|
+
}
|
89
|
+
)
|
90
|
+
|
91
|
+
route(
|
92
|
+
/^pager\sresolve\sall$/,
|
93
|
+
:resolve_all,
|
94
|
+
command: true,
|
95
|
+
help: {
|
96
|
+
'pager resolve all' => 'Resolve all triggered incidents'
|
97
|
+
}
|
98
|
+
)
|
99
|
+
|
100
|
+
route(
|
101
|
+
/^pager\sresolve\smine$/,
|
102
|
+
:resolve_mine,
|
103
|
+
command: true,
|
104
|
+
help: {
|
105
|
+
'pager resolve mine' =>
|
106
|
+
'Resolve all triggered incidents assigned to me'
|
107
|
+
}
|
108
|
+
)
|
109
|
+
|
110
|
+
route(
|
111
|
+
/^pager\sresolve\s(\w+)$/,
|
112
|
+
:resolve,
|
113
|
+
command: true,
|
114
|
+
help: {
|
115
|
+
'pager resolve 1234' => 'Resolve a specific incident'
|
116
|
+
}
|
117
|
+
)
|
118
|
+
|
119
|
+
route(
|
120
|
+
/^pager\sidentify\s(.+)$/,
|
121
|
+
:identify,
|
122
|
+
command: true,
|
123
|
+
help: {
|
124
|
+
'pager identify <email address>' =>
|
125
|
+
'Associate your chat user with your email address'
|
126
|
+
}
|
127
|
+
)
|
128
|
+
|
129
|
+
route(
|
130
|
+
/^pager\sforget$/,
|
131
|
+
:forget,
|
132
|
+
command: true,
|
133
|
+
help: {
|
134
|
+
'pager forget' => 'Remove your chat user / email association'
|
135
|
+
}
|
136
|
+
)
|
137
|
+
|
138
|
+
def self.default_config(config)
|
139
|
+
config.api_key = nil
|
140
|
+
config.subdomain = nil
|
141
|
+
end
|
142
|
+
|
143
|
+
def whos_on_call(response)
|
144
|
+
response.reply('Not implemented yet.')
|
145
|
+
end
|
146
|
+
|
147
|
+
def identify(response)
|
148
|
+
email = response.matches[0][0]
|
149
|
+
stored_email = redis.get("email_#{response.user.id}")
|
150
|
+
if !stored_email
|
151
|
+
redis.set("email_#{response.user.id}", email)
|
152
|
+
response.reply('You have now been identified.')
|
153
|
+
else
|
154
|
+
response.reply('You have already been identified!')
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def forget(response)
|
159
|
+
stored_email = redis.get("email_#{response.user.id}")
|
160
|
+
if stored_email
|
161
|
+
redis.del("email_#{response.user.id}")
|
162
|
+
response.reply('Your email has now been forgotten.')
|
163
|
+
else
|
164
|
+
response.reply('No email on record for you.')
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def incidents_all(response)
|
169
|
+
incidents = fetch_all_incidents
|
170
|
+
if incidents.count > 0
|
171
|
+
incidents.each do |incident|
|
172
|
+
response.reply("#{incident.id}: " \
|
173
|
+
"\"#{incident.trigger_summary_data.subject}\", " \
|
174
|
+
"assigned to: #{incident.assigned_to_user.email}")
|
175
|
+
end
|
176
|
+
else
|
177
|
+
response.reply('No triggered, open, or acknowledged incidents')
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def incidents_mine(response)
|
182
|
+
email = redis.get("email_#{response.user.id}")
|
183
|
+
if email
|
184
|
+
incidents = fetch_my_incidents(email)
|
185
|
+
if incidents.count > 0
|
186
|
+
incidents.each do |incident|
|
187
|
+
response.reply("#{incident.id}: " \
|
188
|
+
"\"#{incident.trigger_summary_data.subject}\", " \
|
189
|
+
"assigned to: #{incident.assigned_to_user.email}")
|
190
|
+
end
|
191
|
+
else
|
192
|
+
response.reply('You have no triggered, open, or acknowledged ' \
|
193
|
+
'incidents')
|
194
|
+
end
|
195
|
+
else
|
196
|
+
response.reply('You have not identified yourself (use the help ' \
|
197
|
+
'command for more info)')
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
def incident(response)
|
202
|
+
incident_id = response.matches[0][0]
|
203
|
+
incident = fetch_incident(incident_id)
|
204
|
+
if incident != 'No results'
|
205
|
+
response.reply("#{incident_id}: " \
|
206
|
+
"\"#{incident.trigger_summary_data.subject}\", " \
|
207
|
+
"assigned to: #{incident.assigned_to_user.email}")
|
208
|
+
else
|
209
|
+
response.reply("#{incident_id}: Incident not found")
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def notes(response)
|
214
|
+
incident_id = response.matches[0][0]
|
215
|
+
incident = fetch_incident(incident_id)
|
216
|
+
if incident != 'No results'
|
217
|
+
if incident.notes.notes.count > 0
|
218
|
+
incident.notes.notes.each do |note|
|
219
|
+
response.reply("#{incident_id}: #{note.content} "\
|
220
|
+
"(#{note.user.email})")
|
221
|
+
end
|
222
|
+
else
|
223
|
+
response.reply("#{incident_id}: No notes")
|
224
|
+
end
|
225
|
+
else
|
226
|
+
response.reply("#{incident_id}: Incident not found")
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
def note(response)
|
231
|
+
response.reply('Not implemented yet.')
|
232
|
+
end
|
233
|
+
|
234
|
+
def ack_all(response)
|
235
|
+
incidents = fetch_all_incidents
|
236
|
+
if incidents.count > 0
|
237
|
+
completed = []
|
238
|
+
incidents.each do |incident|
|
239
|
+
result = acknowledge_incident(incident.id)
|
240
|
+
if result == "#{incident.id}: Incident acknowledged"
|
241
|
+
completed.push(incident.id)
|
242
|
+
end
|
243
|
+
response.reply("Acknowledged: #{completed.join(",")}")
|
244
|
+
end
|
245
|
+
else
|
246
|
+
response.reply('No triggered, open, or acknowledged incidents')
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
def ack_mine(response)
|
251
|
+
email = redis.get("email_#{response.user.id}")
|
252
|
+
if email
|
253
|
+
incidents = fetch_my_incidents(email)
|
254
|
+
if incidents.count > 0
|
255
|
+
completed = []
|
256
|
+
incidents.each do |incident|
|
257
|
+
result = acknowledge_incident(incident.id)
|
258
|
+
if result == "#{incident.id}: Incident acknowledged"
|
259
|
+
completed.push(incident.id)
|
260
|
+
end
|
261
|
+
response.reply("Acknowledged: #{completed.join(",")}")
|
262
|
+
end
|
263
|
+
else
|
264
|
+
response.reply('You have no triggered, open, or acknowledged ' \
|
265
|
+
'incidents')
|
266
|
+
end
|
267
|
+
else
|
268
|
+
response.reply('You have not identified yourself (use the help ' \
|
269
|
+
'command for more info)')
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
def ack(response)
|
274
|
+
incident_id = response.matches[0][0]
|
275
|
+
return if incident_id == 'all' || incident_id == 'mine'
|
276
|
+
response.reply(acknowledge_incident(incident_id))
|
277
|
+
end
|
278
|
+
|
279
|
+
def resolve_all(response)
|
280
|
+
incidents = fetch_all_incidents
|
281
|
+
if incidents.count > 0
|
282
|
+
completed = []
|
283
|
+
incidents.each do |incident|
|
284
|
+
result = resolve_incident(incident.id)
|
285
|
+
if result == "#{incident.id}: Incident resolved"
|
286
|
+
completed.push(incident.id)
|
287
|
+
end
|
288
|
+
response.reply("Resolved: #{completed.join(",")}")
|
289
|
+
end
|
290
|
+
else
|
291
|
+
response.reply('No triggered, open, or acknowledged incidents')
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
def resolve_mine(response)
|
296
|
+
email = redis.get("email_#{response.user.id}")
|
297
|
+
if email
|
298
|
+
incidents = fetch_my_incidents(email)
|
299
|
+
if incidents.count > 0
|
300
|
+
completed = []
|
301
|
+
incidents.each do |incident|
|
302
|
+
result = resolve_incident(incident.id)
|
303
|
+
if result == "#{incident.id}: Incident resolved"
|
304
|
+
completed.push(incident.id)
|
305
|
+
end
|
306
|
+
response.reply("Resolved: #{completed.join(",")}")
|
307
|
+
end
|
308
|
+
else
|
309
|
+
response.reply('You have no triggered, open, or acknowledged ' \
|
310
|
+
'incidents')
|
311
|
+
end
|
312
|
+
else
|
313
|
+
response.reply('You have not identified yourself (use the help ' \
|
314
|
+
'command for more info)')
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
def resolve(response)
|
319
|
+
incident_id = response.matches[0][0]
|
320
|
+
return if incident_id == 'all' || incident_id == 'mine'
|
321
|
+
response.reply(resolve_incident(incident_id))
|
322
|
+
end
|
323
|
+
|
324
|
+
private
|
325
|
+
|
326
|
+
def pd_client
|
327
|
+
if Lita.config.handlers.pagerduty.api_key.nil? ||
|
328
|
+
Lita.config.handlers.pagerduty.subdomain.nil?
|
329
|
+
fail 'Bad config'
|
330
|
+
end
|
331
|
+
|
332
|
+
::Pagerduty.new(token: Lita.config.handlers.pagerduty.api_key,
|
333
|
+
subdomain: Lita.config.handlers.pagerduty.subdomain)
|
334
|
+
end
|
335
|
+
|
336
|
+
def fetch_all_incidents
|
337
|
+
client = pd_client
|
338
|
+
list = []
|
339
|
+
# FIXME: Workaround on current PD Gem
|
340
|
+
client.incidents.incidents.each do |incident|
|
341
|
+
list.push(incident) if incident.status != 'resolved'
|
342
|
+
end
|
343
|
+
list
|
344
|
+
end
|
345
|
+
|
346
|
+
def fetch_my_incidents(email)
|
347
|
+
# FIXME: Workaround
|
348
|
+
incidents = fetch_all_incidents
|
349
|
+
list = []
|
350
|
+
incidents.each do |incident|
|
351
|
+
list.push(incident) if incident.assigned_to_user.email == email
|
352
|
+
end
|
353
|
+
list
|
354
|
+
end
|
355
|
+
|
356
|
+
def fetch_incident(incident_id)
|
357
|
+
client = pd_client
|
358
|
+
client.get_incident(id: incident_id)
|
359
|
+
end
|
360
|
+
|
361
|
+
def acknowledge_incident(incident_id)
|
362
|
+
incident = fetch_incident(incident_id)
|
363
|
+
if incident != 'No results'
|
364
|
+
if incident.status != 'acknowledged' &&
|
365
|
+
incident.status != 'resolved'
|
366
|
+
results = incident.acknowledge
|
367
|
+
if results.key?('status') && results['status'] == 'acknowledged'
|
368
|
+
"#{incident_id}: Incident acknowledged"
|
369
|
+
else
|
370
|
+
"#{incident_id}: Unable to acknowledge incident"
|
371
|
+
end
|
372
|
+
else
|
373
|
+
"#{incident_id}: Incident already #{incident.status}"
|
374
|
+
end
|
375
|
+
else
|
376
|
+
"#{incident_id}: Incident not found"
|
377
|
+
end
|
378
|
+
end
|
379
|
+
|
380
|
+
def resolve_incident(incident_id)
|
381
|
+
incident = fetch_incident(incident_id)
|
382
|
+
if incident != 'No results'
|
383
|
+
if incident.status != 'resolved'
|
384
|
+
results = incident.resolve
|
385
|
+
if results.key?('status') && results['status'] == 'resolved'
|
386
|
+
"#{incident_id}: Incident resolved"
|
387
|
+
else
|
388
|
+
"#{incident_id}: Unable to resolve incident"
|
389
|
+
end
|
390
|
+
else
|
391
|
+
"#{incident_id}: Incident already #{incident.status}"
|
392
|
+
end
|
393
|
+
else
|
394
|
+
"#{incident_id}: Incident not found"
|
395
|
+
end
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
Lita.register_handler(Pagerduty)
|
400
|
+
end
|
401
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'lita/handlers/pagerduty'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = "lita-pagerduty"
|
3
|
+
spec.version = "0.0.1"
|
4
|
+
spec.authors = ["Eric Sigler"]
|
5
|
+
spec.email = ["me@esigler.com"]
|
6
|
+
spec.description = %q{A Lita handler to interact with PagerDuty}
|
7
|
+
spec.summary = %q{A Lita handler to interact with PagerDuty}
|
8
|
+
spec.homepage = "http://github.com/esigler/lita-pagerduty"
|
9
|
+
spec.license = "MIT"
|
10
|
+
spec.metadata = { "lita_plugin_type" => "handler" }
|
11
|
+
|
12
|
+
spec.files = `git ls-files`.split($/)
|
13
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
14
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
15
|
+
spec.require_paths = ["lib"]
|
16
|
+
|
17
|
+
spec.add_runtime_dependency "lita", ">= 3.0"
|
18
|
+
spec.add_runtime_dependency "pagerduty-sdk"
|
19
|
+
|
20
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
21
|
+
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "rspec", ">= 3.0.0.beta2"
|
23
|
+
spec.add_development_dependency "simplecov"
|
24
|
+
spec.add_development_dependency "coveralls"
|
25
|
+
end
|
data/locales/en.yml
ADDED
@@ -0,0 +1,457 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pagerduty'
|
3
|
+
|
4
|
+
describe Lita::Handlers::Pagerduty, lita_handler: true do
|
5
|
+
let(:no_incident) do
|
6
|
+
client = double
|
7
|
+
expect(client).to receive(:get_incident) { 'No results' }
|
8
|
+
client
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:no_incidents) do
|
12
|
+
client = double
|
13
|
+
expect(client).to receive(:incidents) do
|
14
|
+
double(
|
15
|
+
incidents: []
|
16
|
+
)
|
17
|
+
end
|
18
|
+
client
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:incidents) do
|
22
|
+
client = double
|
23
|
+
expect(client).to receive(:incidents) do
|
24
|
+
double(
|
25
|
+
incidents: [
|
26
|
+
double(
|
27
|
+
id: 'ABC123',
|
28
|
+
status: 'resolved',
|
29
|
+
trigger_summary_data: double(subject: 'something broke'),
|
30
|
+
assigned_to_user: double(email: 'foo@example.com')
|
31
|
+
),
|
32
|
+
double(
|
33
|
+
id: 'ABC789',
|
34
|
+
status: 'triggered',
|
35
|
+
trigger_summary_data: double(subject: 'Still broke'),
|
36
|
+
assigned_to_user: double(email: 'bar@example.com')
|
37
|
+
)
|
38
|
+
]
|
39
|
+
)
|
40
|
+
end
|
41
|
+
allow(client).to receive(:get_incident) do
|
42
|
+
double(
|
43
|
+
status: 'triggered',
|
44
|
+
trigger_summary_data: double(subject: 'Still broke'),
|
45
|
+
assigned_to_user: double(email: 'bar@example.com'),
|
46
|
+
acknowledge: { 'id' => 'ABC789', 'status' => 'acknowledged' },
|
47
|
+
resolve: { 'id' => 'ABC789', 'status' => 'resolved' },
|
48
|
+
notes: double(notes: [])
|
49
|
+
)
|
50
|
+
end
|
51
|
+
client
|
52
|
+
end
|
53
|
+
|
54
|
+
let(:new_incident) do
|
55
|
+
client = double
|
56
|
+
expect(client).to receive(:get_incident) do
|
57
|
+
double(
|
58
|
+
status: 'triggered',
|
59
|
+
trigger_summary_data: double(subject: 'something broke'),
|
60
|
+
assigned_to_user: double(email: 'foo@example.com'),
|
61
|
+
acknowledge: { 'id' => 'ABC123', 'status' => 'acknowledged' },
|
62
|
+
resolve: { 'id' => 'ABC123', 'status' => 'resolved' },
|
63
|
+
notes: double(notes: [])
|
64
|
+
)
|
65
|
+
end
|
66
|
+
client
|
67
|
+
end
|
68
|
+
|
69
|
+
let(:acknowledged_incident) do
|
70
|
+
client = double
|
71
|
+
expect(client).to receive(:get_incident) do
|
72
|
+
double(
|
73
|
+
status: 'acknowledged',
|
74
|
+
trigger_summary_data: double(subject: 'something broke'),
|
75
|
+
assigned_to_user: double(email: 'foo@example.com'),
|
76
|
+
acknowledge: { 'error' =>
|
77
|
+
{ 'message' => 'Incident Already Acknowledged', 'code' => 1002 }
|
78
|
+
},
|
79
|
+
resolve: { 'id' => 'ABC123', 'status' => 'resolved' },
|
80
|
+
notes: double(notes: [])
|
81
|
+
)
|
82
|
+
end
|
83
|
+
client
|
84
|
+
end
|
85
|
+
|
86
|
+
let(:resolved_incident) do
|
87
|
+
client = double
|
88
|
+
expect(client).to receive(:get_incident) do
|
89
|
+
double(
|
90
|
+
status: 'resolved',
|
91
|
+
trigger_summary_data: double(subject: 'something broke'),
|
92
|
+
assigned_to_user: double(email: 'foo@example.com'),
|
93
|
+
notes: double(notes: [])
|
94
|
+
)
|
95
|
+
end
|
96
|
+
client
|
97
|
+
end
|
98
|
+
|
99
|
+
let(:incident_with_notes) do
|
100
|
+
client = double
|
101
|
+
expect(client).to receive(:get_incident) do
|
102
|
+
double(
|
103
|
+
status: 'resolved',
|
104
|
+
trigger_summary_data: double(subject: 'something broke'),
|
105
|
+
assigned_to_user: double(email: 'foo@example.com'),
|
106
|
+
notes: double(
|
107
|
+
notes: [double(content: 'Hi!',
|
108
|
+
user: double(email: 'foo@example.com'))]
|
109
|
+
)
|
110
|
+
)
|
111
|
+
end
|
112
|
+
client
|
113
|
+
end
|
114
|
+
|
115
|
+
it { routes_command('who\'s on call').to(:whos_on_call) }
|
116
|
+
it { routes_command('who\'s on call?').to(:whos_on_call) }
|
117
|
+
it { routes_command('pager identify foobar@example.com').to(:identify) }
|
118
|
+
it { routes_command('pager forget').to(:forget) }
|
119
|
+
it { routes_command('pager incidents all').to(:incidents_all) }
|
120
|
+
it { routes_command('pager incidents mine').to(:incidents_mine) }
|
121
|
+
it { routes_command('pager incident ABC123').to(:incident) }
|
122
|
+
it { routes_command('pager notes ABC123').to(:notes) }
|
123
|
+
it { routes_command('pager note ABC123 some text').to(:note) }
|
124
|
+
it { routes_command('pager ack all').to(:ack_all) }
|
125
|
+
it { routes_command('pager ack mine').to(:ack_mine) }
|
126
|
+
it { routes_command('pager ack ABC123').to(:ack) }
|
127
|
+
it { routes_command('pager resolve all').to(:resolve_all) }
|
128
|
+
it { routes_command('pager resolve mine').to(:resolve_mine) }
|
129
|
+
it { routes_command('pager resolve ABC123').to(:resolve) }
|
130
|
+
|
131
|
+
describe '.default_config' do
|
132
|
+
it 'sets api_key to nil' do
|
133
|
+
expect(Lita.config.handlers.pagerduty.api_key).to be_nil
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'sets subdomain to nil' do
|
137
|
+
expect(Lita.config.handlers.pagerduty.subdomain).to be_nil
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
describe 'without valid config' do
|
142
|
+
it 'should error out on any command' do
|
143
|
+
expect { send_command('pager ack ABC123') }.to raise_error('Bad config')
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe 'with valid config' do
|
148
|
+
before do
|
149
|
+
Lita.config.handlers.pagerduty.api_key = 'foo'
|
150
|
+
Lita.config.handlers.pagerduty.subdomain = 'bar'
|
151
|
+
end
|
152
|
+
|
153
|
+
describe '#whos_on_call' do
|
154
|
+
it 'shows a warning' do
|
155
|
+
send_command("who's on call?")
|
156
|
+
expect(replies.last).to eq('Not implemented yet.')
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe '#identify' do
|
161
|
+
describe 'when that email is new' do
|
162
|
+
it 'shows a successful identification' do
|
163
|
+
foo = Lita::User.create(123, name: 'foo')
|
164
|
+
send_command('pager identify foo@example.com', as: foo)
|
165
|
+
expect(replies.last).to eq('You have now been identified.')
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
# TODO: It'd be great to validate this against the existing
|
170
|
+
# users on the PD account.
|
171
|
+
|
172
|
+
describe 'when that email exists already' do
|
173
|
+
it 'shows a warning' do
|
174
|
+
baz = Lita::User.create(321, name: 'baz')
|
175
|
+
send_command('pager identify baz@example.com', as: baz)
|
176
|
+
send_command('pager identify baz@example.com', as: baz)
|
177
|
+
expect(replies.last).to eq('You have already been identified!')
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
describe '#forget' do
|
183
|
+
describe 'when that user is associated' do
|
184
|
+
it 'shows a successful forget' do
|
185
|
+
foo = Lita::User.create(123, name: 'foo')
|
186
|
+
send_command('pager identify foo@example.com', as: foo)
|
187
|
+
send_command('pager forget', as: foo)
|
188
|
+
expect(replies.last).to eq('Your email has now been forgotten.')
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
describe 'when that user is not associated' do
|
193
|
+
it 'shows a warning' do
|
194
|
+
foo = Lita::User.create(123, name: 'foo')
|
195
|
+
send_command('pager forget', as: foo)
|
196
|
+
expect(replies.last).to eq('No email on record for you.')
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
describe '#incidents_all' do
|
202
|
+
describe 'when there are open incidents' do
|
203
|
+
it 'shows a list of incidents' do
|
204
|
+
expect(Pagerduty).to receive(:new) { incidents }
|
205
|
+
send_command('pager incidents all')
|
206
|
+
expect(replies.last).to eq('ABC789: "Still broke", assigned to: '\
|
207
|
+
'bar@example.com')
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
describe 'when there are no open incidents' do
|
212
|
+
it 'shows a warning' do
|
213
|
+
expect(Pagerduty).to receive(:new) { no_incidents }
|
214
|
+
send_command('pager incidents all')
|
215
|
+
expect(replies.last).to eq('No triggered, open, or acknowledged ' \
|
216
|
+
'incidents')
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
describe '#incidents_mine' do
|
222
|
+
describe 'when there are open incidents for the user' do
|
223
|
+
it 'shows a list of incidents' do
|
224
|
+
bar = Lita::User.create(123, name: 'bar')
|
225
|
+
expect(Pagerduty).to receive(:new) { incidents }
|
226
|
+
send_command('pager identify bar@example.com', as: bar)
|
227
|
+
send_command('pager incidents mine', as: bar)
|
228
|
+
expect(replies.last).to eq('ABC789: "Still broke", assigned to: ' \
|
229
|
+
'bar@example.com')
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
describe 'when there are no open incidents for the user' do
|
234
|
+
it 'shows no incidents' do
|
235
|
+
foo = Lita::User.create(123, name: 'foo')
|
236
|
+
expect(Pagerduty).to receive(:new) { incidents }
|
237
|
+
send_command('pager identify foo@example.com', as: foo)
|
238
|
+
send_command('pager incidents mine', as: foo)
|
239
|
+
expect(replies.last).to eq('You have no triggered, open, or ' \
|
240
|
+
'acknowledged incidents')
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
describe 'when the user has not identified themselves' do
|
245
|
+
it 'shows a warning' do
|
246
|
+
send_command('pager incidents mine')
|
247
|
+
expect(replies.last).to eq('You have not identified yourself (use ' \
|
248
|
+
'the help command for more info)')
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
describe '#incident' do
|
254
|
+
describe 'when the incident exists' do
|
255
|
+
it 'shows incident details' do
|
256
|
+
expect(Pagerduty).to receive(:new) { new_incident }
|
257
|
+
send_command('pager incident ABC123')
|
258
|
+
expect(replies.last).to eq('ABC123: "something broke", ' \
|
259
|
+
'assigned to: foo@example.com')
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
describe 'when the incident does not exist' do
|
264
|
+
it 'shows an error' do
|
265
|
+
expect(Pagerduty).to receive(:new) { no_incident }
|
266
|
+
send_command('pager incident ABC123')
|
267
|
+
expect(replies.last).to eq('ABC123: Incident not found')
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
describe '#notes' do
|
273
|
+
describe 'when the incident has notes' do
|
274
|
+
it 'shows incident notes' do
|
275
|
+
expect(Pagerduty).to receive(:new) { incident_with_notes }
|
276
|
+
send_command('pager notes ABC123')
|
277
|
+
expect(replies.last).to eq('ABC123: Hi! (foo@example.com)')
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
describe 'when the incident doesnt have notes' do
|
282
|
+
it 'shows no notes' do
|
283
|
+
expect(Pagerduty).to receive(:new) { new_incident }
|
284
|
+
send_command('pager notes ABC123')
|
285
|
+
expect(replies.last).to eq('ABC123: No notes')
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
describe 'when the incident does not exist' do
|
290
|
+
it 'shows an error' do
|
291
|
+
expect(Pagerduty).to receive(:new) { no_incident }
|
292
|
+
send_command('pager notes ABC123')
|
293
|
+
expect(replies.last).to eq('ABC123: Incident not found')
|
294
|
+
end
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
describe '#note' do
|
299
|
+
it 'shows a warning' do
|
300
|
+
send_command('pager note ABC123 some text')
|
301
|
+
expect(replies.last).to eq('Not implemented yet.')
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
describe '#ack_all' do
|
306
|
+
describe 'when there are acknowledgable incidents' do
|
307
|
+
it 'shows them as acknowledged' do
|
308
|
+
expect(Pagerduty).to receive(:new).twice { incidents }
|
309
|
+
send_command('pager ack all')
|
310
|
+
expect(replies.last).to eq('Acknowledged: ABC789')
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
describe 'when there are no acknowledgable incidents' do
|
315
|
+
it 'shows a warning' do
|
316
|
+
expect(Pagerduty).to receive(:new) { no_incidents }
|
317
|
+
send_command('pager ack all')
|
318
|
+
expect(replies.last).to eq('No triggered, open, or acknowledged ' \
|
319
|
+
'incidents')
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|
323
|
+
|
324
|
+
describe '#ack_mine' do
|
325
|
+
describe 'when there are acknowledgable incidents for the user' do
|
326
|
+
it 'shows them as acknowledged' do
|
327
|
+
bar = Lita::User.create(123, name: 'bar')
|
328
|
+
expect(Pagerduty).to receive(:new).twice { incidents }
|
329
|
+
send_command('pager identify bar@example.com', as: bar)
|
330
|
+
send_command('pager ack mine', as: bar)
|
331
|
+
expect(replies.last).to eq('Acknowledged: ABC789')
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
describe 'when there are no acknowledgable incidents for the user' do
|
336
|
+
it 'shows a warning' do
|
337
|
+
foo = Lita::User.create(123, name: 'foo')
|
338
|
+
expect(Pagerduty).to receive(:new) { incidents }
|
339
|
+
send_command('pager identify foo@example.com', as: foo)
|
340
|
+
send_command('pager ack mine', as: foo)
|
341
|
+
expect(replies.last).to eq('You have no triggered, open, or ' \
|
342
|
+
'acknowledged incidents')
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
describe 'when the user has not identified themselves' do
|
347
|
+
it 'shows a warning' do
|
348
|
+
send_command('pager ack mine')
|
349
|
+
expect(replies.last).to eq('You have not identified yourself (use ' \
|
350
|
+
'the help command for more info)')
|
351
|
+
end
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
describe '#ack' do
|
356
|
+
describe 'when the incident has not been acknowledged' do
|
357
|
+
it 'shows the acknowledgement' do
|
358
|
+
expect(Pagerduty).to receive(:new) { new_incident }
|
359
|
+
send_command('pager ack ABC123')
|
360
|
+
expect(replies.last).to eq('ABC123: Incident acknowledged')
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
364
|
+
describe 'when the incident has already been acknowledged' do
|
365
|
+
it 'shows the warning' do
|
366
|
+
expect(Pagerduty).to receive(:new) { acknowledged_incident }
|
367
|
+
send_command('pager ack ABC123')
|
368
|
+
expect(replies.last).to eq('ABC123: Incident already acknowledged')
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
372
|
+
describe 'when the incident does not exist' do
|
373
|
+
it 'shows an error' do
|
374
|
+
expect(Pagerduty).to receive(:new) { no_incident }
|
375
|
+
send_command('pager ack ABC123')
|
376
|
+
expect(replies.last).to eq('ABC123: Incident not found')
|
377
|
+
end
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
describe '#resolve_all' do
|
382
|
+
describe 'when there are resolvable incidents' do
|
383
|
+
it 'shows them as resolved' do
|
384
|
+
expect(Pagerduty).to receive(:new).twice { incidents }
|
385
|
+
send_command('pager resolve all')
|
386
|
+
expect(replies.last).to eq('Resolved: ABC789')
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
390
|
+
describe 'when there are no resolvable incidents' do
|
391
|
+
it 'shows a warning' do
|
392
|
+
expect(Pagerduty).to receive(:new) { no_incidents }
|
393
|
+
send_command('pager resolve all')
|
394
|
+
expect(replies.last).to eq('No triggered, open, or acknowledged ' \
|
395
|
+
'incidents')
|
396
|
+
end
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
describe '#resolve_mine' do
|
401
|
+
describe 'when there are resolvable incidents for the user' do
|
402
|
+
it 'shows them as acknowledged' do
|
403
|
+
bar = Lita::User.create(123, name: 'bar')
|
404
|
+
expect(Pagerduty).to receive(:new).twice { incidents }
|
405
|
+
send_command('pager identify bar@example.com', as: bar)
|
406
|
+
send_command('pager resolve mine', as: bar)
|
407
|
+
expect(replies.last).to eq('Resolved: ABC789')
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
411
|
+
describe 'when there are no resolvable incidents for the user' do
|
412
|
+
it 'shows a warning' do
|
413
|
+
foo = Lita::User.create(123, name: 'foo')
|
414
|
+
expect(Pagerduty).to receive(:new) { incidents }
|
415
|
+
send_command('pager identify foo@example.com', as: foo)
|
416
|
+
send_command('pager resolve mine', as: foo)
|
417
|
+
expect(replies.last).to eq('You have no triggered, open, or ' \
|
418
|
+
'acknowledged incidents')
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
422
|
+
describe 'when the user has not identified themselves' do
|
423
|
+
it 'shows a warning' do
|
424
|
+
send_command('pager resolve mine')
|
425
|
+
expect(replies.last).to eq('You have not identified yourself (use ' \
|
426
|
+
'the help command for more info)')
|
427
|
+
end
|
428
|
+
end
|
429
|
+
end
|
430
|
+
|
431
|
+
describe '#resolve' do
|
432
|
+
describe 'when the incident has not been resolved' do
|
433
|
+
it 'shows the resolve' do
|
434
|
+
expect(Pagerduty).to receive(:new) { new_incident }
|
435
|
+
send_command('pager resolve ABC123')
|
436
|
+
expect(replies.last).to eq('ABC123: Incident resolved')
|
437
|
+
end
|
438
|
+
end
|
439
|
+
|
440
|
+
describe 'when the incident has already been resolved' do
|
441
|
+
it 'shows the warning' do
|
442
|
+
expect(Pagerduty).to receive(:new) { resolved_incident }
|
443
|
+
send_command('pager resolve ABC123')
|
444
|
+
expect(replies.last).to eq('ABC123: Incident already resolved')
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
448
|
+
describe 'when the incident does not exist' do
|
449
|
+
it 'shows an error' do
|
450
|
+
expect(Pagerduty).to receive(:new) { no_incident }
|
451
|
+
send_command('pager resolve ABC123')
|
452
|
+
expect(replies.last).to eq('ABC123: Incident not found')
|
453
|
+
end
|
454
|
+
end
|
455
|
+
end
|
456
|
+
end
|
457
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
require 'coveralls'
|
3
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
4
|
+
SimpleCov::Formatter::HTMLFormatter,
|
5
|
+
Coveralls::SimpleCov::Formatter
|
6
|
+
]
|
7
|
+
SimpleCov.start { add_filter '/spec/' }
|
8
|
+
|
9
|
+
require 'lita-pagerduty'
|
10
|
+
require 'lita/rspec'
|
metadata
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lita-pagerduty
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Eric Sigler
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-03-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: lita
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pagerduty-sdk
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 3.0.0.beta2
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.0.0.beta2
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simplecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: coveralls
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: A Lita handler to interact with PagerDuty
|
112
|
+
email:
|
113
|
+
- me@esigler.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- ".gitignore"
|
119
|
+
- ".rubocop.yml"
|
120
|
+
- ".travis.yml"
|
121
|
+
- Gemfile
|
122
|
+
- LICENSE
|
123
|
+
- README.md
|
124
|
+
- Rakefile
|
125
|
+
- lib/lita-pagerduty.rb
|
126
|
+
- lib/lita/handlers/pagerduty.rb
|
127
|
+
- lita-pagerduty.gemspec
|
128
|
+
- locales/en.yml
|
129
|
+
- spec/lita/handlers/pagerduty_spec.rb
|
130
|
+
- spec/spec_helper.rb
|
131
|
+
homepage: http://github.com/esigler/lita-pagerduty
|
132
|
+
licenses:
|
133
|
+
- MIT
|
134
|
+
metadata:
|
135
|
+
lita_plugin_type: handler
|
136
|
+
post_install_message:
|
137
|
+
rdoc_options: []
|
138
|
+
require_paths:
|
139
|
+
- lib
|
140
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
requirements: []
|
151
|
+
rubyforge_project:
|
152
|
+
rubygems_version: 2.2.1
|
153
|
+
signing_key:
|
154
|
+
specification_version: 4
|
155
|
+
summary: A Lita handler to interact with PagerDuty
|
156
|
+
test_files:
|
157
|
+
- spec/lita/handlers/pagerduty_spec.rb
|
158
|
+
- spec/spec_helper.rb
|