lita-slack 1.4.0 → 1.5.0

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: ed147f3d6aec0c4afbcde9e0f587a8a83b8e5780
4
- data.tar.gz: a757cb838975b7a45287a6a2aaf9539b94e0a3f7
3
+ metadata.gz: 8c3600cd068e9891e914063b341e384e1e66c117
4
+ data.tar.gz: 0dcbfb0f922578b75ec22a835d7d77e7072c22fd
5
5
  SHA512:
6
- metadata.gz: e07d8afcff6063c866a80eb1ddeb5c5eca7bb3b6c764d9aa3db5fa9871cde8157c529793061f546bb2ea10b01bcee1a4492fa0275e52dabc30a754b28302f2b6
7
- data.tar.gz: 547446df11c1e54eaef121ec0b5c0150d31d1ccb6c8fc16aa1fa29775d66488637cf956975b59d947347f7d014c653b250fa82719918e8ee3146ae47a6b19856
6
+ metadata.gz: 7b285b424783c62984f4f31b1dec16937c6ea8807f74b428fd769b83d60dc5ca2793c695ed4ae79efb52c0079c9ddfb813782379aa72c1ebf325a73f3eb17a9b
7
+ data.tar.gz: 67da2107713a27eab01d59b19c9256593778341b437c7aeb6f6f832f05eafb359038aa36466fbccd0b5841481712048a4b7590aabd26824b1fc954bb8390e512
data/README.md CHANGED
@@ -47,7 +47,8 @@ Lita will join your default channel after initial setup. To have it join additio
47
47
 
48
48
  * `:connected` - When the robot has connected to Slack. No payload.
49
49
  * `:disconnected` - When the robot has disconnected from Slack. No payload.
50
- * `:slack_user_created` - When the robot creates/updates a user's info - name, mention name, etc..., as directed by Slack. The payload has a single object, under the `:slack_user` key.
50
+ * `:slack_user_created` - When the robot creates/updates a user's info - name, mention name, etc., as directed by Slack. The payload has a single object, a `Lita::Slack::Adapters::SlackUser` object, under the `:slack_user` key.
51
+ * `:slack_channel_created` - When the robot creates/updates a channel's or group's info, as directed by Slack. The payload has a single object, a `Lita::Slack::Adapters::SlackChannel` object, under the `:slack_channel` key.
51
52
 
52
53
  ## License
53
54
 
@@ -3,6 +3,7 @@ require 'faraday'
3
3
  require 'lita/adapters/slack/team_data'
4
4
  require 'lita/adapters/slack/slack_im'
5
5
  require 'lita/adapters/slack/slack_user'
6
+ require 'lita/adapters/slack/slack_channel'
6
7
 
7
8
  module Lita
8
9
  module Adapters
@@ -30,7 +31,9 @@ module Lita
30
31
  SlackIM.from_data_array(response_data["ims"]),
31
32
  SlackUser.from_data(response_data["self"]),
32
33
  SlackUser.from_data_array(response_data["users"]),
33
- response_data["url"]
34
+ SlackChannel.from_data_array(response_data["channels"]) +
35
+ SlackChannel.from_data_array(response_data["groups"]),
36
+ response_data["url"],
34
37
  )
35
38
  end
36
39
 
@@ -19,6 +19,8 @@ module Lita
19
19
  handle_user_change
20
20
  when "bot_added", "bot_changed"
21
21
  handle_bot_change
22
+ when "channel_created", "channel_rename", "group_rename"
23
+ handle_channel_change
22
24
  when "error"
23
25
  handle_error
24
26
  else
