lita-pagerduty 0.1.0 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 995b4cc2ce45f281596f3db0ad7e743b41366f78
4
- data.tar.gz: c372723772d7453a7d61433a35cabd21d2b55496
3
+ metadata.gz: f267ef87e565e1a057e419594aac1c2355b4b3b6
4
+ data.tar.gz: 2f1f47d4b76d1cb0343f52608b5bedf2f8e2ee4b
5
5
  SHA512:
6
- metadata.gz: fe7ab1d8f578117c52e61d6485e7a9a28af17232cc97d6a62f1ff12a782e390669783a9b4064c2f35a65fa19d874c9519a013b2949dba5a6ca9a884500cc5a63
7
- data.tar.gz: e795ce52f3318fc166f85d8b1229eddcfdf915a063aef9006d0b3cc2ad37072c82ff8196f2b58d95253d228ce78107d3328b0d4fb4e12a78ba5d792a85ea0dc7
6
+ metadata.gz: d87edef11c6072ade59a61aba8b89f2324b54943638769d4c378d378f6a9157217c28810c17dc790093ba55e95b8689e64c1f1661cd1f3b26025f90ca5c5c4da
7
+ data.tar.gz: 9a81f446e593fc25bd7928ed89b7c2b2728ead01c84b24af402741142d1e15f0d276e29a44733740ce979dda4d7aa38689a3d54e65c2340b24710e41412300e5
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --profile 5
data/.rubocop.yml CHANGED
@@ -4,6 +4,3 @@ FileName:
4
4
 
5
5
  LineLength:
6
6
  Max: 130
7
-
8
- AbcSize:
9
- Enabled: false
data/.travis.yml CHANGED
@@ -1,8 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.1
4
- script: bundle exec rake
5
- before_install:
6
- - gem update --system
4
+ - 2.2
7
5
  services:
8
6
  - redis-server
7
+ cache: bundler
8
+ sudo: false
data/README.md CHANGED
@@ -58,6 +58,13 @@ pager resolve mine - Resolve all triggered incidents assigned to
58
58
  pager resolve <incident ID> - Resolve a specific incident
59
59
  ```
60
60
 
61
+ ### Schedules
62
+
63
+ ```
64
+ pager oncall - List available schedules
65
+ pager oncall <schedule> - Show who is on call for the given schedule
66
+ ```
67
+
61
68
  ### Misc
62
69
 
63
70
  ```
@@ -15,3 +15,23 @@ require 'lita/handlers/pagerduty_incident'
15
15
  require 'lita/handlers/pagerduty_note'
16
16
  require 'lita/handlers/pagerduty_resolve'
17
17
  require 'lita/handlers/pagerduty_utility'
18
+
19
+ Lita::Handlers::PagerdutyAck.template_root File.expand_path(
20
+ File.join('..', '..', 'templates'), __FILE__
21
+ )
22
+
23
+ Lita::Handlers::PagerdutyIncident.template_root File.expand_path(
24
+ File.join('..', '..', 'templates'), __FILE__
25
+ )
26
+
27
+ Lita::Handlers::PagerdutyNote.template_root File.expand_path(
28
+ File.join('..', '..', 'templates'), __FILE__
29
+ )
30
+
31
+ Lita::Handlers::PagerdutyResolve.template_root File.expand_path(
32
+ File.join('..', '..', 'templates'), __FILE__
33
+ )
34
+
35
+ Lita::Handlers::PagerdutyUtility.template_root File.expand_path(
36
+ File.join('..', '..', 'templates'), __FILE__
37
+ )
@@ -37,6 +37,7 @@ module Lita
37
37
  }
38
38
  )
39
39
 
40
+ # rubocop:disable Metrics/AbcSize
40
41
  def ack_all(response)
41
42
  incidents = fetch_all_incidents
42
43
  return response.reply(t('incident.none')) unless incidents.count > 0
@@ -47,7 +48,9 @@ module Lita
47
48
  response.reply(t('all.acknowledged', list: completed.join(', ')))
48
49
  end
49
50
  end
51
+ # rubocop:enable Metrics/AbcSize
50
52
 
