lita-ticket_notifier 0.0.12 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 349da069fc81d0f3fe0d93bb9938221995f18c53
4
- data.tar.gz: 61e7c65c42263d2617cd0847d6f7cf7ab0f61925
3
+ metadata.gz: 1ef0097fd60259595d434f46c56fc3a82897175e
4
+ data.tar.gz: 24dcad7c5cf32e2a461619f40c31b6d8ceb3d109
5
5
  SHA512:
6
- metadata.gz: 95af0df2b27b5eeb7ca6d324040e27d2de28623b61b91e54f34f7bd67c4d7b8e4c745cd1f4923a01b5f40af0d7f6a59972c9f075d32f3e562b35fb6df58861cc
7
- data.tar.gz: 510c96b8528ee41139202b7d3a989f0f3302a2762445b6d4e5cfd421f59655f6449826f6e4321cd45a1397b651dba4ef0276ae1119e7c24640c8510aedfa534e
6
+ metadata.gz: 8f94660522b3ed69e3e30014cd1a1c6b413c749f20253b91332a5b9c0a208517ae42f8e54b970c594034ff8fe4ff934fcda1fa8a68a6ca852bdc98a6db75c1a1
7
+ data.tar.gz: 05015b761b5f134d8e577aea6cffa1c3790e8e192496b44b1595a2c8c9032baa0799a33222576dccbe18d054e9dd7b80f037074987011f4194e5b0283d79bef3
@@ -1,17 +1,93 @@
1
1
  module Lita
2
2
  module Handlers
3
3
  class TicketNotifier < Handler
4
+ attr_accessor :ticket_json, :ticket_object
4
5
  http.post "/ticket_notification", :ticket_notification
5
6
 
7
+ route(/ticket notify start/i, :add_ticket_notification, command: true,
8
+ help: { "ticket notify start" => "Lita will notify you of Lighthouse tickets." }
9
+ )
10
+
11
+ route(/ticket notify stop/i, :remove_ticket_notification, command: true,
12
+ help: { "ticket notify stop" => "Lita will stop notifying you of Lighthouse tickets." }
13
+ )
14
+
6
15
  def ticket_notification(request, response)
7
- robot.send_message(target, request.body.read)
16
+ self.ticket_json ||= JSON.parse(request.body.read)
17
+ user_names.each do |user_name|
18
+ send_message_to_user(user_name, ticket_message)
19
+ end
20
+ end
21
+
22
+ def add_ticket_notification(response)
23
+ redis.lpush("ticket_users", response.user.name)
24
+ response.reply_privately "You will now get notified of ticket updates."
25
+ end
26
+
27
+ def remove_ticket_notification(response)
28
+ redis.lrem("ticket_users", 0, response.user.name)
29
+ response.reply_privately "You will no longer receive ticket update notifications."
30
+ end
31
+
32
+ private
33
+
34
+ def send_message_to_user(user_name, messaage)
35
+ robot.send_message(source_from_name(user_name), message)
8
36
  end
9
37
 
10
- def target
11
- Lita::Source.new({ room: Lita.config.adapter.rooms[0] })
38
+ def source_from_name(name)
39
+ Lita::Source.new({ user: Lita::User.find_by_name(name) })
40
+ end
41
+
42
+ def user_names
43
+ redis.lrange("ticket_users", 0, -1)
44
+ end
45
+
46
+ def ticket
47
+ self.ticket_object ||= OpenStruct.new(hash_attributes)
48
+ end
49
+
50
+ def hash_attributes
51
+ # listing this all out to document the attributes
52
+ h = ticket_json['version']
53
+ hash_attributes = {
54
+ assigned_user_id: h['assigned_user_id'],
55
+ assigned_user_name: h['assigned_user_name'],
56
+ attachments_count: h['attachments_count'],
57
+ body: h['body'],
58
+ body_html: h['body_html'],
59
+ closed: h['closed'],
60
+ created_at: h['created_at'],
61
+ creator_id: h['creator_id'],
62
+ creator_name: h['creator_name'],
63
+ diffable_attributes_hash: h['diffable_attributes'],
64
+ importance: h['importance'],
65
+ importance_name: h['importance_name'],
66
+ milestone_id: h['milestone_id'],
67
+ milestone_order: h['milestone_order'],
68
+ number: h['number'],
69
+ permalink: h['permalink'],
70
+ priority: h['priority'],
71
+ project_id: h['project_id'],
72
+ spam: h['spam'],
73
+ state: h['state'],
74
+ tag: h['tag'],
75
+ title: h['title'],
76
+ updated_at: h['updated_at'],
77
+ url: h['url'],
78
+ user_id: h['user_id'],
79
+ user_name: h['user_name'],
80
+ version: h['version'],
81
+ watchers_ids: h['watchers_ids']
82
+ }
83
+ end
84
+
85
+ def ticket_message
86
+ "Ticket: #{ticket.title}\nState:#{ticket.state}\nImportance:#{ticket.importance_name}\nTags:#{ticket.tag}\n#{ticket.url}"
12
87
  end
