lita-flowdock 0.2.2 → 0.2.3
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 +4 -4
- data/.travis.yml +0 -4
- data/lib/lita/adapters/flowdock/connector.rb +23 -8
- data/lib/lita/adapters/flowdock/message_handler.rb +16 -13
- data/lib/lita/adapters/flowdock.rb +25 -6
- data/lib/lita/message/flowdock_message.rb +10 -0
- data/lib/lita/source/flowdock_source.rb +1 -0
- data/lita-flowdock.gemspec +4 -2
- data/spec/lita/adapters/flowdock/connector_spec.rb +17 -3
- data/spec/lita/adapters/flowdock/message_handler_spec.rb +71 -23
- data/spec/lita/adapters/flowdock_spec.rb +16 -3
- data/spec/lita/message/flowdock_message_spec.rb +129 -0
- data/spec/lita/source/flowdock_source_spec.rb +42 -0
- data/spec/spec_helper.rb +4 -0
- metadata +38 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e7c5b59bef6c79b46baabff5bb13104fd702d9a
|
4
|
+
data.tar.gz: 09e2d9d829cdcfc726c759b499b88c850ffc4904
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a5f12b386be541e133c554c5fb70cb894bebe50997b262d3622b5811ff35acd9b384f8f3389821198b806ca9cc91f2ff3c0a2c76fce2660053569d7eca34726e
|
7
|
+
data.tar.gz: bc3da50050ee8c6d0b4d168874ca0df07aa6c5f120a870cfe9366cc75450082fa3aee95f19d59f694de44b9ad59c40683f8ebcb80d53f6d77510508c08274a01
|
data/.travis.yml
CHANGED
@@ -9,24 +9,26 @@ module Lita
|
|
9
9
|
class Flowdock < Adapter
|
10
10
|
class Connector
|
11
11
|
|
12
|
-
def initialize(robot, api_token, organization, flows, flowdock_client=nil)
|
12
|
+
def initialize(robot, api_token, organization, flows, flowdock_client=nil, query_params=Hash.new)
|
13
13
|
@robot = robot
|
14
14
|
@api_token = api_token
|
15
15
|
@organization = organization
|
16
16
|
@flows = flows
|
17
17
|
@client =
|
18
18
|
flowdock_client || ::Flowdock::Client.new(api_token: api_token)
|
19
|
+
@query_params = query_params
|
19
20
|
@stream_url =
|
20
21
|
"https://#{api_token}@stream.flowdock.com/flows?filter=#{request_flows}"
|
21
22
|
|
22
23
|
UsersCreator.create_users(client.get('/users'))
|
24
|
+
store_flows
|
23
25
|
end
|
24
26
|
|
25
27
|
def run(url=stream_url, queue=nil)
|
26
28
|
EM.run do
|
27
29
|
@source = EventMachine::EventSource.new(
|
28
30
|
url,
|
29
|
-
|
31
|
+
@query_params,
|
30
32
|
{'Accept' => 'text/event-stream'}
|
31
33
|
)
|
32
34
|
|
@@ -51,13 +53,20 @@ module Lita
|
|
51
53
|
end
|
52
54
|
end
|
53
55
|
|
54
|
-
def send_messages(target, messages,
|
56
|
+
def send_messages(target, messages, thread)
|
57
|
+
params = {
|
58
|
+
flow: target.room
|
59
|
+
}
|
60
|
+
params.merge!(message_id: target.message_id) if thread
|
55
61
|
messages.each do |message|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
62
|
+
params.merge!(content: message)
|
63
|
+
if target.private_message
|
64
|
+
params.merge!(user_id: target.user.id)
|
65
|
+
client.private_message(params)
|
66
|
+
else
|
67
|
+
puts params.inspect
|
68
|
+
client.chat_message(params)
|
69
|
+
end
|
61
70
|
end
|
62
71
|
end
|
63
72
|
|
@@ -86,6 +95,12 @@ module Lita
|
|
86
95
|
def robot_id
|
87
96
|
@robot_id ||= client.get('/user')['id']
|
88
97
|
end
|
98
|
+
|
99
|
+
def store_flows
|
100
|
+
client.get("/flows").each do |flow|
|
101
|
+
Lita.redis.set("flows/#{flow['parameterized_name']}", flow['id'])
|
102
|
+
end
|
103
|
+
end
|
89
104
|
end
|
90
105
|
end
|
91
106
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'lita/adapters/flowdock/users_creator'
|
2
2
|
require 'lita/source/flowdock_source'
|
3
|
+
require 'lita/message/flowdock_message'
|
3
4
|
|
4
5
|
module Lita
|
5
6
|
module Adapters
|
@@ -23,6 +24,8 @@ module Lita
|
|
23
24
|
handle_user_activity
|
24
25
|
when "action"
|
25
26
|
handle_action
|
27
|
+
when "tag-change"
|
28
|
+
handle_tag_change
|
26
29
|
else
|
27
30
|
handle_unknown
|
28
31
|
end
|
@@ -40,22 +43,18 @@ module Lita
|
|
40
43
|
data['tags']
|
41
44
|
end
|
42
45
|
|
43
|
-
def
|
44
|
-
|
45
|
-
influx_tag.split(':')[-1].to_i
|
46
|
-
end
|
47
|
-
|
48
|
-
def message_id
|
49
|
-
type == 'comment' ? parent_id : id
|
46
|
+
def thread_id
|
47
|
+
data['thread_id']
|
50
48
|
end
|
51
49
|
|
52
50
|
def dispatch_message(user)
|
53
51
|
source = FlowdockSource.new(
|
54
52
|
user: user,
|
55
53
|
room: flow,
|
56
|
-
|
54
|
+
private_message: private_message?,
|
55
|
+
message_id: private_message? ? data['id'] : data['thread']['initial_message']
|
57
56
|
)
|
58
|
-
message =
|
57
|
+
message = FlowdockMessage.new(robot, body, source, tags, thread_id)
|
59
58
|
robot.receive(message)
|
60
59
|
end
|
61
60
|
|
@@ -63,10 +62,6 @@ module Lita
|
|
63
62
|
data['flow']
|
64
63
|
end
|
65
64
|
|
66
|
-
def id
|
67
|
-
data['id']
|
68
|
-
end
|
69
|
-
|
70
65
|
def from_self?(user)
|
71
66
|
user.id.to_i == robot_id
|
72
67
|
end
|
@@ -94,6 +89,10 @@ module Lita
|
|
94
89
|
end
|
95
90
|
end
|
96
91
|
|
92
|
+
def handle_tag_change
|
93
|
+
robot.trigger(:tag_change, added: data['content']['add'], removed: data['content']['remove'], message: data['content']['message'])
|
94
|
+
end
|
95
|
+
|
97
96
|
def handle_unknown
|
98
97
|
log.debug("Unknown message type: #{data.inspect}")
|
99
98
|
end
|
@@ -102,6 +101,10 @@ module Lita
|
|
102
101
|
user = flowdock_client.get("/user/#{id}")
|
103
102
|
UsersCreator.create_user(user)
|
104
103
|
end
|
104
|
+
|
105
|
+
def private_message?
|
106
|
+
data.has_key?('to')
|
107
|
+
end
|
105
108
|
end
|
106
109
|
end
|
107
110
|
end
|
@@ -10,6 +10,8 @@ module Lita
|
|
10
10
|
config :organization, type: String, required: true
|
11
11
|
config :flows, type: Array, required: true
|
12
12
|
config :thread_responses, type: Symbol, required: false, default: :enabled
|
13
|
+
config :private_messages, type: Symbol, required: false, default: :enabled
|
14
|
+
config :active_user, type: Symbol, required: false, default: :enabled
|
13
15
|
|
14
16
|
|
15
17
|
def mention_format(name)
|
@@ -22,7 +24,9 @@ module Lita
|
|
22
24
|
robot,
|
23
25
|
config.api_token,
|
24
26
|
config.organization,
|
25
|
-
config.flows
|
27
|
+
config.flows,
|
28
|
+
nil,
|
29
|
+
query_params
|
26
30
|
)
|
27
31
|
|
28
32
|
connector.run
|
@@ -34,15 +38,30 @@ module Lita
|
|
34
38
|
end
|
35
39
|
|
36
40
|
def send_messages(target, messages)
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
41
|
+
connector.send_messages(
|
42
|
+
target,
|
43
|
+
messages,
|
44
|
+
config.thread_responses.eql?(:enabled)
|
45
|
+
)
|
42
46
|
end
|
43
47
|
|
44
48
|
private
|
45
49
|
attr_reader :connector
|
50
|
+
|
51
|
+
def query_params
|
52
|
+
{
|
53
|
+
user: respond_to_private_messages?,
|
54
|
+
active: show_user_as_active?
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
def respond_to_private_messages?
|
59
|
+
[:enabled, :help].include?(config.private_messages) ? 1 : 0
|
60
|
+
end
|
61
|
+
|
62
|
+
def show_user_as_active?
|
63
|
+
config.active_user.eql?(:enabled) ? 'true' : 'idle'
|
64
|
+
end
|
46
65
|
end
|
47
66
|
|
48
67
|
Lita.register_adapter(:flowdock, Flowdock)
|
@@ -3,6 +3,7 @@ module Lita
|
|
3
3
|
attr_reader :message_id
|
4
4
|
|
5
5
|
def initialize(user: nil, room: nil, private_message: false, message_id: nil)
|
6
|
+
room = Lita.redis.get("flows/#{room}") || room unless room.nil?
|
6
7
|
super(user: user, room: room, private_message: private_message)
|
7
8
|
@message_id = message_id
|
8
9
|
end
|
data/lita-flowdock.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "lita-flowdock"
|
3
|
-
spec.version = "0.2.
|
3
|
+
spec.version = "0.2.3"
|
4
4
|
spec.authors = ["Ben House"]
|
5
5
|
spec.email = ["ben@benhouse.io"]
|
6
6
|
spec.description = %q{flowdock adapter for lita.io}
|
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
|
17
17
|
spec.add_runtime_dependency "lita", "~> 4.2"
|
18
18
|
spec.add_runtime_dependency "em-eventsource"
|
19
|
-
spec.add_runtime_dependency "flowdock"
|
19
|
+
spec.add_runtime_dependency "flowdock", ">= 0.6"
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
@@ -26,4 +26,6 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency "coveralls"
|
27
27
|
spec.add_development_dependency "rubocop"
|
28
28
|
spec.add_development_dependency "bump"
|
29
|
+
spec.add_development_dependency "pry"
|
30
|
+
spec.add_development_dependency "pry-byebug"
|
29
31
|
end
|
@@ -14,12 +14,14 @@ describe Lita::Adapters::Flowdock::Connector, lita: true do
|
|
14
14
|
}
|
15
15
|
|
16
16
|
let(:registry) { Lita::Registry.new }
|
17
|
+
let(:source) { instance_double('Lita::FlowdockSource', private_message?: false, message_id: message_id) }
|
17
18
|
let(:robot) { Lita::Robot.new(registry) }
|
18
19
|
let(:api_token) { 'a8f828cfe7efc65b53b3de06761e83e9' }
|
19
20
|
let(:organization) { 'lita-test' }
|
20
21
|
let(:flows) { ['testing'] }
|
21
22
|
let(:fd_client) { instance_double('Flowdock::Client') }
|
22
23
|
let(:users) { [ user_hash(1), user_hash(2) ] }
|
24
|
+
let(:flows) { [ flow_hash(1) ] }
|
23
25
|
let(:queue) { Queue.new }
|
24
26
|
let(:url) { "http://example.com" }
|
25
27
|
|
@@ -28,16 +30,25 @@ describe Lita::Adapters::Flowdock::Connector, lita: true do
|
|
28
30
|
|
29
31
|
it "creates users" do
|
30
32
|
expect(fd_client).to receive(:get).with('/users').and_return(users)
|
33
|
+
allow(fd_client).to receive(:get).with('/flows').and_return([])
|
31
34
|
expect(Lita::Adapters::Flowdock::UsersCreator).to receive(
|
32
35
|
:create_users
|
33
36
|
).with(users)
|
34
37
|
subject.new(robot, api_token, organization, flows, fd_client)
|
35
38
|
end
|
39
|
+
|
40
|
+
it "stores flows" do
|
41
|
+
allow(fd_client).to receive(:get).with('/users').and_return([])
|
42
|
+
allow(fd_client).to receive(:get).with("/flows").and_return(flows)
|
43
|
+
expect(Lita.redis).to receive(:set).with("flows/#{flows[0]['parameterized_name']}", flows[0]['id'])
|
44
|
+
subject.new(robot, api_token, organization, flows, fd_client)
|
45
|
+
end
|
36
46
|
end
|
37
47
|
|
38
48
|
describe "#run" do
|
39
49
|
before do
|
40
50
|
allow(fd_client).to receive(:get).with('/users').and_return([])
|
51
|
+
allow(fd_client).to receive(:get).with('/flows').and_return([])
|
41
52
|
end
|
42
53
|
|
43
54
|
it "starts the reactor" do
|
@@ -54,17 +65,20 @@ describe Lita::Adapters::Flowdock::Connector, lita: true do
|
|
54
65
|
end
|
55
66
|
|
56
67
|
describe "#send_messages" do
|
57
|
-
let(:target) {
|
68
|
+
let(:target) { source }
|
58
69
|
let(:message) { 'foo' }
|
59
70
|
let(:message_id) { 1234 }
|
60
71
|
|
61
72
|
before do
|
62
73
|
allow(fd_client).to receive(:get).with('/users').and_return(users)
|
74
|
+
allow(fd_client).to receive(:get).with('/flows').and_return(flows)
|
75
|
+
allow(source).to receive(:room).and_return('testing:lita-test')
|
76
|
+
allow(source).to receive(:private_message).and_return(false)
|
63
77
|
end
|
64
78
|
|
65
79
|
it "sends messages" do
|
66
|
-
expect(fd_client).to receive(:chat_message).with(flow: target,
|
67
|
-
subject.send_messages(target, [message],
|
80
|
+
expect(fd_client).to receive(:chat_message).with(flow: target.room, message_id: message_id, content: message)
|
81
|
+
subject.send_messages(target, [message], true)
|
68
82
|
end
|
69
83
|
end
|
70
84
|
end
|
@@ -28,14 +28,18 @@ describe Lita::Adapters::Flowdock::MessageHandler, lita: true do
|
|
28
28
|
let(:id) { 2345 }
|
29
29
|
let(:data) do
|
30
30
|
{
|
31
|
-
'content'
|
32
|
-
'event'
|
33
|
-
'flow'
|
34
|
-
'id'
|
35
|
-
'
|
31
|
+
'content' => 'Hello World!',
|
32
|
+
'event' => 'message',
|
33
|
+
'flow' => test_flow,
|
34
|
+
'id' => id,
|
35
|
+
'thread' => {
|
36
|
+
'initial_message' => id
|
37
|
+
},
|
38
|
+
'tags' => [],
|
39
|
+
'user' => test_user_id
|
36
40
|
}
|
37
41
|
end
|
38
|
-
let(:message) { instance_double('Lita::
|
42
|
+
let(:message) { instance_double('Lita::FlowdockMessage', command!: false) }
|
39
43
|
let(:source) { instance_double('Lita::FlowdockSource', private_message?: false, message_id: id) }
|
40
44
|
let(:user) { user_double(test_user_id) }
|
41
45
|
|
@@ -44,10 +48,11 @@ describe Lita::Adapters::Flowdock::MessageHandler, lita: true do
|
|
44
48
|
allow(Lita::FlowdockSource).to receive(:new).with(
|
45
49
|
user: user,
|
46
50
|
room: test_flow,
|
51
|
+
private_message: false,
|
47
52
|
message_id: id
|
48
53
|
).and_return(source)
|
49
|
-
allow(Lita::
|
50
|
-
robot, 'Hello World!', source).and_return(message)
|
54
|
+
allow(Lita::FlowdockMessage).to receive(:new).with(
|
55
|
+
robot, 'Hello World!', source, [], nil).and_return(message)
|
51
56
|
allow(robot).to receive(:receive).with(message)
|
52
57
|
end
|
53
58
|
|
@@ -60,18 +65,24 @@ describe Lita::Adapters::Flowdock::MessageHandler, lita: true do
|
|
60
65
|
context "when the message is nil" do
|
61
66
|
let(:data) do
|
62
67
|
{
|
63
|
-
'event'
|
64
|
-
'flow'
|
65
|
-
'user'
|
66
|
-
'
|
68
|
+
'event' => 'message',
|
69
|
+
'flow' => test_flow,
|
70
|
+
'user' => test_user_id,
|
71
|
+
'tags' => [],
|
72
|
+
'id' => id,
|
73
|
+
'thread' => {
|
74
|
+
'initial_message' => id
|
75
|
+
}
|
67
76
|
}
|
68
77
|
end
|
69
78
|
|
70
79
|
it "dispatches an empty message to Lita" do
|
71
|
-
expect(Lita::
|
80
|
+
expect(Lita::FlowdockMessage).to receive(:new).with(
|
72
81
|
robot,
|
73
82
|
"",
|
74
|
-
source
|
83
|
+
source,
|
84
|
+
[],
|
85
|
+
nil
|
75
86
|
).and_return(message)
|
76
87
|
|
77
88
|
subject.handle
|
@@ -79,12 +90,35 @@ describe Lita::Adapters::Flowdock::MessageHandler, lita: true do
|
|
79
90
|
end
|
80
91
|
end
|
81
92
|
|
93
|
+
context "a tag-change event" do
|
94
|
+
let(:data) do
|
95
|
+
{
|
96
|
+
'content' => {
|
97
|
+
'add' => ['foo'],
|
98
|
+
'remove' => ['bar'],
|
99
|
+
'message' => ['I have #foo']
|
100
|
+
},
|
101
|
+
'event' => 'tag-change',
|
102
|
+
'flow' => test_flow,
|
103
|
+
'tags' => [],
|
104
|
+
'user' => test_user_id
|
105
|
+
}
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'triggers tag-change trigger' do
|
109
|
+
expect(robot).to receive(:trigger).with(:tag_change, added: ['foo'], removed: ['bar'], message: ['I have #foo'])
|
110
|
+
|
111
|
+
subject.handle
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
82
115
|
context "a message with an unsupported type" do
|
83
116
|
let(:data) do
|
84
117
|
{
|
85
118
|
'content' => 'this type is not supported',
|
86
119
|
'event' => 'unsupported',
|
87
120
|
'flow' => test_flow,
|
121
|
+
'tags' => [],
|
88
122
|
'user' => test_user_id
|
89
123
|
}
|
90
124
|
end
|
@@ -102,6 +136,7 @@ describe Lita::Adapters::Flowdock::MessageHandler, lita: true do
|
|
102
136
|
'content' => 'reply from lita',
|
103
137
|
'event' => 'message',
|
104
138
|
'flow' => test_flow,
|
139
|
+
'tags' => [],
|
105
140
|
'user' => robot_id
|
106
141
|
}
|
107
142
|
end
|
@@ -128,6 +163,10 @@ describe Lita::Adapters::Flowdock::MessageHandler, lita: true do
|
|
128
163
|
'content' => "hi i'm new here",
|
129
164
|
'event' => 'message',
|
130
165
|
'flow' => test_flow,
|
166
|
+
'tags' => [],
|
167
|
+
'thread' => {
|
168
|
+
'initial_message' => 5678
|
169
|
+
},
|
131
170
|
'user' => new_user_id
|
132
171
|
}
|
133
172
|
end
|
@@ -160,6 +199,7 @@ describe Lita::Adapters::Flowdock::MessageHandler, lita: true do
|
|
160
199
|
'content' => { 'last_activity' => 1317715364447 },
|
161
200
|
'event' => 'activity.user',
|
162
201
|
'flow' => test_flow,
|
202
|
+
'tags' => [],
|
163
203
|
'user' => test_user_id
|
164
204
|
}
|
165
205
|
end
|
@@ -174,17 +214,21 @@ describe Lita::Adapters::Flowdock::MessageHandler, lita: true do
|
|
174
214
|
context "receives a comment message" do
|
175
215
|
let(:id) { 4321 }
|
176
216
|
let(:parent_id) { 123456 }
|
217
|
+
let(:tags) { [] }
|
177
218
|
let(:data) do
|
178
219
|
{
|
179
220
|
'content' => {
|
180
|
-
'title'
|
181
|
-
'text'
|
221
|
+
'title' => 'Thread title',
|
222
|
+
'text' => 'Lita: help'
|
182
223
|
},
|
183
|
-
'event'
|
184
|
-
'flow'
|
185
|
-
'id'
|
186
|
-
'
|
187
|
-
|
224
|
+
'event' => 'comment',
|
225
|
+
'flow' => test_flow,
|
226
|
+
'id' => id,
|
227
|
+
'thread' => {
|
228
|
+
'initial_message' => parent_id
|
229
|
+
},
|
230
|
+
'tags' => tags,
|
231
|
+
'user' => test_user_id
|
188
232
|
}
|
189
233
|
end
|
190
234
|
let(:message) { instance_double('Lita::Message', command!: true) }
|
@@ -196,10 +240,11 @@ describe Lita::Adapters::Flowdock::MessageHandler, lita: true do
|
|
196
240
|
allow(Lita::FlowdockSource).to receive(:new).with(
|
197
241
|
user: user,
|
198
242
|
room: test_flow,
|
243
|
+
private_message: false,
|
199
244
|
message_id: parent_id
|
200
245
|
).and_return(source)
|
201
|
-
allow(Lita::
|
202
|
-
robot, 'Lita: help', source).and_return(message)
|
246
|
+
allow(Lita::FlowdockMessage).to receive(:new).with(
|
247
|
+
robot, 'Lita: help', source, tags, nil).and_return(message)
|
203
248
|
allow(robot).to receive(:receive).with(message)
|
204
249
|
end
|
205
250
|
|
@@ -216,6 +261,7 @@ describe Lita::Adapters::Flowdock::MessageHandler, lita: true do
|
|
216
261
|
'content' => {'type' => 'add_people', 'description' => 'user5'},
|
217
262
|
'event' => 'action',
|
218
263
|
'flow' => test_flow,
|
264
|
+
'tags' => [],
|
219
265
|
'user' => test_user_id
|
220
266
|
}
|
221
267
|
end
|
@@ -246,6 +292,7 @@ describe Lita::Adapters::Flowdock::MessageHandler, lita: true do
|
|
246
292
|
'content' => {'type' => 'join', 'description' => 'tbd'},
|
247
293
|
'event' => 'action',
|
248
294
|
'flow' => test_flow,
|
295
|
+
'tags' => [],
|
249
296
|
'user' => joining_user_id
|
250
297
|
}
|
251
298
|
end
|
@@ -275,6 +322,7 @@ describe Lita::Adapters::Flowdock::MessageHandler, lita: true do
|
|
275
322
|
},
|
276
323
|
'event' => 'action',
|
277
324
|
'flow' => test_flow,
|
325
|
+
'tags' => [],
|
278
326
|
'user' => test_user_id
|
279
327
|
}
|
280
328
|
end
|
@@ -21,9 +21,12 @@ describe Lita::Adapters::Flowdock, lita: true do
|
|
21
21
|
robot,
|
22
22
|
api_token,
|
23
23
|
organization,
|
24
|
-
flows
|
24
|
+
flows,
|
25
|
+
nil,
|
26
|
+
{:user => 1, :active => 'true'}
|
25
27
|
).and_return(connector)
|
26
28
|
allow(connector).to receive(:run)
|
29
|
+
allow(Lita.redis).to receive(:get).with("flows/1234abcd").and_return("dcba4321")
|
27
30
|
end
|
28
31
|
|
29
32
|
it "registers with Lita" do
|
@@ -51,7 +54,7 @@ describe Lita::Adapters::Flowdock, lita: true do
|
|
51
54
|
let(:user_source) { Lita::Source.new(user: user) }
|
52
55
|
|
53
56
|
it "sends messages to flows" do
|
54
|
-
expect(connector).to receive(:send_messages).with(room_source
|
57
|
+
expect(connector).to receive(:send_messages).with(room_source, ['foo'], true)
|
55
58
|
|
56
59
|
subject.run
|
57
60
|
|
@@ -64,7 +67,17 @@ describe Lita::Adapters::Flowdock, lita: true do
|
|
64
67
|
end
|
65
68
|
|
66
69
|
it "sends messages to flow without the original message id" do
|
67
|
-
expect(connector).to receive(:send_messages).with(room_source
|
70
|
+
expect(connector).to receive(:send_messages).with(room_source, ['foo'], false)
|
71
|
+
subject.run
|
72
|
+
subject.send_messages(room_source, ['foo'])
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "from a private message source" do
|
77
|
+
let(:room_source) { Lita::FlowdockSource.new(room: '1234abcd', message_id: id, private_message: true) }
|
78
|
+
|
79
|
+
it "responds via a private message to flowdock" do
|
80
|
+
expect(connector).to receive(:send_messages).with(room_source, ['foo'], false)
|
68
81
|
subject.run
|
69
82
|
subject.send_messages(room_source, ['foo'])
|
70
83
|
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Lita::FlowdockMessage, lita: true do
|
4
|
+
let(:message_handler) do
|
5
|
+
Lita::Adapters::Flowdock::MessageHandler.new(
|
6
|
+
robot,
|
7
|
+
123456,
|
8
|
+
data,
|
9
|
+
fd_client
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:source) { instance_double('Lita::FlowdockSource', private_message?: false, message_id: 1234) }
|
14
|
+
|
15
|
+
let(:robot) { Lita::Robot.new(registry) }
|
16
|
+
let(:fd_client) { instance_double('Flowdock::Client') }
|
17
|
+
let(:test_flow) { 'testing:lita-test' }
|
18
|
+
let(:test_user_id) { 3 }
|
19
|
+
let(:test_fd_user) { user_hash(test_user_id) }
|
20
|
+
let(:user) { user_double(test_user_id) }
|
21
|
+
|
22
|
+
before do
|
23
|
+
allow(fd_client).to receive(:get).with("/user/3").and_return(test_fd_user)
|
24
|
+
allow(Lita::FlowdockSource).to receive(:new).with(
|
25
|
+
user: user,
|
26
|
+
room: test_flow,
|
27
|
+
private_message: false,
|
28
|
+
message_id: 1234
|
29
|
+
).and_return(source)
|
30
|
+
allow(Lita::User).to receive(:find_by_id).and_return(user)
|
31
|
+
end
|
32
|
+
|
33
|
+
context "a message in a thread has a tag" do
|
34
|
+
let(:tags) { ['down'] }
|
35
|
+
let(:body) { 'the system is #down' }
|
36
|
+
let(:data) do
|
37
|
+
{
|
38
|
+
'content' => {
|
39
|
+
'title' => 'Thread title',
|
40
|
+
'text' => body
|
41
|
+
},
|
42
|
+
'event' => 'comment',
|
43
|
+
'flow' => test_flow,
|
44
|
+
'id' => 2345,
|
45
|
+
'thread' => {
|
46
|
+
'initial_message' => 1234
|
47
|
+
},
|
48
|
+
'tags' => tags,
|
49
|
+
'user' => 3
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'creates a message with tags' do
|
54
|
+
expect(Lita::FlowdockMessage).to receive(:new).with(
|
55
|
+
robot,
|
56
|
+
body,
|
57
|
+
source,
|
58
|
+
tags,
|
59
|
+
nil
|
60
|
+
)
|
61
|
+
|
62
|
+
message_handler.handle
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "a message in a thread" do
|
67
|
+
let(:tags) { ['down'] }
|
68
|
+
let(:body) { 'the system is #down' }
|
69
|
+
let(:data) do
|
70
|
+
{
|
71
|
+
'content' => {
|
72
|
+
'title' => 'Thread title',
|
73
|
+
'text' => body
|
74
|
+
},
|
75
|
+
'event' => 'comment',
|
76
|
+
'flow' => test_flow,
|
77
|
+
'id' => 2345,
|
78
|
+
'thread_id' => 'deadbeef',
|
79
|
+
'thread' => {
|
80
|
+
'initial_message' => 1234
|
81
|
+
},
|
82
|
+
'tags' => tags,
|
83
|
+
'user' => 3
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'stores the message_id on the flowdock_message' do
|
88
|
+
expect(Lita::FlowdockMessage).to receive(:new).with(
|
89
|
+
robot,
|
90
|
+
body,
|
91
|
+
source,
|
92
|
+
tags,
|
93
|
+
'deadbeef'
|
94
|
+
)
|
95
|
+
|
96
|
+
message_handler.handle
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'a regular message with a tag' do
|
101
|
+
let(:tags) { ['world'] }
|
102
|
+
let(:body) { 'Hello #world' }
|
103
|
+
let(:data) do
|
104
|
+
{
|
105
|
+
'content' => body,
|
106
|
+
'event' => 'message',
|
107
|
+
'flow' => test_flow,
|
108
|
+
'id' => 1234,
|
109
|
+
'thread' => {
|
110
|
+
'initial_message' => 1234
|
111
|
+
},
|
112
|
+
'tags' => tags,
|
113
|
+
'user' => 3
|
114
|
+
}
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'creates a message with tags' do
|
118
|
+
expect(Lita::FlowdockMessage).to receive(:new).with(
|
119
|
+
robot,
|
120
|
+
body,
|
121
|
+
source,
|
122
|
+
tags,
|
123
|
+
nil
|
124
|
+
)
|
125
|
+
|
126
|
+
message_handler.handle
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Lita::FlowdockSource do
|
4
|
+
let(:room){ "Main" }
|
5
|
+
let(:room_id) { "123123123" }
|
6
|
+
|
7
|
+
subject{ Lita::FlowdockSource.new(room: room) }
|
8
|
+
|
9
|
+
describe "with a room" do
|
10
|
+
it "looks up rooms" do
|
11
|
+
expect(Lita.redis).to receive(:get).with("flows/#{room}").and_return(room_id)
|
12
|
+
expect(subject.room).to eql(room_id)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "if the room doesn't exist" do
|
16
|
+
it "defaults to the passed in room" do
|
17
|
+
expect(Lita.redis).to receive(:get).with("flows/#{room}").and_return(nil)
|
18
|
+
expect(subject.room).to eql(room)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "without a room" do
|
24
|
+
subject{ Lita::FlowdockSource.new(user: "Bob") }
|
25
|
+
|
26
|
+
it "skips the room lookup if no room is given" do
|
27
|
+
expect(Lita.redis).not_to receive(:get).with("flows/#{room}")
|
28
|
+
expect(subject.room).to be_nil
|
29
|
+
expect(subject.user).to eql("Bob")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
describe "with a message id" do
|
35
|
+
subject{ Lita::FlowdockSource.new(room: room, message_id: 123) }
|
36
|
+
|
37
|
+
it "saves the message id" do
|
38
|
+
allow(Lita.redis).to receive(:get).with("flows/#{room}").and_return(room_id)
|
39
|
+
expect(subject.message_id).to eql(123)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lita-flowdock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben House
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lita
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
47
|
+
version: '0.6'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
54
|
+
version: '0.6'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +164,34 @@ dependencies:
|
|
164
164
|
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: pry
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: pry-byebug
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
167
195
|
description: flowdock adapter for lita.io
|
168
196
|
email:
|
169
197
|
- ben@benhouse.io
|
@@ -184,6 +212,7 @@ files:
|
|
184
212
|
- lib/lita/adapters/flowdock/connector.rb
|
185
213
|
- lib/lita/adapters/flowdock/message_handler.rb
|
186
214
|
- lib/lita/adapters/flowdock/users_creator.rb
|
215
|
+
- lib/lita/message/flowdock_message.rb
|
187
216
|
- lib/lita/source/flowdock_source.rb
|
188
217
|
- lita-flowdock.gemspec
|
189
218
|
- locales/en.yml
|
@@ -191,6 +220,8 @@ files:
|
|
191
220
|
- spec/lita/adapters/flowdock/message_handler_spec.rb
|
192
221
|
- spec/lita/adapters/flowdock/users_creator_spec.rb
|
193
222
|
- spec/lita/adapters/flowdock_spec.rb
|
223
|
+
- spec/lita/message/flowdock_message_spec.rb
|
224
|
+
- spec/lita/source/flowdock_source_spec.rb
|
194
225
|
- spec/spec_helper.rb
|
195
226
|
homepage: https://github.com/bhouse/lita-flowdock
|
196
227
|
licenses:
|
@@ -213,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
213
244
|
version: '0'
|
214
245
|
requirements: []
|
215
246
|
rubyforge_project:
|
216
|
-
rubygems_version: 2.
|
247
|
+
rubygems_version: 2.4.5
|
217
248
|
signing_key:
|
218
249
|
specification_version: 4
|
219
250
|
summary: connects lita.io to flowdock chat service
|
@@ -222,4 +253,6 @@ test_files:
|
|
222
253
|
- spec/lita/adapters/flowdock/message_handler_spec.rb
|
223
254
|
- spec/lita/adapters/flowdock/users_creator_spec.rb
|
224
255
|
- spec/lita/adapters/flowdock_spec.rb
|
256
|
+
- spec/lita/message/flowdock_message_spec.rb
|
257
|
+
- spec/lita/source/flowdock_source_spec.rb
|
225
258
|
- spec/spec_helper.rb
|