53
+ # rubocop:disable Metrics/AbcSize
51
54
  def ack_mine(response)
52
55
  email = fetch_user(response.user)
53
56
  return response.reply(t('identify.missing')) unless email
@@ -60,6 +63,7 @@ module Lita
60
63
  response.reply(t('all.acknowledged', list: completed.join(', ')))
61
64
  end
62
65
  end
66
+ # rubocop:enable Metrics/AbcSize
63
67
 
64
68
  def ack(response)
65
69
  incident_id = response.match_data['incident_id']
@@ -28,6 +28,7 @@ module Lita
28
28
  }
29
29
  )
30
30
 
31
+ # rubocop:disable Metrics/AbcSize
31
32
  def notes(response)
32
33
  incident_id = response.match_data['incident_id']
33
34
  incident = fetch_incident(incident_id)
@@ -37,6 +38,7 @@ module Lita
37
38
  response.reply(format_note(incident, note))
38
39
  end
39
40
  end
41
+ # rubocop:enable Metrics/AbcSize
40
42
 
41
43
  def note(response)
42
44
  response.reply(t('error.not_implemented'))
@@ -37,6 +37,7 @@ module Lita
37
37
  }
38
38
  )
39
39
 
40
+ # rubocop:disable Metrics/AbcSize
40
41
  def resolve_all(response)
41
42
  incidents = fetch_all_incidents
42
43
  return response.reply(t('incident.none')) unless incidents.count > 0
@@ -47,7 +48,9 @@ module Lita
47
48
  response.reply(t('all.resolved', list: completed.join(',')))
48
49
  end
49
50
  end
51
+ # rubocop:enable Metrics/AbcSize
50
52
 
53
+ # rubocop:disable Metrics/AbcSize
51
54
  def resolve_mine(response)
52
55
  email = fetch_user(response.user)
53
56
  return response.reply(t('identify.missing')) unless email
@@ -60,6 +63,7 @@ module Lita
60
63
  response.reply(t('all.resolved', list: completed.join(',')))
61
64
  end
62
65
  end
66
+ # rubocop:enable Metrics/AbcSize
63
67
 
64
68
  def resolve(response)
65
69
  incident_id = response.match_data['incident_id']
@@ -54,16 +54,17 @@ module Lita
54
54
  def on_call_list(response)
55
55
  schedules = pd_client.get_schedules.schedules
56
56
  if schedules.any?
57
- schedule_list = schedules.map(&:name).join(', ')
57
+ schedule_list = schedules.map(&:name).join("\n")
58
58
  response.reply(t('on_call_list.response', schedules: schedule_list))
59
59
  else
60
60
  response.reply(t('on_call_list.no_schedules_found'))
61
61
  end
62
62
  end
63
63
 
64
+ # rubocop:disable Metrics/AbcSize
64
65
  def on_call_lookup(response)
65
66
  schedule_name = response.match_data[1].strip
66
- schedule = pd_client.get_schedules.schedules.find { |s| s.name == schedule_name }
67
+ schedule = pd_client.get_schedules.schedules.find { |s| s.casecmp(schedule_name) == 0 }
67
68
 
68
69
  unless schedule
69
70
  return response.reply(t('on_call_lookup.no_matching_schedule', schedule_name: schedule_name))
@@ -75,6 +76,7 @@ module Lita
75
76
  response.reply(t('on_call_lookup.no_one_on_call', schedule_name: schedule_name))
76
77
  end
77
78
  end
79
+ # rubocop:enable Metrics/AbcSize
78
80
 
79
81
  def identify(response)
80
82
  email = response.match_data['email']
@@ -5,7 +5,8 @@ module PagerdutyHelper
5
5
  def format_incident(incident)
6
6
  t('incident.info', id: incident.id,
7
7
  subject: incident.trigger_summary_data.subject,
8
- assigned: incident.assigned_to_user.email)
8
+ url: incident.html_url,
9
+ assigned: incident.assigned_to_user.nil? ? 'none' : incident.assigned_to_user.email)
9
10
  end
10
11
 
11
12
  def resolve_incident(incident_id)
