lita-ticket_notifier 0.0.12 → 0.0.14

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: 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