lita-campfire 0.1 → 0.1.2

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: e6c09610adbd5cde7dbcba15ed189ae282565d42
4
- data.tar.gz: 685c6bfafacd7ec73f258831629f2087deedabf0
3
+ metadata.gz: ccccb536763935bb73f1c26423541002e4b14a10
4
+ data.tar.gz: 3ca3c85a5cd7b55280d7ce03f258b3ae47ad8c5a
5
5
  SHA512:
6
- metadata.gz: d00c551bcb948b8d0f8f2da32d63ea271ca06fe06277d46c20e60ba85c36f784dd0613cc19fd662f740e3e2a5ed0af4c3936d1c901398c4f82a4e6b42badb10f
7
- data.tar.gz: baf6b041d1bb6033d29317b51bf7648d3eb753b61a4df6fb4e081e0625fc5d83b02d66d4e17a90c0910711cb9975529cedba13974d57175c3705f862ef560b88
6
+ metadata.gz: 9a64b263957531a45a4765407fc8d0bd41d07e0dcad8e500f87106373a841b67e02283db94f60ded94bd72ca52b80ac84a23be5a404af53d02a0791f0694d7e8
7
+ data.tar.gz: f77f87a68d2683511aae3349588118c2c840a512fa188b04f4cc87f3f7ae71837686ec2f1d89a7003fb61cdbda0b2e4c54d13dc2c2f3b88c05c32b59f3051d12
data/.gitignore CHANGED
@@ -17,3 +17,5 @@ tmp
17
17
  .yardoc
18
18
  _yardoc
19
19
  doc/