@@ -45,6 +46,7 @@ module PagerdutyHelper
45
46
  client.get_incident(id: incident_id)
46
47
  end
47
48
 
49
+ # rubocop:disable Metrics/AbcSize
48
50
  def acknowledge_incident(incident_id)
49
51
  incident = fetch_incident(incident_id)
50
52
  return t('incident.not_found', id: incident_id) if incident == 'No results'
@@ -57,5 +59,6 @@ module PagerdutyHelper
57
59
  t('incident.unable_to_acknowledge', id: incident_id)
58
60
  end
59
61
  end
62
+ # rubocop:enable Metrics/AbcSize
60
63
  end
61
64
  end
@@ -2,7 +2,7 @@
2
2
  module PagerdutyHelper
3
3
  # Utility functions
4
4
  module Regex
5
- INCIDENT_ID_PATTERN = /(?<incident_id>[a-zA-Z0-9+]{1,6})/
5
+ INCIDENT_ID_PATTERN = /(?<incident_id>[a-zA-Z0-9+]+)/
6
6
  EMAIL_PATTERN = /(?<email>[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+)/i
7
7
  end
8
8
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'lita-pagerduty'
3
- spec.version = '0.1.0'
3
+ spec.version = '0.1.2'
4
4
  spec.authors = ['Eric Sigler']
5
5
  spec.email = ['eric@pagerduty.com']
6
6
  spec.description = 'A Lita handler to interact with PagerDuty'
data/locales/en.yml CHANGED
@@ -66,7 +66,7 @@ en:
66
66
  resolved: "%{id}: Incident resolved"
67
67
  unable_to_acknowledge: "%{id}: Unable to acknowledge incident"
68
68
  unable_to_resolve: "%{id}: Unable to resolve incident"
69
- info: "%{id}: \"%{subject}\", assigned to: %{assigned}"
69
+ info: "%{id}: \"%{subject}\", assigned to: %{assigned}, url: %{url}"
70
70
  forget:
71
71
  complete: Your email has now been forgotten.
72
72
  unknown: No email on record for you.
@@ -76,7 +76,7 @@ en:
76
76
  note:
77
77
  show: "%{id}: %{content} (%{email})"
78
78
  on_call_list:
79
- response: "Available schedules: %{schedules}"
79
+ response: "Available schedules:\n%{schedules}"
80
80
  no_schedules_found: "No schedules found"
81
81
  on_call_lookup:
82
82
  response: "%{name} (%{email}) is currently on call for %{schedule_name}"
@@ -15,7 +15,7 @@ describe Lita::Handlers::PagerdutyIncident, lita_handler: true do
15
15
  expect(Pagerduty).to receive(:new) { incidents }
16
16
  send_command('pager incidents all')
17
17
  expect(replies.last).to eq('ABC789: "Still broke", assigned to: '\
18
- 'bar@example.com')
18
+ 'bar@example.com, url: https://acme.pagerduty.com/incidents/ABC789')
19
19
  end
20
20
  end
21
21
 
@@ -37,7 +37,7 @@ describe Lita::Handlers::PagerdutyIncident, lita_handler: true do
37
37
  send_command('pager identify bar@example.com', as: bar)
38
38
  send_command('pager incidents mine', as: bar)
39
39
  expect(replies.last).to eq('ABC789: "Still broke", assigned to: ' \
40
- 'bar@example.com')
40
+ 'bar@example.com, url: https://acme.pagerduty.com/incidents/ABC789')
41
41
  end
42
42
  end
43
43
 
@@ -67,7 +67,8 @@ describe Lita::Handlers::PagerdutyIncident, lita_handler: true do
67
67
  expect(Pagerduty).to receive(:new) { new_incident }
68
68
  send_command('pager incident ABC123')
69
69
  expect(replies.last).to eq('ABC123: "something broke", ' \
70
- 'assigned to: foo@example.com')
70
+ 'assigned to: foo@example.com, ' \
71
+ 'url: https://acme.pagerduty.com/incidents/ABC123')
71
72
  end
72
73
  end
73
74
 