@@ -38,6 +40,8 @@ module Lita
38
40
  data["text"].sub(/^\s*<@#{robot_id}>/, "@#{robot.mention_name}")
39
41
  end
40
42
 
43
+ normalized_message = remove_formatting(normalized_message) unless normalized_message.nil?
44
+
41
45
  attachment_text = Array(data["attachments"]).map do |attachment|
42
46
  attachment["text"]
43
47
  end
@@ -45,6 +49,62 @@ module Lita
45
49
  ([normalized_message] + attachment_text).compact.join("\n")
46
50
  end
47
51
 
52
+ def remove_formatting(message)
53
+ # https://api.slack.com/docs/formatting
54
+ message = message.gsub(/
55
+ < # opening angle bracket
56
+ (?<type>[@#!])? # link type
57
+ (?<link>[^>|]+) # link
58
+ (?:\| # start of |label (optional)
59
+ (?<label>[^>]+) # label
60
+ )? # end of label
61
+ > # closing angle bracket
62
+ /ix) do
63
+ link = Regexp.last_match[:link]
64
+ label = Regexp.last_match[:label]
65
+
66
+ case Regexp.last_match[:type]
67
+ when '@'
68
+ if label
69
+ label
70
+ else
71
+ user = User.find_by_id(link)
72
+ if user
73
+ "@#{user.name}"
74
+ else
75
+ "@#{link}"
76
+ end
77
+ end
78
+
79
+ when '#'
80
+ if label
81
+ label
82
+ else
83
+ channel = Lita::Room.find_by_id(link)
84
+ if channel
85
+ "\##{channel.name}"
86
+ else
87
+ "\##{link}"
88
+ end
89
+ end
90
+
91
+ when '!'
92
+ "@#{link}" if ['channel', 'group', 'everyone'].include? link
93
+ else
94
+ link = link.gsub /^mailto:/, ''
95
+ if label && !(link.include? label)
96
+ "#{label} (#{link})"
97
+ else
98
+ label == nil ? link : label
99
+ end
100
+ end
101
+ end
102
+ message.gsub('&lt;', '<')
103
+ .gsub('&gt;', '>')
104
+ .gsub('&amp;', '&')
105
+
106
+ end
107
+
48
108
  def channel
49
109
  data["channel"]
50
110
  end
@@ -71,6 +131,11 @@ module Lita
71
131
  UserCreator.create_user(SlackUser.from_data(data["bot"]), robot, robot_id)
72
132
  end
73
133
 
134
+ def handle_channel_change
135
+ log.debug("Updating channel data.")
136
+ RoomCreator.create_room(SlackChannel.from_data(data["channel"]), robot)
137
+ end
138
+
74
139
  def handle_error
75
140
  error = data["error"]
76
141
  code = error["code"]
@@ -0,0 +1,19 @@
1
+ module Lita
2
+ module Adapters
3
+ class Slack < Adapter
4
+ class RoomCreator
5
+ class << self
6
+ def create_room(channel, robot)
7
+ Lita::Room.create_or_update(channel.id, name: channel.name)
8
+
9
+ robot.trigger(:slack_channel_created, slack_channel: channel)
10
+ end
11
+
12
+ def create_rooms(channels, robot)
13
+ channels.each { |channel| create_room(channel, robot) }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -5,6 +5,7 @@ require 'lita/adapters/slack/api'
5
5
  require 'lita/adapters/slack/event_loop'
6
6
  require 'lita/adapters/slack/im_mapping'
7
7
  require 'lita/adapters/slack/message_handler'
8
+ require 'lita/adapters/slack/room_creator'
8
9
  require 'lita/adapters/slack/user_creator'
9
10
 
10
11
  module Lita
@@ -27,6 +28,7 @@ module Lita
27
28
  @robot_id = team_data.self.id
28
29
 
29
30
  UserCreator.create_users(team_data.users, robot, robot_id)
31
+ RoomCreator.create_rooms(team_data.channels, robot)
30
32
  end
31
33
 
32
34
  def im_for(user_id)
@@ -0,0 +1,37 @@
1
+ module Lita
2
+ module Adapters
3
+ class Slack < Adapter
4
+ class SlackChannel
5
+ class << self
6
+ def from_data(channel_data)
7
+ new(
8
+ channel_data['id'],
9
+ channel_data['name'],
10
+ channel_data['created'],
11
+ channel_data['creator'],
12
+ channel_data
13
+ )
14
+ end
15
+
16
+ def from_data_array(channels_data)
17
+ channels_data.map { |channel_data| from_data(channel_data) }
18
+ end
19
+ end
20
+
21
+ attr_reader :id
22
+ attr_reader :name
23
+ attr_reader :created
24
+ attr_reader :creator
25
+ attr_reader :raw_data
26
+
27
+ def initialize(id, name, created, creator, raw_data)
28
+ @id = id
29
+ @name = name
30
+ @created = created
31
+ @creator = creator
32
+ @raw_data = raw_data
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,7 +1,7 @@
1
1
  module Lita
2
2
  module Adapters
3
3
  class Slack < Adapter
4
- TeamData = Struct.new(:ims, :self, :users, :websocket_url)
4
+ TeamData = Struct.new(:ims, :self, :users, :channels, :websocket_url)
5
5
  end
6
6
  end
7
7
  end
data/lita-slack.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-slack"
3
- spec.version = "1.4.0"
3
+ spec.version = "1.5.0"
4
4
  spec.authors = ["Ken J.", "Jimmy Cuadra"]
5
5
  spec.email = ["kenjij@gmail.com", "jimmy@jimmycuadra.com"]
6
6
  spec.description = %q{Lita adapter for Slack.}
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.add_runtime_dependency "eventmachine"
18
18
  spec.add_runtime_dependency "faraday"
19
19
  spec.add_runtime_dependency "faye-websocket", ">= 0.8.0"
20
- spec.add_runtime_dependency "lita", ">= 4.0.4"
20
+ spec.add_runtime_dependency "lita", ">= 4.4.2"
21
21
  spec.add_runtime_dependency "multi_json"
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
@@ -141,7 +141,9 @@ describe Lita::Adapters::Slack::API do
141
141
  url: 'wss://example.com/',
142
142
  users: [{ id: 'U023BECGF' }],
143
143
  ims: [{ id: 'D024BFF1M' }],
144
- self: { id: 'U12345678' }
144
+ self: { id: 'U12345678' },
145
+ channels: [{ id: 'C1234567890' }],
146
+ groups: [{ id: 'G0987654321' }],
145
147
  })
146
148
  end
147
149
 
@@ -3,8 +3,15 @@ require "spec_helper"
3
3
  describe Lita::Adapters::Slack::MessageHandler, lita: true do
4
4
  subject { described_class.new(robot, robot_id, data) }
5
5
 
6
+ before do
7
+ allow(robot).to receive(:trigger)
8
+ Lita::Adapters::Slack::RoomCreator.create_room(channel, robot)
9
+ end
10
+
6
11
  let(:robot) { instance_double('Lita::Robot', name: 'Lita', mention_name: 'lita') }
7
12
  let(:robot_id) { 'U12345678' }
13
+ let(:channel) { Lita::Adapters::Slack::SlackChannel.new('C2147483705', 'general', 1360782804, 'U023BECGF', raw_data) }
14
+ let(:raw_data) { Hash.new }
8
15
 
9
16
  describe "#handle" do
10
17
  context "with a hello message" do
@@ -140,6 +147,310 @@ describe Lita::Adapters::Slack::MessageHandler, lita: true do
140
147
  subject.handle
141
148
  end
142
149
  end
150
+
151
+ describe "Removing message formatting" do
152
+
153
+ let(:user) { instance_double('Lita::User', id: 'U123',name: 'name', mention_name: 'label') }
154
+
155
+ context "does nothing if there are no user links" do
156
+ let(:data) do
157
+ {
158
+ "type" => "message",
159
+ "channel" => "C2147483705",
160
+ "text" => "foo",
161
+ }
162
+ end
163
+
164
+ it "removes formatting" do
165
+ expect(Lita::Message).to receive(:new).with(
166
+ robot,
167
+ "foo",
168
+ source
169
+ ).and_return(message)
170
+
171
+ subject.handle
172
+ end
173
+
174
+ end
175
+ context "decodes entities" do
176
+ let(:data) do
177
+ {
178
+ "type" => "message",
179
+ "channel" => "C2147483705",
180
+ "text" => "foo &gt; &amp; &lt; &gt;&amp;&lt;",
181
+ }
182
+ end
183
+
184
+ it "removes formatting" do
185
+ expect(Lita::Message).to receive(:new).with(
186
+ robot,
187
+ "foo > & < >&<",
188
+ source
189
+ ).and_return(message)
190
+
191
+ subject.handle
192
+ end
193
+
194
+ end
195
+
196
+ context "changes <@123> links to @name" do
197
+ let(:data) do
198
+ {
199
+ "type" => "message",
200
+ "channel" => "C2147483705",
201
+ "text" => "foo <@123> bar",
202
+ }
203
+ end
204
+ it "removes formatting" do
205
+ expect(Lita::Message).to receive(:new).with(
206
+ robot,
207
+ "foo @name bar",
208
+ source
209
+ ).and_return(message)
210
+
211
+ subject.handle
212
+ end
213
+ end
214
+
215
+ context "changes <@U123|label> links to label" do
216
+ let(:data) do
217
+ {
218
+ "type" => "message",
219
+ "channel" => "C2147483705",
220
+ "text" => "foo <@123|label> bar",
221
+ }
222
+ end
223
+ it "removes formatting" do
224
+ expect(Lita::Message).to receive(:new).with(
225
+ robot,
226
+ "foo label bar",
227
+ source
228
+ ).and_return(message)
229
+
230
+ subject.handle
231
+ end
232
+ end
233
+
234
+ context "changes <#C2147483705> links to #general" do
235
+ let(:data) do
236
+ {
237
+ "type" => "message",
238
+ "channel" => "C2147483705",
239
+ "text" => "foo <#C2147483705> bar",
240
+ }
241
+ end
242
+ it "removes formatting" do
243
+ expect(Lita::Message).to receive(:new).with(
244
+ robot,
245
+ "foo #general bar",
246
+ source
247
+ ).and_return(message)
248
+
249
+ subject.handle
250
+ end
251
+ end
252
+
253
+ context "changes <#C2147483705|genral> links to #general" do
254
+ let(:data) do
255
+ {
256
+ "type" => "message",
257
+ "channel" => "C2147483705",
258
+ "text" => "foo <#C2147483705|general> bar",
259
+ }
260
+ end
261
+ it "removes formatting" do
262
+ expect(Lita::Message).to receive(:new).with(
263
+ robot,
264
+ "foo general bar",
265
+ source
266
+ ).and_return(message)
267
+
268
+ subject.handle
269
+ end
270
+ end
271
+
272
+ context "changes <!everyone> links to @everyone" do
273
+ let(:data) do
274
+ {
275
+ "type" => "message",
276
+ "channel" => "C2147483705",
277
+ "text" => "foo <!everyone> bar",
278
+ }
279
+ end
280
+ it "removes formatting" do
281
+ expect(Lita::Message).to receive(:new).with(
282
+ robot,
283
+ "foo @everyone bar",
284
+ source
285
+ ).and_return(message)
286
+ subject.handle
287
+ end
288
+ end
289
+
290
+ context "changes <!channel> links to @channel" do
291
+ let(:data) do
292
+ {
293
+ "type" => "message",
294
+ "channel" => "C2147483705",
295
+ "text" => "foo <!channel> bar",
296
+ }
297
+ end
298
+ it "removes formatting" do
299
+ expect(Lita::Message).to receive(:new).with(
300
+ robot,
301
+ "foo @channel bar",
302
+ source
303
+ ).and_return(message)
304
+ subject.handle
305
+ end
306
+ end
307
+
308
+ context "changes <!group> links to @group" do
309
+ let(:data) do
310
+ {
311
+ "type" => "message",
312
+ "channel" => "C2147483705",
313
+ "text" => "foo <!group> bar",
314
+ }
315
+ end
316
+ it "removes formatting" do
317
+ expect(Lita::Message).to receive(:new).with(
318
+ robot,
319
+ "foo @group bar",
320
+ source
321
+ ).and_return(message)
322
+ subject.handle
323
+ end
324
+ end
325
+
326
+ context "removes remove formatting around <http> links" do
327
+ let(:data) do
328
+ {
329
+ "type" => "message",
330
+ "channel" => "C2147483705",
331
+ "text" => "foo <http://www.example.com> bar",
332
+ }
333
+ end
334
+ it "removes formatting" do
335
+ expect(Lita::Message).to receive(:new).with(
336
+ robot,
337
+ "foo http://www.example.com bar",
338
+ source
339
+ ).and_return(message)
340
+ subject.handle
341
+ end
342
+ end
343
+
344
+ context "removes remove formatting around <http> links with a substring label" do
345
+ let(:data) do
346
+ {
347
+ "type" => "message",
348
+ "channel" => "C2147483705",
349
+ "text" => "foo <http://www.example.com|www.example.com> bar",
350
+ }
351
+ end
352
+ it "removes formatting" do
353
+ expect(Lita::Message).to receive(:new).with(
354
+ robot,
355
+ "foo www.example.com bar",
356
+ source
357
+ ).and_return(message)
358
+ subject.handle
359
+ end
360
+ end
361
+
362
+ context "remove formatting around <skype> links" do
363
+ let(:data) do
364
+ {
365
+ "type" => "message",
366
+ "channel" => "C2147483705",
367
+ "text" => "foo <skype:echo123?call> bar",
368
+ }
369
+ end
370
+ it "removes formatting" do
371
+ expect(Lita::Message).to receive(:new).with(
372
+ robot,
373
+ "foo skype:echo123?call bar",
374
+ source
375
+ ).and_return(message)
376
+ subject.handle
377
+ end
378
+ end
379
+
380
+ context "remove formatting around <http> links with a label containing entities" do
381
+ let(:data) do
382
+ {
383
+ "type" => "message",
384
+ "channel" => "C2147483705",
385
+ "text" => "foo <http://www.example.com|label &gt; &amp; &lt;> bar",
386
+ }
387
+ end
388
+ it "removes formatting" do
389
+ expect(Lita::Message).to receive(:new).with(
390
+ robot,
391
+ "foo label > & < (http://www.example.com) bar",
392
+ source
393
+ ).and_return(message)
394
+ subject.handle
395
+ end
396
+ end
397
+
398
+ context "remove formatting around around <mailto> links" do
399
+ let(:data) do
400
+ {
401
+ "type" => "message",
402
+ "channel" => "C2147483705",
403
+ "text" => "foo <mailto:name@example.com> bar",
404
+ }
405
+ end
406
+ it "removes formatting" do
407
+ expect(Lita::Message).to receive(:new).with(
408
+ robot,
409
+ "foo name@example.com bar",
410
+ source
411
+ ).and_return(message)
412
+ subject.handle
413
+ end
414
+ end
415
+
416
+ context "remove formatting around <mailto> links with an email label" do
417
+ let(:data) do
418
+ {
419
+ "type" => "message",
420
+ "channel" => "C2147483705",
421
+ "text" => "foo <mailto:name@example.com|name@example.com> bar",
422
+ }
423
+ end
424
+ it "removes formatting" do
425
+ expect(Lita::Message).to receive(:new).with(
426
+ robot,
427
+ "foo name@example.com bar",
428
+ source
429
+ ).and_return(message)
430
+ subject.handle
431
+ end
432
+ end
433
+
434
+ context "change multiple links at once" do
435
+ let(:data) do
436
+ {
437
+ "type" => "message",
438
+ "channel" => "C2147483705",
439
+ "text" => "foo <@U123|label> bar <#C2147483705> <!channel> <http://www.example.com|label>",
440
+ }
441
+ end
442
+ it "removes formatting" do
443
+ expect(Lita::Message).to receive(:new).with(
444
+ robot,
445
+ "foo label bar #general @channel label (http://www.example.com)",
446
+ source
447
+ ).and_return(message)
448
+ subject.handle
449
+ end
450
+ end
451
+
452
+
453
+ end
143
454
  end
144
455
 
145
456
  context "with a message with an unsupported subtype" do
@@ -225,6 +536,28 @@ describe Lita::Adapters::Slack::MessageHandler, lita: true do
225
536
  end
226
537
  end
227
538
 
539
+ %w(channel_created channel_rename group_rename).each do |type|
540
+ context "with a #{type} message" do
541
+ before { allow(robot).to receive(:trigger) }
542
+
543
+ let(:data) do
544
+ {
545
+ "type" => type,
546
+ "channel" => {
547
+ "id" => "C01234567890",
548
+ "name" => "mychannel",
549
+ }
550
+ }
551
+ end
552
+
553
+ it "creates a new room for the channel" do
554
+ subject.handle
555
+
556
+ expect(Lita::Room.find_by_name("mychannel").id).to eq('C01234567890')
557
+ end
558
+ end
559
+ end
560
+
228
561
  context "with an error message" do
229
562
  let(:data) do
230
563
  {
@@ -0,0 +1,31 @@
1
+ require "spec_helper"
2
+
3
+ describe Lita::Adapters::Slack::RoomCreator, lita: true do
4
+ describe ".create_rooms" do
5
+ before { allow(robot).to receive(:trigger) }
6
+
7
+ let(:robot) { instance_double('Lita::Robot') }
8
+
9
+ let(:group) do
10
+ Lita::Adapters::Slack::SlackChannel.from_data('id' => 'G1234567890', 'name' => 'mygroup')
11
+ end
12
+
13
+ let(:room) do
14
+ Lita::Adapters::Slack::SlackChannel.from_data('id' => 'C1234567890', 'name' => 'mychannel')
15
+ end
16
+
17
+ it "creates a Room for each Slack channel" do
18
+ described_class.create_rooms([room] + [group], robot)
19
+
20
+ expect(Lita::Room.find_by_name("mychannel").id).to eq("C1234567890")
21
+ expect(Lita::Room.find_by_name("mygroup").id).to eq("G1234567890")
22
+ end
23
+
24
+ it "triggers the slack_channel_created event" do
25
+ expect(robot).to receive(:trigger).with(:slack_channel_created, slack_channel: room)
26
+ expect(robot).to receive(:trigger).with(:slack_channel_created, slack_channel: group)
27
+
28
+ described_class.create_rooms([room] + [group], robot)
29
+ end
30
+ end
31
+ end
@@ -15,11 +15,15 @@ describe Lita::Adapters::Slack::RTMConnection, lita: true do
15
15
  let(:registry) { Lita::Registry.new }
16
16
  let(:robot) { Lita::Robot.new(registry) }
17
17
  let(:raw_user_data) { Hash.new }
18
+ let(:channel) { Lita::Adapters::Slack::SlackChannel.new('C2147483705', 'general', 1360782804, 'U023BECGF', raw_data) }
19
+ let(:raw_data) { Hash.new }
20
+
18
21
  let(:rtm_start_response) do
19
22
  Lita::Adapters::Slack::TeamData.new(
20
23
  [],
21
24
  Lita::Adapters::Slack::SlackUser.new('U12345678', 'carl', nil, raw_user_data),
22
25
  [Lita::Adapters::Slack::SlackUser.new('U12345678', 'carl', '', raw_user_data)],
26
+ [channel],
23
27
  "wss://example.com/"
24
28
  )
25
29
  end
@@ -47,6 +51,12 @@ describe Lita::Adapters::Slack::RTMConnection, lita: true do
47
51
 
48
52
  described_class.build(robot, config)
49
53
  end
54
+
55
+ it "creates rooms with the results of rtm.start data" do
56
+ expect(Lita::Adapters::Slack::RoomCreator).to receive(:create_rooms)
57
+
58
+ described_class.build(robot, config)
59
+ end
50
60
  end
51
61
 
52
62
  describe "#im_for" do
@@ -94,7 +104,7 @@ describe Lita::Adapters::Slack::RTMConnection, lita: true do
94
104
  allow(Lita::Adapters::Slack::MessageHandler).to receive(:new).with(
95
105
  robot,
96
106
  'U12345678',
97
- {}
107
+ {},
98
108
  ).and_return(message_handler)
99
109
 
100
110
  expect(message_handler).to receive(:handle)
@@ -0,0 +1,40 @@
1
+ require "spec_helper"
2
+
3
+ describe Lita::Adapters::Slack::SlackChannel do
4
+ let(:channel_data_1) do
5
+ {
6
+ "id" => "C2147483705",
7
+ "name" => "Room 1",
8
+ "created" => 1360782804,
9
+ "creator" => 'U023BECGF'
10
+ }
11
+ end
12
+ let(:channel_data_2) do
13
+ {
14
+ "id" => "C2147483706",
15
+ "name" => "Room 2",
16
+ "created" => 1360782805,
17
+ "creator" => 'U023BECGF'
18
+ }
19
+ end
20
+ let(:channels_data) { [channel_data_1, channel_data_2] }
21
+
22
+ describe ".from_data_array" do
23
+ subject { described_class.from_data_array(channels_data) }
24
+
25
+ it "returns an object for each hash of Channel data" do
26
+ expect(subject.size).to eq(2)
27
+ end
28
+
29
+ it "creates SlackIM objects" do
30
+ expect(subject[0].id).to eq('C2147483705')
31
+ expect(subject[0].name).to eq('Room 1')
32
+ expect(subject[0].creator).to eq('U023BECGF')
33
+ expect(subject[0].created).to eq(1360782804)
34
+ expect(subject[1].id).to eq('C2147483706')
35
+ expect(subject[1].name).to eq('Room 2')
36
+ expect(subject[1].creator).to eq('U023BECGF')
37
+ expect(subject[1].created).to eq(1360782805)
38
+ end
39
+ end
40
+ end
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.4.0
4
+ version: 1.5.0
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-05-10 00:00:00.000000000 Z
12
+ date: 2015-06-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine
@@ -59,14 +59,14 @@ dependencies:
59
59
  requirements:
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 4.0.4
62
+ version: 4.4.2
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 4.0.4
69
+ version: 4.4.2
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: multi_json
72
72
  requirement: !ruby/object:Gem::Requirement
@@ -185,7 +185,9 @@ files:
185
185
  - lib/lita/adapters/slack/event_loop.rb
186
186
  - lib/lita/adapters/slack/im_mapping.rb
187
187
  - lib/lita/adapters/slack/message_handler.rb
188
+ - lib/lita/adapters/slack/room_creator.rb
188
189
  - lib/lita/adapters/slack/rtm_connection.rb
190
+ - lib/lita/adapters/slack/slack_channel.rb
189
191
  - lib/lita/adapters/slack/slack_im.rb
190
192
  - lib/lita/adapters/slack/slack_user.rb
191
193
  - lib/lita/adapters/slack/team_data.rb
@@ -196,7 +198,9 @@ files:
196
198
  - spec/lita/adapters/slack/event_loop_spec.rb
197
199
  - spec/lita/adapters/slack/im_mapping_spec.rb
198
200
  - spec/lita/adapters/slack/message_handler_spec.rb
201
+ - spec/lita/adapters/slack/room_creator_spec.rb
199
202
  - spec/lita/adapters/slack/rtm_connection_spec.rb
203
+ - spec/lita/adapters/slack/slack_channel_spec.rb
200
204
  - spec/lita/adapters/slack/slack_im_spec.rb
201
205
  - spec/lita/adapters/slack/slack_user_spec.rb
202
206
  - spec/lita/adapters/slack/user_creator_spec.rb
@@ -232,9 +236,12 @@ test_files:
232
236
  - spec/lita/adapters/slack/event_loop_spec.rb
233
237
  - spec/lita/adapters/slack/im_mapping_spec.rb
234
238
  - spec/lita/adapters/slack/message_handler_spec.rb
239
+ - spec/lita/adapters/slack/room_creator_spec.rb
235
240
  - spec/lita/adapters/slack/rtm_connection_spec.rb
241
+ - spec/lita/adapters/slack/slack_channel_spec.rb
236
242
  - spec/lita/adapters/slack/slack_im_spec.rb
237
243
  - spec/lita/adapters/slack/slack_user_spec.rb
238
244
  - spec/lita/adapters/slack/user_creator_spec.rb
239
245
  - spec/lita/adapters/slack_spec.rb
240
246
  - spec/spec_helper.rb
247
+ has_rdoc: