lita-slack 1.1.0 → 1.1.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c31d5c7f496a749e2903cabfb691bd7056e50a07
|
4
|
+
data.tar.gz: 5fa2a8da529285c189f7b2aa1c789d9252d05f36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f5c045ba0e230b6a869692221d67836af7dc92c568d31802bbf9d1e2b0351d9678f64f48762526cbac01a4bbb2e0a0f41b80db76f9fa3b550e446de05c83102
|
7
|
+
data.tar.gz: bce6039b1f1dc91d4e4930386b7e38e88cb964f346af89c7fe6ed5b2fa5ba717990a29fd9e0333f043b7d237b8acc613622535ea32a14df19ed4f27248d5f8f8
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'eventmachine'
|
2
|
+
|
3
|
+
module Lita
|
4
|
+
module Adapters
|
5
|
+
class Slack < Adapter
|
6
|
+
class EventLoop
|
7
|
+
class << self
|
8
|
+
def defer
|
9
|
+
EM.defer { yield }
|
10
|
+
end
|
11
|
+
|
12
|
+
def run
|
13
|
+
EM.run { yield }
|
14
|
+
end
|
15
|
+
|
16
|
+
def safe_stop
|
17
|
+
EM.stop if EM.reactor_running?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require 'eventmachine'
|
2
1
|
require 'faye/websocket'
|
3
2
|
require 'multi_json'
|
4
3
|
|
5
4
|
require 'lita/adapters/slack/api'
|
5
|
+
require 'lita/adapters/slack/event_loop'
|
6
6
|
require 'lita/adapters/slack/im_mapping'
|
7
7
|
require 'lita/adapters/slack/message_handler'
|
8
8
|
require 'lita/adapters/slack/user_creator'
|
@@ -34,7 +34,7 @@ module Lita
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def run(queue = nil, options = {})
|
37
|
-
|
37
|
+
EventLoop.run do
|
38
38
|
log.debug("Connecting to the Slack Real Time Messaging API.")
|
39
39
|
@websocket = Faye::WebSocket::Client.new(
|
40
40
|
websocket_url,
|
@@ -56,7 +56,7 @@ module Lita
|
|
56
56
|
|
57
57
|
def send_messages(channel, strings)
|
58
58
|
strings.each do |string|
|
59
|
-
websocket.send(safe_payload_for(channel, string))
|
59
|
+
EventLoop.defer { websocket.send(safe_payload_for(channel, string)) }
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
@@ -66,7 +66,7 @@ module Lita
|
|
66
66
|
websocket.close
|
67
67
|
end
|
68
68
|
|
69
|
-
|
69
|
+
EventLoop.safe_stop
|
70
70
|
end
|
71
71
|
|
72
72
|
private
|
@@ -94,7 +94,7 @@ module Lita
|
|
94
94
|
def receive_message(event)
|
95
95
|
data = MultiJson.load(event.data)
|
96
96
|
|
97
|
-
MessageHandler.new(robot, robot_id, data).handle
|
97
|
+
EventLoop.defer { MessageHandler.new(robot, robot_id, data).handle }
|
98
98
|
end
|
99
99
|
|
100
100
|
def safe_payload_for(channel, string)
|
data/lita-slack.gemspec
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Lita::Adapters::Slack::EventLoop, lita: true do
|
4
|
+
describe '.defer' do
|
5
|
+
it 'defers the provided block with Eventmachine' do
|
6
|
+
allow(EM).to receive(:defer).and_yield
|
7
|
+
ran = false
|
8
|
+
|
9
|
+
described_class.defer { ran = true }
|
10
|
+
|
11
|
+
expect(ran).to be_truthy
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '.run' do
|
16
|
+
it 'runs the provided block in Eventmachine' do
|
17
|
+
allow(EM).to receive(:run).and_yield
|
18
|
+
ran = false
|
19
|
+
|
20
|
+
described_class.run { ran = true }
|
21
|
+
|
22
|
+
expect(ran).to be_truthy
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '.safe_stop' do
|
27
|
+
it 'stops Eventmachine when the reactor is running' do
|
28
|
+
described_class.run do
|
29
|
+
expect(EM.reactor_running?).to be_truthy
|
30
|
+
|
31
|
+
described_class.safe_stop
|
32
|
+
end
|
33
|
+
|
34
|
+
expect(EM.reactor_running?).to be_falsy
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'does nothing when the reactor is not running' do
|
38
|
+
expect(EM).not_to receive(:stop)
|
39
|
+
|
40
|
+
described_class.safe_stop
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -67,11 +67,8 @@ describe Lita::Adapters::Slack::RTMConnection, lita: true do
|
|
67
67
|
end
|
68
68
|
|
69
69
|
describe "#run" do
|
70
|
-
|
71
|
-
|
72
|
-
expect(EM.reactor_running?).to be_truthy
|
73
|
-
end
|
74
|
-
end
|
70
|
+
let(:event) { double('Event', data: '{}') }
|
71
|
+
let(:message_handler) { instance_double('Lita::Adapters::Slack::MessageHandler') }
|
75
72
|
|
76
73
|
it "creates the WebSocket" do
|
77
74
|
with_websocket(subject, queue) do |websocket|
|
@@ -91,14 +88,20 @@ describe Lita::Adapters::Slack::RTMConnection, lita: true do
|
|
91
88
|
end
|
92
89
|
end
|
93
90
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
91
|
+
it "dispatches incoming data to MessageHandler" do
|
92
|
+
allow(Lita::Adapters::Slack::EventLoop).to receive(:defer).and_yield
|
93
|
+
allow(Lita::Adapters::Slack::MessageHandler).to receive(:new).with(
|
94
|
+
robot,
|
95
|
+
'U12345678',
|
96
|
+
{}
|
97
|
+
).and_return(message_handler)
|
98
98
|
|
99
|
-
|
100
|
-
|
101
|
-
|
99
|
+
expect(message_handler).to receive(:handle)
|
100
|
+
|
101
|
+
# Testing private methods directly is bad, but it's difficult to get
|
102
|
+
# the timing right when testing it by emitting the "message" event on
|
103
|
+
# the WebSocket.
|
104
|
+
subject.send(:receive_message, event)
|
102
105
|
end
|
103
106
|
end
|
104
107
|
|
@@ -112,6 +115,7 @@ describe Lita::Adapters::Slack::RTMConnection, lita: true do
|
|
112
115
|
allow(Faye::WebSocket::Client).to receive(:new).and_return(websocket)
|
113
116
|
allow(websocket).to receive(:on)
|
114
117
|
allow(websocket).to receive(:close)
|
118
|
+
allow(Lita::Adapters::Slack::EventLoop).to receive(:defer).and_yield
|
115
119
|
end
|
116
120
|
|
117
121
|
it "writes messages to the WebSocket" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lita-slack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ken J.
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-03-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|
@@ -182,6 +182,7 @@ files:
|
|
182
182
|
- lib/lita-slack.rb
|
183
183
|
- lib/lita/adapters/slack.rb
|
184
184
|
- lib/lita/adapters/slack/api.rb
|
185
|
+
- lib/lita/adapters/slack/event_loop.rb
|
185
186
|
- lib/lita/adapters/slack/im_mapping.rb
|
186
187
|
- lib/lita/adapters/slack/message_handler.rb
|
187
188
|
- lib/lita/adapters/slack/rtm_connection.rb
|
@@ -192,6 +193,7 @@ files:
|
|
192
193
|
- lita-slack.gemspec
|
193
194
|
- locales/en.yml
|
194
195
|
- spec/lita/adapters/slack/api_spec.rb
|
196
|
+
- spec/lita/adapters/slack/event_loop_spec.rb
|
195
197
|
- spec/lita/adapters/slack/im_mapping_spec.rb
|
196
198
|
- spec/lita/adapters/slack/message_handler_spec.rb
|
197
199
|
- spec/lita/adapters/slack/rtm_connection_spec.rb
|
@@ -227,6 +229,7 @@ specification_version: 4
|
|
227
229
|
summary: Lita adapter for Slack.
|
228
230
|
test_files:
|
229
231
|
- spec/lita/adapters/slack/api_spec.rb
|
232
|
+
- spec/lita/adapters/slack/event_loop_spec.rb
|
230
233
|
- spec/lita/adapters/slack/im_mapping_spec.rb
|
231
234
|
- spec/lita/adapters/slack/message_handler_spec.rb
|
232
235
|
- spec/lita/adapters/slack/rtm_connection_spec.rb
|