@@ -78,5 +79,25 @@ describe Lita::Handlers::PagerdutyIncident, lita_handler: true do
78
79
  expect(replies.last).to eq('ABC123: Incident not found')
79
80
  end
80
81
  end
82
+
83
+ describe 'when the incident id is longer than 6 characters' do
84
+ it 'shows the incident details' do
85
+ expect(Pagerduty).to receive(:new) { incident_with_long_id }
86
+ send_command('pager incident ABC123456789')
87
+ expect(replies.last).to eq('ABC123456789: "something broke", ' \
88
+ 'assigned to: foo@example.com, ' \
89
+ 'url: https://acme.pagerduty.com/incidents/ABC123456789')
90
+ end
91
+ end
92
+
93
+ describe 'when the incident is not assigned to anyone' do
94
+ it 'shows incident details with none user' do
95
+ expect(Pagerduty).to receive(:new) { incident_without_assigned_user }
96
+ send_command('pager incident ABC456')
97
+ expect(replies.last).to eq('ABC456: "something broke", ' \
98
+ 'assigned to: none, ' \
99
+ 'url: https://acme.pagerduty.com/incidents/ABC456')
100
+ end
101
+ end
81
102
  end
82
103
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'simplecov'
2
2
  require 'coveralls'
3
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
3
+ SimpleCov.formatters = [
4
4
  SimpleCov::Formatter::HTMLFormatter,
5
5
  Coveralls::SimpleCov::Formatter
6
6
  ]
@@ -19,6 +19,21 @@ RSpec.configure do |config|
19
19
  registry.register_handler(Lita::Handlers::PagerdutyResolve)
20
20
  registry.register_handler(Lita::Handlers::PagerdutyUtility)
21
21
  end
22
+
23
+ config.expect_with :rspec do |expectations|
24
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
25
+ end
26
+
27
+ config.mock_with :rspec do |mocks|
28
+ mocks.verify_partial_doubles = true
29
+ end
30
+
31
+ config.filter_run :focus
32
+ config.run_all_when_everything_filtered = true
33
+ config.default_formatter = 'doc' if config.files_to_run.one?
34
+ config.order = :random
35
+
36
+ Kernel.srand config.seed
22
37
  end
23
38
 
24
39
  RSpec.shared_context 'basic fixtures' do
@@ -46,12 +61,14 @@ RSpec.shared_context 'basic fixtures' do
46
61
  double(
47
62
  id: 'ABC123',
48
63
  status: 'resolved',
64
+ html_url: 'https://acme.pagerduty.com/incidents/ABC123',
49
65
  trigger_summary_data: double(subject: 'something broke'),
50
66
  assigned_to_user: double(email: 'foo@example.com')
51
67
  ),
52
68
  double(
53
69
  id: 'ABC789',
54
70
  status: 'triggered',
71
+ html_url: 'https://acme.pagerduty.com/incidents/ABC789',
55
72
  trigger_summary_data: double(subject: 'Still broke'),
56
73
  assigned_to_user: double(email: 'bar@example.com')
57
74
  )
@@ -61,6 +78,7 @@ RSpec.shared_context 'basic fixtures' do
61
78
  allow(client).to receive(:get_incident) do