20
+ vendor/bundle
21
+ tags
data/Gemfile.lock CHANGED
@@ -1,19 +1,18 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lita-campfire (0.1)
5
- lita (~> 2.0)
4
+ lita-campfire (0.1.2)
5
+ lita (~> 2.6.0)
6
6
  tinder (~> 1.9.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- colorize (0.5.8)
12
- coveralls (0.6.7)
13
- colorize
11
+ coveralls (0.6.9)
14
12
  multi_json (~> 1.3)
15
13
  rest-client
16
14
  simplecov (>= 0.7)
15
+ term-ansicolor
17
16
  thor
18
17
  daemons (1.1.9)
19
18
  diff-lcs (1.2.4)
@@ -22,54 +21,57 @@ GEM
22
21
  multipart-post (~> 1.2.0)
23
22
  faraday_middleware (0.9.0)
24
23
  faraday (>= 0.7.4, < 0.9)
25
- hashie (1.2.0)
24
+ hashie (2.0.5)
26
25
  http_parser.rb (0.5.3)
27
- json (1.7.7)
28
- lita (2.2.0)
29
- bundler (~> 1.3)
30
- faraday (~> 0.8.7)
31
- multi_json (~> 1.7.7)
32
- rack (~> 1.5.2)
33
- redis-namespace (~> 1.3.0)
34
- thin (~> 1.5.1)
35
- thor (~> 0.18.1)
36
- mime-types (1.23)
37
- multi_json (1.7.8)
26
+ json (1.8.1)
27
+ lita (2.6.0)
28
+ bundler (>= 1.3)
29
+ faraday (>= 0.8.7)
30
+ multi_json (>= 1.7.7)
31
+ rack (>= 1.5.2)
32
+ redis-namespace (>= 1.3.0)
33
+ thin (>= 1.5.1)
34
+ thor (>= 0.18.1)
35
+ mime-types (1.25)
36
+ multi_json (1.7.9)
38
37
  multipart-post (1.2.0)
39
38
  rack (1.5.2)
40
39
  rake (10.1.0)
41
- redis (3.0.4)
42
- redis-namespace (1.3.1)
43
- redis (~> 3.0.0)
40
+ redis (3.0.6)
41
+ redis-namespace (1.4.1)
42
+ redis (~> 3.0.4)
44
43
  rest-client (1.6.7)
45
44
  mime-types (>= 1.16)
46
45
  rspec (2.14.1)
47
46
  rspec-core (~> 2.14.0)
48
47
  rspec-expectations (~> 2.14.0)
49
48
  rspec-mocks (~> 2.14.0)
50
- rspec-core (2.14.4)
51
- rspec-expectations (2.14.0)
49
+ rspec-core (2.14.5)
50
+ rspec-expectations (2.14.2)
52
51
  diff-lcs (>= 1.1.3, < 2.0)
53
- rspec-mocks (2.14.2)
52
+ rspec-mocks (2.14.3)
54
53
  simple_oauth (0.1.9)
55
54
  simplecov (0.7.1)
56
55
  multi_json (~> 1.0)
57
56
  simplecov-html (~> 0.7.1)
58
57
  simplecov-html (0.7.1)
59
- thin (1.5.1)
58
+ term-ansicolor (1.2.2)
59
+ tins (~> 0.8)
60
+ thin (1.6.1)
60
61
  daemons (>= 1.0.9)
61
- eventmachine (>= 0.12.6)
62
+ eventmachine (>= 1.0.0)
62
63
  rack (>= 1.0.0)
63
64
  thor (0.18.1)
64
- tinder (1.9.2)
65
+ tinder (1.9.3)
65
66
  eventmachine (~> 1.0)
66
67
  faraday (~> 0.8)
67
68
  faraday_middleware (~> 0.9)
68
- hashie (~> 1.0)
69
- json (~> 1.7.5)
69
+ hashie (>= 1.0, < 3)
70
+ json (~> 1.8.0)
70
71
  mime-types (~> 1.19)
71
- multi_json (~> 1.5)
72
+ multi_json (~> 1.7)
72
73
  twitter-stream (~> 0.1)
74
+ tins (0.9.0)
73
75
  twitter-stream (0.1.16)
74
76
  eventmachine (>= 0.12.8)
75
77
  http_parser.rb (~> 0.5.1)
data/README.md CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  [![Build Status](https://secure.travis-ci.org/josacar/lita-campfire.png)](http://travis-ci.org/josacar/lita-campfire)
6
6
  [![Coverage Status](https://coveralls.io/repos/josacar/lita-campfire/badge.png)](https://coveralls.io/r/josacar/lita-campfire)
7
+ [![Code Climate](https://codeclimate.com/github/josacar/lita-campfire.png)](https://codeclimate.com/github/josacar/lita-campfire)
8
+ [![Dependency Status](https://gemnasium.com/josacar/lita-campfire.png)](https://gemnasium.com/josacar/lita-campfire)
7
9
 
8
10
  **lita-campfire** is an adapter for [Lita](https://github.com/jimmycuadra/lita) that allows you to use the robot with [Campfire](https://campfirenow.com).
9
11
 
@@ -11,6 +13,12 @@
11
13
 
12
14
  Add lita-campfire to your Lita instance's Gemfile:
13
15
 
16
+ ```ruby
17
+ gem "lita-campfire"
18
+ ```
19
+
20
+ or if you want to use the bleeding edge version:
21
+
14
22
  ```ruby
15
23
  gem "lita-campfire", :git => 'https://github.com/josacar/lita-campfire.git'
16
24
  ```
@@ -12,14 +12,14 @@ module Lita
12
12
  robot,
13
13
  subdomain: config.subdomain,
14
14
  apikey: config.apikey,
15
- rooms: config.rooms,
15
+ rooms: rooms,
16
16
  debug: config.debug
17
17
  )
18
18
  end
19
19
 
20
20
  def run
21
21
  connector.connect
22
- connector.join_rooms rooms
22
+ connector.join_rooms
23
23
  sleep
24
24
  rescue Interrupt
25
25
  disconnect
@@ -54,4 +54,4 @@ module Lita
54
54
 
55
55
  Lita.register_adapter(:campfire, Campfire)
56
56
  end
57
- end
57
+ end
@@ -3,28 +3,92 @@ module Lita
3
3
  class Campfire < Adapter
4
4
  class Callback
5
5
 
6
- MESSAGE_TYPES = %w( TextMessage PasteMessage ).freeze
6
+ attr_reader :robot, :room
7
7
 
8
- def initialize(robot)
8
+ def initialize(robot, room)
9
9
  @robot = robot
10
+ @room = room
11
+
12
+ @receivers = [MessageReceiver, EnterReceiver].map do |receiver_type|
13
+ receiver_type.new(self)
14
+ end
10
15
  end
11
16
 
12
- def room_message(room)
13
- room.listen do |m|
14
- if MESSAGE_TYPES.include?(m.type)
15
- text = m.body
16
- user = get_user(m.user)
17
- source = Source.new(user, room)
18
- message = Message.new(@robot, text, source)
19
- @robot.receive message
20
- end
17
+ def listen
18
+ @room.listen do |event|
19
+ receive event
21
20
  end
22
21
  end
23
22
 
24
- private
25
- def get_user(user_data)
23
+ def register_users
24
+ @room.users.each do |user|
25
+ create_user user
26
+ end
27
+ end
28
+
29
+ def create_user(user_data)
30
+ user_data = user_data.dup
26
31
  user_id = user_data.delete(:id)
27
- User.new(user_id, user_data)
32
+ User.create(user_id, user_data)
33
+ end
34
+
35
+ def receive(event)
36
+ Thread.new do
37
+ @receivers.each do |receiver|
38
+ receiver.receive event
39
+ end
40
+ end
41
+ end
42
+
43
+ class EventReceiver
44
+
45
+ class << self
46
+ attr_accessor :message_types
47
+
48
+ def receives(*types)
49
+ self.message_types = types
50
+ end
51
+ end
52
+
53
+ def initialize(callback)
54
+ @callback = callback
55
+ @robot = callback.robot
56
+ @room = callback.room
57
+ end
58
+
59
+ def receive(event)
60
+ _receive(event) if receives?(event)
61
+ end
62
+
63
+ private
64
+
65
+ def receives?(event)
66
+ self.class.message_types.include?(event.type)
67
+ end
68
+ end
69
+
70
+ class MessageReceiver < EventReceiver
71
+
72
+ receives 'TextMessage', 'PasteMessage'
73
+
74
+ def _receive(event)
75
+ text = event.body
76
+ user = @callback.create_user(event.user)
77
+ source = Source.new(user, event.room_id.to_s)
78
+ message = Message.new(@robot, text, source)
79
+ @robot.receive message
80
+ end
81
+
82
+ end
83
+
84
+ class EnterReceiver < EventReceiver
85
+
86
+ receives 'EnterMessage'
87
+
88
+ def _receive(event)
89
+ @callback.create_user(event.user)
90
+ end
91
+
28
92
  end
29
93
 
30
94
  end
@@ -14,33 +14,49 @@ module Lita
14
14
  @campfire = Tinder::Campfire.new(@subdomain, token: @apikey)
15
15
  end
16
16
 
17
- def join_rooms(rooms)
17
+ def join_rooms
18
18
  rooms.each do |room_id|
19
19
  room = fetch_room(room_id)
20
20
  room.join
21
- Callback.new(@robot).room_message(room)
21
+ callback = Callback.new(@robot, room)
22
+ callback.register_users
23
+ callback.listen
22
24
  end
23
25
  end
24
26
 
25
- def send_messages(room, messages)
26
- @campfire.find_room_by_id(room.id).tap do |my_room|
27
+ def send_messages(room_id, messages)
28
+ fetch_room(room_id).tap do |my_room|
27
29
  messages.each do |message|
28
- my_room.speak message
30
+ if message.include?("\n")
31
+ my_room.paste message
32
+ else
33
+ my_room.speak message
34
+ end
29
35
  end
30
36
  end
31
37
  end
32
38
 
39
+ def disconnect
40
+ Lita.logger.info("Disconnecting from Campfire.")
41
+ rooms.each do |room_id|
42
+ room = fetch_room(room_id)
43
+ room.leave
44
+ end
45
+ end
46
+
33
47
  private
34
48
 
49
+ attr_reader :rooms
50
+
35
51
  def fetch_room(room_id)
36
52
  @campfire.find_room_by_id(room_id).tap do |room|
37
53
  if room.nil?
38
54
  raise RoomNotAvailable,
39
- "Make sure you have access to room #{ room_id }"
55
+ "Make sure you have access to room #{ room_id.inspect }"
40
56
  end
41
57
  end
42
58
  end
43
59
  end
44
60
  end
45
61
  end
46
- end
62
+ end
@@ -1,8 +1,8 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-campfire"
3
- spec.version = "0.1"
4
- spec.authors = ["Jose Luis Salas"]
5
- spec.email = ["josacar@gmail.com"]
3
+ spec.version = "0.1.2"
4
+ spec.authors = ["Jose Luis Salas", "Zac Stewart"]
5
+ spec.email = ["josacar@gmail.com", "zgstewart@gmail.com"]
6
6
  spec.description = %q{A Campfire adapter for Lita.}
7
7
  spec.summary = %q{A Campfire adapter for the Lita chat robot.}
8
8
  spec.homepage = "https://github.com/josacar/lita-campfire"
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
14
14
  spec.require_paths = ["lib"]
15
15
 
16
- spec.add_runtime_dependency "lita", "~> 2.0"
16
+ spec.add_runtime_dependency "lita", "~> 2.6.0"
17
17
  spec.add_runtime_dependency "tinder", "~> 1.9.0"
18
18
 
19
19
  spec.add_development_dependency "bundler", "~> 1.3"
@@ -21,4 +21,4 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "rspec", "~> 2.14"
22
22
  spec.add_development_dependency "simplecov"
23
23
  spec.add_development_dependency "coveralls"
24
- end
24
+ end
@@ -2,39 +2,68 @@ require 'spec_helper'
2
2
 
3
3
  describe Campfire::Callback do
4
4
 
5
- class DummyRoom < Struct.new(:message)
5
+ class DummyRoom < Struct.new(:id, :message, :users)
6
6
  def listen
7
7
  yield message
8
8
  end
9
9
  end
10
10
 
11
+ let(:event) { double('Event') }
11
12
  let(:campfire_user) { { id: 1, name: 'Bender Bending Rodriguez' } }
12
- let(:message) { double('Message') }
13
- let(:robot) { double('Robot', mention_name: 'Robot') }
14
- let(:room) { DummyRoom.new(campfire_message) }
15
- let(:source) { double('Source') }
16
- let(:text) { "Yes it's the apocalypse alright. I always though is have a hand in it." }
17
- let(:user) { double('User') }
13
+ let(:message) { double('Message') }
14
+ let(:robot) { double('Robot', mention_name: 'Robot') }
15
+ let(:room) { DummyRoom.new(1, event, users) }
16
+ let(:source) { double('Source') }
17
+ let(:text) { "Yes it's the apocalypse alright. I always though is have a hand in it." }
18
+ let(:user) { double('User') }
19
+ let(:users) { [ {id: 2, name: 'Bender'}, {id: 3, name: 'Washbucket'} ] }
18
20
 
19
- subject { described_class.new(robot) }
21
+ subject { described_class.new(robot, room) }
20
22
 
21
- describe '#room_message' do
23
+ describe '#listen' do
24
+ before do
25
+ allow(Thread).to receive(:new).and_yield
26
+ end
22
27
  %w( TextMessage PasteMessage ).each do |message_type|
23
28
  describe "with a #{message_type}" do
24
- let(:campfire_message) { double(
25
- type: message_type,
26
- body: text,
27
- user: campfire_user) }
29
+ let(:event) do
30
+ double('Event',
31
+ type: message_type,
32
+ body: text,
33
+ user: campfire_user,
34
+ room_id: 1)
35
+ end
28
36
 
29
37
  it 'passes the message to Robot#receive' do
30
- expect(Lita::User).to receive(:new).with(1, name: 'Bender Bending Rodriguez').and_return(user)
31
- expect(Lita::Source).to receive(:new).with(user, room).and_return(source)
38
+ expect(Lita::User).to receive(:create).with(1, name: 'Bender Bending Rodriguez').and_return(user)
39
+ expect(Lita::Source).to receive(:new).with(user, '1').and_return(source)
32
40
  expect(Lita::Message).to receive(:new).with(robot, text, source).and_return(message)
33
41
  expect(robot).to receive(:receive).with(message)
34
- subject.room_message(room)
42
+ subject.listen
35
43
  end
36
44
  end
37
45
  end
46
+
47
+ describe 'EnterMessage' do
48
+ let(:event) { double('Event', type: 'EnterMessage', user: campfire_user) }
49
+
50
+ it 'creates a user' do
51
+ expect(Lita::User).to receive(:create).with(1, name: 'Bender Bending Rodriguez').and_return(user)
52
+ subject.listen
53
+ end
54
+ end
55
+
56
+ end
57
+
58
+ describe '#register_users' do
59
+ it 'creates a user for all the users in the room' do
60
+ users.each do |user|
61
+ user_id = user[:id]
62
+ name = user[:name]
63
+ expect(Lita::User).to receive(:create).with(user_id, name: name)
64
+ end
65
+ subject.register_users
66
+ end
38
67
  end
39
68
 
40
69
  end
@@ -4,7 +4,7 @@ describe Campfire::Connector do
4
4
  let(:robot) { double }
5
5
  let(:subdomain) { 'mycampfire' }
6
6
  let(:apikey) { '2e9f45bb934c0fa13e9f19ee0901c316fda9fc1' }
7
- let(:rooms) { %w( 12345 41234 ) }
7
+ let(:rooms) { %w( 12345 ) }
8
8
  let(:options) { { subdomain: subdomain, apikey: apikey, rooms: rooms } }
9
9
  let(:campfire) { double }
10
10
 
@@ -30,15 +30,16 @@ describe Campfire::Connector do
30
30
  subject.connect
31
31
  end
32
32
 
33
- it 'joins each room' do
33
+ it 'joins each room, registers the users and listens for messages' do
34
34
  expect(Campfire::Callback).to receive(:new).
35
- with(robot).
35
+ with(robot, room).
36
36
  and_return(callback = double('Callback'))
37
- expect(callback).to receive(:room_message).with(room)
38
37
 
39
38
  expect(room).to receive(:join)
39
+ expect(callback).to receive(:listen)
40
+ expect(callback).to receive(:register_users)
40
41
 
41
- subject.join_rooms [ double ]
42
+ subject.join_rooms
42
43
  end
43
44
  end
44
45
 
@@ -49,14 +50,12 @@ describe Campfire::Connector do
49
50
  end
50
51
 
51
52
  it 'raises an exception' do
52
- expect { subject.join_rooms [ double ] }.to raise_error(Campfire::RoomNotAvailable)
53
+ expect { subject.join_rooms }.to raise_error(Campfire::RoomNotAvailable)
53
54
  end
54
55
  end
55
56
  end
56
57
 
57
58
  describe '#send_messages' do
58
- let(:message) { "I'm gonna drink 'til I reboot." }
59
-
60
59
  let(:room) { double }
61
60
 
62
61
  before do
@@ -64,9 +63,36 @@ describe Campfire::Connector do
64
63
  subject.connect
65
64
  end
66
65
 
67
- it 'speaks each message into room' do
68
- expect(room).to receive(:speak).with(message)
69
- subject.send_messages double(id: 1), [ message ]
66
+ context 'with a one line message' do
67
+ let(:message) { "I'm gonna drink 'til I reboot." }
68
+
69
+ it 'speaks each message into room' do
70
+ expect(room).to receive(:speak).with(message)
71
+ subject.send_messages double(id: 1), [ message ]
72
+ end
73
+ end
74
+
75
+ context 'with a multi line message' do
76
+ let(:message) { "I'm gonna drink 'til I reboot.\nNow I'm too drunk" }
77
+
78
+ it 'pastes each message into room' do
79
+ expect(room).to receive(:paste).with(message)
80
+ subject.send_messages double(id: 1), [ message ]
81
+ end
82
+ end
83
+ end
84
+
85
+ describe '#disconnect' do
86
+ let(:room) { double('Room', id: 666) }
87
+
88
+ before do
89
+ allow(campfire).to receive(:find_room_by_id).and_return(room)
90
+ subject.connect
91
+ end
92
+
93
+ it "leaves joined rooms" do
94
+ expect(room).to receive(:leave)
95
+ subject.disconnect
70
96
  end
71
97
  end
72
- end
98
+ end
@@ -41,7 +41,7 @@ describe Lita::Adapters::Campfire do
41
41
  it 'join specified rooms' do
42
42
  rooms = ['room1', 'room2']
43
43
  Lita.config.adapter.rooms = rooms
44
- expect(subject.connector).to receive(:join_rooms).with(rooms)
44
+ expect(subject.connector).to receive(:join_rooms)
45
45
  subject.run
46
46
  end
47
47
 
@@ -85,4 +85,4 @@ describe Lita::Adapters::Campfire do
85
85
  subject.shut_down
86
86
  end
87
87
  end
88
- end
88
+ end
data/spec/spec_helper.rb CHANGED
@@ -4,7 +4,10 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
4
4
  SimpleCov::Formatter::HTMLFormatter,
5
5
  Coveralls::SimpleCov::Formatter
6
6
  ]
7
- SimpleCov.start { add_filter "/spec/" }
7
+ SimpleCov.start do
8
+ add_filter "/spec/"
9
+ add_filter 'vendor' # Don't include vendored stuff
10
+ end
8
11
 
9
12
  require "lita-campfire"
10
13
  require "lita/rspec"
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-campfire
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jose Luis Salas
8
+ - Zac Stewart
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-08-24 00:00:00.000000000 Z
12
+ date: 2013-12-08 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: lita
@@ -16,14 +17,14 @@ dependencies:
16
17
  requirements:
17
18
  - - ~>
18
19
  - !ruby/object:Gem::Version
19
- version: '2.0'
20
+ version: 2.6.0
20
21
  type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
25
  - - ~>
25
26
  - !ruby/object:Gem::Version
26
- version: '2.0'
27
+ version: 2.6.0
27
28
  - !ruby/object:Gem::Dependency
28
29
  name: tinder
29
30
  requirement: !ruby/object:Gem::Requirement
@@ -111,6 +112,7 @@ dependencies:
111
112
  description: A Campfire adapter for Lita.
112
113
  email:
113
114
  - josacar@gmail.com
115
+ - zgstewart@gmail.com
114
116
  executables: []
115
117
  extensions: []
116
118
  extra_rdoc_files: []
@@ -151,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
153
  version: '0'
152
154
  requirements: []
153
155
  rubyforge_project:
154
- rubygems_version: 2.0.3
156
+ rubygems_version: 2.0.14
155
157
  signing_key:
156
158
  specification_version: 4
157
159
  summary: A Campfire adapter for the Lita chat robot.