lita-campfire 0.1.3 → 0.1.4

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: f3d87d9a72b0fb2b3a0946d8726e5d7d203af62c
4
- data.tar.gz: 08132be5b307927c3be6dfcbecde8557de5815c9
3
+ metadata.gz: 711b381aa5f58bc007ea46b6e7dca13f856fe4ad
4
+ data.tar.gz: 503b935c87bc152db95400c2c52aa2629d640334
5
5
  SHA512:
6
- metadata.gz: a16ec0f3f7408fdb2ef4fc292ed7dcff1fa4cb62570f7d1ec8377925ef4824d65197fb509c3601ac4158b51b0bebb886f43bfceccd1a01448736147968191de1
7
- data.tar.gz: a0336c226895101714e01cb3162877c60b7dad05b53f51e4cfa04a1160c44a9243f04b78b4881614259da89a8711b5582c08cc33220ddd379e5976bdae8f27c6
6
+ metadata.gz: a9c7cf1f3614b76e0487aeded9bfc31a5d89d624d28b2e8b5da90074a519e637d2c4886c933432b1edbb648a9f1246f43c55767030c10c3c4b6e7a7f6782d53b
7
+ data.tar.gz: 89750d635765c465bb5d871c27951e40e16852d629a3d325d4b6d343798fd66af5a2c1937fcbaa7e61635e04e46d8dece6b4f782da4b9e8c9b095977132fd7c1
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lita-campfire (0.1.3)
4
+ lita-campfire (0.1.4)
5
5
  lita (~> 2.7.0)
6
6
  tinder (~> 1.9.0)
7
7
 
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # Campfire adapter for Lita
2
2
 