62
79
  double(
63
80
  status: 'triggered',
81
+ html_url: 'https://acme.pagerduty.com/incidents/ABC789',
64
82
  trigger_summary_data: double(subject: 'Still broke'),
65
83
  assigned_to_user: double(email: 'bar@example.com'),
66
84
  acknowledge: { 'id' => 'ABC789', 'status' => 'acknowledged' },
@@ -77,6 +95,7 @@ RSpec.shared_context 'basic fixtures' do
77
95
  double(
78
96
  id: 'ABC123',
79
97
  status: 'triggered',
98
+ html_url: 'https://acme.pagerduty.com/incidents/ABC123',
80
99
  trigger_summary_data: double(subject: 'something broke'),
81
100
  assigned_to_user: double(email: 'foo@example.com'),
82
101
  acknowledge: { 'id' => 'ABC123', 'status' => 'acknowledged' },
@@ -87,11 +106,26 @@ RSpec.shared_context 'basic fixtures' do
87
106
  client
88
107
  end
89
108
 
109
+ let(:incident_without_assigned_user) do
110
+ client = double
111
+ expect(client).to receive(:get_incident) do
112
+ double(
113
+ id: 'ABC456',
114
+ status: 'triggered',
115
+ html_url: 'https://acme.pagerduty.com/incidents/ABC456',
116
+ trigger_summary_data: double(subject: 'something broke'),
117
+ assigned_to_user: nil
118
+ )
119
+ end
120
+ client
121
+ end
122
+
90
123
  let(:acknowledged_incident) do
91
124
  client = double
92
125
  expect(client).to receive(:get_incident) do
93
126
  double(
94
127
  status: 'acknowledged',
128
+ html_url: 'https://acme.pagerduty.com/incidents/ABC123',
95
129
  trigger_summary_data: double(subject: 'something broke'),
96
130
  assigned_to_user: double(email: 'foo@example.com'),
97
131
  acknowledge: { 'error' =>
@@ -109,6 +143,7 @@ RSpec.shared_context 'basic fixtures' do
109
143
  expect(client).to receive(:get_incident) do
110
144
  double(
111
145
  status: 'resolved',
146
+ html_url: 'https://acme.pagerduty.com/incidents/ABC123',
112
147
  trigger_summary_data: double(subject: 'something broke'),
113
148
  assigned_to_user: double(email: 'foo@example.com'),
114
149
  notes: double(notes: [])
@@ -122,6 +157,7 @@ RSpec.shared_context 'basic fixtures' do
122
157
  expect(client).to receive(:get_incident) do
123
158
  double(
124
159
  status: 'notresolved',
160
+ html_url: 'https://acme.pagerduty.com/incidents/ABC123',
125
161
  resolve: { 'id' => 'ABC123', 'status' => 'notresolved' }
126
162
  )
127
163
  end
@@ -133,6 +169,7 @@ RSpec.shared_context 'basic fixtures' do
133
169
  expect(client).to receive(:get_incident) do
134
170
  double(
135
171
  status: 'notacked',
172
+ html_url: 'https://acme.pagerduty.com/incidents/ABC123',
136
173
  acknowledge: { 'error' => {} },
137
174
  resolve: { 'id' => 'ABC123', 'status' => 'notacked' }
138
175
  )
@@ -146,6 +183,7 @@ RSpec.shared_context 'basic fixtures' do
146
183
  double(
147
184
  id: 'ABC123',
148
185
  status: 'resolved',
186
+ html_url: 'https://acme.pagerduty.com/incidents/ABC123',
149
187
  trigger_summary_data: double(subject: 'something broke'),
150
188
  assigned_to_user: double(email: 'foo@example.com'),
151
189
  notes: double(
@@ -156,4 +194,18 @@ RSpec.shared_context 'basic fixtures' do
156
194
  end
157
195
  client
158
196
  end
197
+
198
+ let(:incident_with_long_id) do
199
+ client = double
200
+ expect(client).to receive(:get_incident) do
201
+ double(
202
+ id: 'ABC123456789',
203
+ status: 'triggered',
204
+ html_url: 'https://acme.pagerduty.com/incidents/ABC123456789',
205
+ trigger_summary_data: double(subject: 'something broke'),
206
+ assigned_to_user: double(email: 'foo@example.com')
207
+ )
208
+ end
209
+ client
210
+ end
159
211
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-pagerduty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Sigler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-19 00:00:00.000000000 Z
11
+ date: 2016-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
@@ -130,6 +130,7 @@ extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
132
  - ".gitignore"
133
+ - ".rspec"
133
134
  - ".rubocop.yml"
134
135
  - ".travis.yml"
135
136
  - CONTRIBUTING.md
@@ -175,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
176
  version: '0'
176
177
  requirements: []
177
178
  rubyforge_project:
178
- rubygems_version: 2.2.3
179
+ rubygems_version: 2.4.5
179
180
  signing_key:
180
181
  specification_version: 4
181
182
  summary: A Lita handler to interact with PagerDuty