13
88
  end
14
89
 
15
90
  Lita.register_handler(TicketNotifier)
16
91
  end
17
92
  end
93
+
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-ticket_notifier"
3
- spec.version = "0.0.12"
3
+ spec.version = "0.0.14"
4
4
  spec.authors = ["Michael van den Beuken", "Ruben Estevez", "Jordan Babe", "Mathieu Gilbert", "Ryan Jones", "Darko Dosenovic"]
5
5
  spec.email = ["michael.beuken@gmail.com", "ruben.a.estevez@gmail.com", "jorbabe@gmail.com", "mathieu.gilbert@ama.ab.ca", "ryan.michael.jones@gmail.com", "darko.dosenovic@ama.ab.ca"]
6
6
  spec.description = %q{Notify users about new tickets coming in.}
@@ -0,0 +1,36 @@
1
+ {
2
+ "version": {
3
+ "assigned_user_id": null,
4
+ "attachments_count": 0,
5
+ "body": "",
6
+ "body_html": "",
7
+ "closed": true,
8
+ "created_at": "2014-08-06T22:55:30Z",
9
+ "creator_id": 240273,
10
+ "creator_name": "Mathieu Gilbert",
11
+ "diffable_attributes": {
12
+ "state": "resolved"
13
+ },
14
+ "importance": 3,
15
+ "importance_name": "Low",
16
+ "milestone_id": null,
17
+ "milestone_order": 9999,
18
+ "number": 4146,
19
+ "permalink": "test-ticket",
20
+ "priority": 3,
21
+ "project_id": 66073,
22
+ "spam": false,
23
+ "state": "review",
24
+ "tag": "dev",
25
+ "title": "test ticket",
26
+ "updated_at": "2014-08-06T22:55:32Z",
27
+ "url": "http://waffles.lighthouseapp.com/projects/1/tickets/200",
28
+ "user_id": 240273,
29
+ "user_name": "Mathieu Gilbert",
30
+ "version": 3,
31
+ "watchers_ids": [
32
+ 240273,
33
+ 216682
34
+ ]
35
+ }
36
+ }
@@ -1,5 +1,32 @@
1
1
  require "spec_helper"
2
+ require "json"
2
3
 
3
4
  describe Lita::Handlers::TicketNotifier, lita_handler: true do
5
+ let(:payload) { File.read(File.join('spec', 'fixtures', 'ticket.json')) }
6
+ let(:request) { OpenStruct.new({ body: OpenStruct.new({ read: payload }) }) }
7
+ let(:teddy) { Lita::User.create(123, name: "Teddy Ruxbin") }
8
+ let(:batman) { Lita::User.create(567, name: "The Batman") }
9
+ let(:ticket_messsage) { "Ticket: test ticket\nState:review\nImportance:Low\nTags:dev\nhttp://waffles.lighthouseapp.com/projects/1/tickets/200" }
4
10
 
11
+ it { routes_command("ticket notify start").to(:add_ticket_notification) }
12
+ it { routes_command("ticket notify stop").to(:remove_ticket_notification) }
13
+ it { routes_http(:post, "/ticket_notification").to(:ticket_notification) }
14
+
15
+ it "notifies correct users about tickets" do
16
+ expect(subject).to receive(:send_message_to_user).with(user.name, ticket_messsage)
17
+ expect(subject).to receive(:send_message_to_user).with(teddy.name, ticket_messsage)
18
+ expect(subject).to_not receive(:send_message_to_user).with(batman.name, ticket_messsage)
19
+
20
+ send_command("ticket notify start")
21
+ send_command("ticket notify start", as: teddy)
22
+ send_command("ticket notify start", as: batman)
23
+ send_command("ticket notify stop", as: batman)
24
+
25
+ subject.ticket_notification(request, nil)
26
+ end
27
+
28
+ it "doesn't send notifications to nobody" do
29
+ expect(subject).to_not receive(:send_message_to_user)
30
+ subject.ticket_notification(request, nil)
31
+ end
5
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-ticket_notifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael van den Beuken
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2014-08-06 00:00:00.000000000 Z
16
+ date: 2014-08-12 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: lita
@@ -106,6 +106,7 @@ files:
106
106
  - lib/lita/handlers/ticket_notifier.rb
107
107
  - lita-ticket_notifier.gemspec
108
108
  - locales/en.yml
109
+ - spec/fixtures/ticket.json
109
110
  - spec/lita/handlers/ticket_notifier_spec.rb
110
111
  - spec/spec_helper.rb
111
112
  homepage: https://github.com/amaabca/lita-ticket_notifier
@@ -134,5 +135,6 @@ signing_key:
134
135
  specification_version: 4
135
136
  summary: Users can opt-in/out from Lighthouse new ticket notifications.
136
137
  test_files:
138
+ - spec/fixtures/ticket.json
137
139
  - spec/lita/handlers/ticket_notifier_spec.rb
138
140
  - spec/spec_helper.rb