3
- ## Continuous Integration
4
-
3
+ [![Gem Version](https://badge.fury.io/rb/lita-campfire.png)](http://badge.fury.io/rb/lita-campfire)
5
4
  [![Build Status](https://secure.travis-ci.org/josacar/lita-campfire.png)](http://travis-ci.org/josacar/lita-campfire)
6
5
  [![Coverage Status](https://coveralls.io/repos/josacar/lita-campfire/badge.png)](https://coveralls.io/r/josacar/lita-campfire)
7
6
  [![Code Climate](https://codeclimate.com/github/josacar/lita-campfire.png)](https://codeclimate.com/github/josacar/lita-campfire)
@@ -36,6 +35,7 @@ Values needed to work like apikey can be found on 'My info' link when logged, su
36
35
  ### Optional attributes
37
36
 
38
37
  * `debug` (Boolean) - If `true`, turns on the underlying Campfire library's (tinder) logger, which is fairly verbose. Default: `false`.
38
+ * `tinder_options` (Hash) - If set passes the options to tinder listen method when called
39
39
 
40
40
  **Note** You must set also `config.robot.name` and `config.robot.mention_name` to work.
41
41
 
@@ -59,6 +59,7 @@ Lita.configure do |config|
59
59
  config.adapter.apikey = ENV["CAMPFIRE_APIKEY"]
60
60
  config.adapter.rooms = ENV["CAMPFIRE_ROOMS"].split(',')
61
61
  config.adapter.debug = false
62
+ config.adapter.tinder_options = { timeout: 30, user_agent: 'lita-campfire' }
62
63
 
63
64
  config.redis.url = ENV["REDISTOGO_URL"]
64
65
  config.http.port = ENV["PORT"]
@@ -2,18 +2,24 @@ module Lita
2
2
  module Adapters
3
3
  class Campfire < Adapter
4
4
  require_configs :subdomain, :apikey, :rooms
5
+ OPTIONAL_CONFIG_OPTIONS = %i(debug tinder_options)
5
6
 
6
7
  attr_reader :connector
7
8
 
8
9
  def initialize(robot)
9
10
  super
10
11
 
11
- @connector = Connector.new(
12
- robot,
12
+ options = {
13
13
  subdomain: config.subdomain,
14
14
  apikey: config.apikey,
15
15
  rooms: rooms,
16
- debug: config.debug
16
+ }
17
+
18
+ options.merge!(optional_config_options)
19
+
20
+ @connector = Connector.new(
21
+ robot,
22
+ options
17
23
  )
18
24
  end
19
25
 
@@ -50,6 +56,13 @@ module Lita
50
56
  def disconnect
51
57
  connector.disconnect
52
58
  end
59
+
60
+ def optional_config_options
61
+ OPTIONAL_CONFIG_OPTIONS.each_with_object({}) do |config_option, options|
62
+ config_option_value = config.public_send(config_option)
63
+ options[config_option] = config_option_value if config_option_value
64
+ end
65
+ end
53
66
  end
54
67
 
55
68
  Lita.register_adapter(:campfire, Campfire)
@@ -14,8 +14,8 @@ module Lita
14
14
  end
15
15
  end
16
16
 
17
- def listen
18
- @room.listen do |event|
17
+ def listen(options={})
18
+ @room.listen(options) do |event|
19
19
  receive event
20
20
  end
21
21
  end
@@ -74,7 +74,7 @@ module Lita
74
74
  def _receive(event)
75
75
  text = event.body
76
76
  user = @callback.create_user(event.user)
77
- source = Source.new(user, event.room_id.to_s)
77
+ source = Source.new(user: user, room: event.room_id.to_s)
78
78
  message = Message.new(@robot, text, source)
79
79
  @robot.receive message
80
80
  end
@@ -94,4 +94,4 @@ module Lita
94
94
  end
95
95
  end
96
96
  end
97
- end
97
+ end
@@ -3,24 +3,33 @@ module Lita
3
3
  class Campfire < Adapter
4
4
  class Connector
5
5
  def initialize(robot, opts)
6
- @robot = robot
7
- @subdomain = opts.fetch(:subdomain)
8
- @apikey = opts.fetch(:apikey)
9
- @rooms = opts.fetch(:rooms)
10
- @debug = opts.fetch(:debug) { false }
6
+ @robot = robot
7
+ @subdomain = opts.fetch(:subdomain)
8
+ @apikey = opts.fetch(:apikey)
9
+ @rooms = opts.fetch(:rooms)
10
+ @debug = opts.fetch(:debug) { false }
11
+ @tinder_options = opts.fetch(:tinder_options) { Hash.new }
11
12
  end
12
13
 
13
14
  def connect
14
15
  @campfire = Tinder::Campfire.new(@subdomain, token: @apikey)
15
16
  end
16
17
 
18
+ def disconnect
19
+ Lita.logger.info("Disconnecting from Campfire.")
20
+ rooms.each do |room_id|
21
+ room = fetch_room(room_id)
22
+ room.leave
23
+ end
24
+ end
25
+
17
26
  def join_rooms
18
27
  rooms.each do |room_id|
19
28
  room = fetch_room(room_id)
20
29
  room.join
21
30
  callback = Callback.new(@robot, room)
22
31
  callback.register_users
23
- callback.listen
32
+ callback.listen(@tinder_options)
24
33
  end
25
34
  end
26
35
 
@@ -36,12 +45,8 @@ module Lita
36
45
  end
37
46
  end
38
47
 
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
48
+ def set_topic(room_id, topic)
49
+ fetch_room(room_id).topic = topic
45
50
  end
46
51
 
47
52
  private
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-campfire"
3
- spec.version = "0.1.3"
3
+ spec.version = "0.1.4"
4
4
  spec.authors = ["Jose Luis Salas", "Zac Stewart"]
5
5
  spec.email = ["josacar@gmail.com", "zgstewart@gmail.com"]
6
6
  spec.description = %q{A Campfire adapter for Lita.}
@@ -3,19 +3,19 @@ require 'spec_helper'
3
3
  describe Campfire::Callback do
4
4
 
5
5
  class DummyRoom < Struct.new(:id, :message, :users)
6
- def listen
6
+ def listen(options={})
7
7
  yield message
8
8
  end
9
9
  end
10
10
 
11
- let(:event) { double('Event') }
11
+ let(:event) { instance_double('Event') }
12
12
  let(:campfire_user) { { id: 1, name: 'Bender Bending Rodriguez' } }
13
- let(:message) { double('Message') }
14
- let(:robot) { double('Robot', mention_name: 'Robot') }
13
+ let(:message) { instance_double(Lita::Message) }
14
+ let(:robot) { instance_double(Lita::Robot, mention_name: 'Robot') }
15
15
  let(:room) { DummyRoom.new(1, event, users) }
16
- let(:source) { double('Source') }
16
+ let(:source) { instance_double(Lita::Source) }
17
17
  let(:text) { "Yes it's the apocalypse alright. I always though is have a hand in it." }
18
- let(:user) { double('User') }
18
+ let(:user) { instance_double(Lita::User) }
19
19
  let(:users) { [ {id: 2, name: 'Bender'}, {id: 3, name: 'Washbucket'} ] }
20
20
 
21
21
  subject { described_class.new(robot, room) }
@@ -27,7 +27,7 @@ describe Campfire::Callback do
27
27
  %w( TextMessage PasteMessage ).each do |message_type|
28
28
  describe "with a #{message_type}" do
29
29
  let(:event) do
30
- double('Event',
30
+ instance_double('Event',
31
31
  type: message_type,
32
32
  body: text,
33
33
  user: campfire_user,
@@ -36,7 +36,7 @@ describe Campfire::Callback do
36
36
 
37
37
  it 'passes the message to Robot#receive' do
38
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)
39
+ expect(Lita::Source).to receive(:new).with(user: user, room: '1').and_return(source)
40
40
  expect(Lita::Message).to receive(:new).with(robot, text, source).and_return(message)
41
41
  expect(robot).to receive(:receive).with(message)
42
42
  subject.listen
@@ -45,7 +45,7 @@ describe Campfire::Callback do
45
45
  end
46
46
 
47
47
  describe 'EnterMessage' do
48
- let(:event) { double('Event', type: 'EnterMessage', user: campfire_user) }
48
+ let(:event) { instance_double('Event', type: 'EnterMessage', user: campfire_user) }
49
49
 
50
50
  it 'creates a user' do
51
51
  expect(Lita::User).to receive(:create).with(1, name: 'Bender Bending Rodriguez').and_return(user)
@@ -53,6 +53,15 @@ describe Campfire::Callback do
53
53
  end
54
54
  end
55
55
 
56
+ describe 'when options are set in connector' do
57
+ let(:room) { double(:room) }
58
+ it 'passes options to underlying tinder' do
59
+ tinder_options = { timeout: 30 }
60
+
61
+ expect(room).to receive(:listen).with(tinder_options)
62
+ subject.listen(tinder_options)
63
+ end
64
+ end
56
65
  end
57
66
 
58
67
  describe '#register_users' do
@@ -66,4 +75,4 @@ describe Campfire::Callback do
66
75
  end
67
76
  end
68
77
 
69
- end
78
+ end
@@ -1,17 +1,19 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Campfire::Connector do
4
- let(:robot) { double }
4
+ let(:robot) { instance_double(Lita::Robot) }
5
5
  let(:subdomain) { 'mycampfire' }
6
6
  let(:apikey) { '2e9f45bb934c0fa13e9f19ee0901c316fda9fc1' }
7
7
  let(:rooms) { %w( 12345 ) }
8
8
  let(:options) { { subdomain: subdomain, apikey: apikey, rooms: rooms } }
9
- let(:campfire) { double }
9
+ let(:campfire) { instance_double(Tinder::Campfire) }
10
+ let(:room) { instance_double(Tinder::Room) }
10
11
 
11
12
  subject { described_class.new(robot, options) }
12
13
 
13
14
  before do
14
15
  allow(Tinder::Campfire).to receive(:new).and_return(campfire)
16
+ allow(campfire).to receive(:find_room_by_id).and_return(room)
15
17
  end
16
18
 
17
19
  describe '#connect' do
@@ -21,78 +23,101 @@ describe Campfire::Connector do
21
23
  end
22
24
  end
23
25
 
24
- describe '#join_rooms' do
25
- describe 'when I have access to the room' do
26
- let(:room) { double('Room', id: 666) }
26
+ context 'when connected to campfire' do
27
+ before do
28
+ subject.connect
29
+ end
30
+ let(:callback) { instance_double(Campfire::Callback) }
27
31
 
28
- before do
29
- allow(campfire).to receive(:find_room_by_id).and_return(room)
30
- subject.connect
32
+ describe '#disconnect' do
33
+
34
+ it "leaves joined rooms" do
35
+ expect(room).to receive(:leave)
36
+ subject.disconnect
31
37
  end
38
+ end
32
39
 
33
- it 'joins each room, registers the users and listens for messages' do
34
- expect(Campfire::Callback).to receive(:new).
35
- with(robot, room).
36
- and_return(callback = double('Callback'))
40
+ describe 'when tinder options are set' do
41
+ let(:tinder_options) { { timeout: 30 } }
42
+ let(:options) do
43
+ {
44
+ subdomain: subdomain,
45
+ apikey: apikey,
46
+ rooms: rooms,
47
+ tinder_options: tinder_options
48
+ }
49
+ end
37
50
 
38
- expect(room).to receive(:join)
39
- expect(callback).to receive(:listen)
40
- expect(callback).to receive(:register_users)
51
+ it 'passes options to underlying tinder lib' do
52
+ allow(campfire).to receive(:find_room_by_id).and_return(room)
53
+ subject.connect
54
+ allow(Campfire::Callback).to receive(:new).and_return(callback)
41
55
 
56
+ allow(room).to receive(:join)
57
+ allow(callback).to receive(:register_users)
58
+ expect(callback).to receive(:listen).with(tinder_options)
42
59
  subject.join_rooms
43
60
  end
44
61
  end
45
62
 
46
- describe "when I don't have access to the room" do
47
- before do
48
- allow(campfire).to receive(:find_room_by_id).and_return(nil)
49
- subject.connect
50
- end
63
+ describe '#join_rooms' do
64
+ describe 'when I have access to the room' do
65
+ it 'joins each room, registers the users and listens for messages' do
66
+ expect(Campfire::Callback).to receive(:new).
67
+ with(robot, room).
68
+ and_return(callback)
51
69
 
52
- it 'raises an exception' do
53
- expect { subject.join_rooms }.to raise_error(Campfire::RoomNotAvailable)
70
+ expect(room).to receive(:join)
71
+ expect(callback).to receive(:listen)
72
+ expect(callback).to receive(:register_users)
73
+
74
+ subject.join_rooms
75
+ end
54
76
  end
55
- end
56
- end
57
77
 
58
- describe '#send_messages' do
59
- let(:room) { double }
78
+ describe "when I don't have access to the room" do
79
+ before do
80
+ allow(campfire).to receive(:find_room_by_id).and_return(nil)
81
+ end
60
82
 
61
- before do
62
- allow(campfire).to receive(:find_room_by_id).and_return(room)
63
- subject.connect
83
+ it 'raises an exception' do
84
+ expect { subject.join_rooms }.to raise_error(Campfire::RoomNotAvailable)
85
+ end
86
+ end
64
87
  end
65
88
 
66
- context 'with a one line message' do
67
- let(:message) { "I'm gonna drink 'til I reboot." }
89
+ describe '#send_messages' do
90
+ context 'with a one line message' do
91
+ let(:message) { "I'm gonna drink 'til I reboot." }
68
92
 
69
- it 'speaks each message into room' do
70
- expect(room).to receive(:speak).with(message)
71
- subject.send_messages double(id: 1), [ message ]
93
+ it 'speaks each message into room' do
94
+ expect(room).to receive(:speak).with(message)
95
+ subject.send_messages room, [ message ]
96
+ end
72
97
  end
73
- end
74
98
 
75
- context 'with a multi line message' do
76
- let(:message) { "I'm gonna drink 'til I reboot.\nNow I'm too drunk" }
99
+ context 'with a multi line message' do
100
+ let(:message) { "I'm gonna drink 'til I reboot.\nNow I'm too drunk" }
77
101
 
78
- it 'pastes each message into room' do
79
- expect(room).to receive(:paste).with(message)
80
- subject.send_messages double(id: 1), [ message ]
102
+ it 'pastes each message into room' do
103
+ expect(room).to receive(:paste).with(message)
104
+ subject.send_messages room, [ message ]
105
+ end
81
106
  end
82
107
  end
83
- end
84
108
 
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
109
+ describe '#set_topic' do
110
+ before do
111
+ allow(Lita.logger).to receive(:info)
112
+ allow(campfire).to receive(:find_room_by_id).and_return(room)
113
+ subject.connect
114
+ end
115
+ let(:topic) { 'Let it be wadus' }
92
116
 
93
- it "leaves joined rooms" do
94
- expect(room).to receive(:leave)
95
- subject.disconnect
117
+ it 'sets toom topic' do
118
+ expect(room).to receive(:topic=).with(topic)
119
+ subject.set_topic(room, topic)
120
+ end
96
121
  end
97
122
  end
98
123
  end
@@ -13,8 +13,8 @@ describe Lita::Adapters::Campfire do
13
13
 
14
14
  subject { described_class.new(robot) }
15
15
 
16
- let(:robot) { double("Lita::Robot") }
17
- let(:connector) { double("Lita::Adapters::Campfire::Connector") }
16
+ let(:robot) { instance_double(Lita::Robot) }
17
+ let(:connector) { instance_double(Lita::Adapters::Campfire::Connector) }
18
18
 
19
19
  it "registers with Lita" do
20
20
  expect(Lita.adapters[:campfire]).to eql(described_class)
@@ -26,6 +26,26 @@ describe Lita::Adapters::Campfire do
26
26
  expect { subject }.to raise_error(SystemExit)
27
27
  end
28
28
 
29
+ context 'passing optional variables' do
30
+ optional_config = described_class::OPTIONAL_CONFIG_OPTIONS
31
+ optional_config.each do |option|
32
+ it "does not set #{option} hash value if option is not set" do
33
+ expect(described_class::Connector).not_to receive(:new).with(robot, hash_including(option.to_sym))
34
+ subject
35
+ end
36
+ end
37
+
38
+ it 'can receive hash with tinder options' do
39
+ tinder_options = { timeout: 30, auto_reconnect: false }
40
+ Lita.configure do |config|
41
+ config.adapter.tinder_options = tinder_options
42
+ end
43
+
44
+ expect(described_class::Connector).to receive(:new).with(robot, hash_including(:tinder_options => tinder_options))
45
+ subject
46
+ end
47
+ end
48
+
29
49
  describe '#run' do
30
50
  before do
31
51
  allow(subject.connector).to receive(:connect)
@@ -59,7 +79,7 @@ describe Lita::Adapters::Campfire do
59
79
 
60
80
  describe '#send_messages' do
61
81
  it 'sends messages to rooms' do
62
- source = double("Lita::Source", room: "room_id")
82
+ source = instance_double(Lita::Source, room: "room_id")
63
83
  expect(subject.connector).to receive(:send_messages).with(
64
84
  'room_id',
65
85
  ["Hello!"]
@@ -70,7 +90,7 @@ describe Lita::Adapters::Campfire do
70
90
 
71
91
  describe "#set_topic" do
72
92
  it "sets a new topic for a room" do
73
- source = double("Lita::Source", room: "room_id")
93
+ source = instance_double(Lita::Source, room: "room_id")
74
94
  expect(subject.connector).to receive(:set_topic).with(
75
95
  "room_id",
76
96
  "Topic"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-campfire
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jose Luis Salas
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-03 00:00:00.000000000 Z
12
+ date: 2014-01-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: lita
@@ -163,4 +163,3 @@ test_files:
163
163
  - spec/lita/adapters/campfire/connector_spec.rb
164
164
  - spec/lita/adapters/campfire_spec.rb
165
165
  - spec/spec_helper.rb
166
- has_rdoc: