lita-campfire 0.1 → 0.1.2

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