flamethrower 0.1.0 → 0.2.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.
- data/Gemfile +2 -1
- data/Gemfile.lock +10 -2
- data/README.rdoc +0 -2
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/bin/flamethrower +12 -7
- data/flamethrower.gemspec +78 -65
- data/lib/flamethrower.rb +2 -1
- data/lib/flamethrower/campfire/connection.rb +30 -16
- data/lib/flamethrower/campfire/message.rb +11 -1
- data/lib/flamethrower/campfire/rest_api.rb +19 -15
- data/lib/flamethrower/campfire/room.rb +85 -50
- data/lib/flamethrower/dispatcher.rb +11 -7
- data/lib/flamethrower/irc/codes.rb +2 -0
- data/lib/flamethrower/irc/commands.rb +17 -0
- data/lib/flamethrower/server.rb +6 -2
- data/lib/flamethrower/server/event_server.rb +23 -12
- data/spec/fixtures/paste_message.json +1 -1
- data/spec/spec_helper.rb +3 -2
- data/spec/unit/campfire/connection_spec.rb +35 -9
- data/spec/unit/campfire/message_spec.rb +5 -1
- data/spec/unit/campfire/room_spec.rb +69 -46
- data/spec/unit/dispatcher_spec.rb +32 -18
- data/spec/unit/irc/channel_spec.rb +7 -4
- data/spec/unit/server_spec.rb +30 -14
- metadata +81 -12
- data/.gitignore +0 -4
@@ -57,7 +57,7 @@ module Flamethrower
|
|
57
57
|
|
58
58
|
def handle_topic(message)
|
59
59
|
find_channel_or_error(message.parameters.first) do |channel|
|
60
|
-
channel.to_campfire.send_topic
|
60
|
+
channel.to_campfire.send_topic(message.parameters.last) if message.parameters.size > 1
|
61
61
|
server.send_topic(channel)
|
62
62
|
end
|
63
63
|
end
|
@@ -80,22 +80,26 @@ module Flamethrower
|
|
80
80
|
room = channel.to_campfire
|
81
81
|
channel.users << server.current_user
|
82
82
|
room.join
|
83
|
-
room.
|
84
|
-
|
85
|
-
|
86
|
-
|
83
|
+
room.start
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def handle_who(message)
|
88
|
+
find_channel_or_error(message.parameters.first) do |channel|
|
89
|
+
server.send_who(channel)
|
87
90
|
end
|
88
91
|
end
|
89
92
|
|
90
93
|
def handle_part(message)
|
91
94
|
find_channel_or_error(message.parameters.first) do |channel|
|
92
95
|
room = channel.to_campfire
|
93
|
-
room.
|
96
|
+
room.stop
|
97
|
+
server.send_part(server.current_user, channel)
|
94
98
|
end
|
95
99
|
end
|
96
100
|
|
97
101
|
def handle_quit(message)
|
98
|
-
server.irc_channels.each {|c| c.to_campfire.
|
102
|
+
server.irc_channels.each {|c| c.to_campfire.stop}
|
99
103
|
end
|
100
104
|
end
|
101
105
|
end
|
@@ -33,6 +33,19 @@ module Flamethrower
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
+
def send_rename(from, to)
|
37
|
+
send_message ":#{from} NICK #{to}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def send_who(channel)
|
41
|
+
send_messages do |messages|
|
42
|
+
channel.users.each do |user|
|
43
|
+
messages << reply(RPL_WHOREPLY, "#{channel.name} #{user.nickname} #{user.hostname} localhost #{user.nickname} H :0 #{user.nickname}")
|
44
|
+
end
|
45
|
+
messages << reply(RPL_ENDOFWHO, "#{channel.name} :/End of /WHO list")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
36
49
|
def send_channel_mode(channel)
|
37
50
|
send_message reply(RPL_CHANNELMODEIS, "#{channel.name} #{channel.mode}")
|
38
51
|
end
|
@@ -45,6 +58,10 @@ module Flamethrower
|
|
45
58
|
send_message reply(RPL_UMODEIS, @current_user.mode)
|
46
59
|
end
|
47
60
|
|
61
|
+
def send_part(user, channel)
|
62
|
+
send_message ":#{user.to_s} PART #{channel.name}"
|
63
|
+
end
|
64
|
+
|
48
65
|
def reply(code, message)
|
49
66
|
":#{@current_user.hostname} #{code} #{@current_user.nickname} #{message}"
|
50
67
|
end
|
data/lib/flamethrower/server.rb
CHANGED
@@ -13,7 +13,7 @@ module Flamethrower
|
|
13
13
|
def after_connect
|
14
14
|
send_motd
|
15
15
|
populate_irc_channels
|
16
|
-
|
16
|
+
populate_my_user
|
17
17
|
end
|
18
18
|
|
19
19
|
def send_message(msg)
|
@@ -36,7 +36,11 @@ module Flamethrower
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def populate_irc_channels
|
39
|
-
|
39
|
+
campfire_connection.fetch_rooms
|
40
|
+
end
|
41
|
+
|
42
|
+
def populate_my_user
|
43
|
+
campfire_connection.fetch_my_user
|
40
44
|
end
|
41
45
|
|
42
46
|
end
|
@@ -7,6 +7,18 @@ module Flamethrower
|
|
7
7
|
def unbind
|
8
8
|
@server.connections.delete(self)
|
9
9
|
end
|
10
|
+
|
11
|
+
def stop
|
12
|
+
irc_channels.map do |channel|
|
13
|
+
channel.to_campfire.stop
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def streams_alive?
|
18
|
+
irc_channels.any? do |channel|
|
19
|
+
channel.to_campfire.alive?
|
20
|
+
end
|
21
|
+
end
|
10
22
|
end
|
11
23
|
|
12
24
|
class EventServer
|
@@ -34,34 +46,33 @@ module Flamethrower
|
|
34
46
|
def stop
|
35
47
|
FLAMETHROWER_LOGGER.info("Killing room threads")
|
36
48
|
@connections.each do |connection|
|
37
|
-
connection.
|
38
|
-
|
39
|
-
end
|
49
|
+
connection.stop
|
50
|
+
connection.close_connection
|
40
51
|
end
|
41
52
|
EventMachine.stop_server(@signature)
|
42
|
-
die_safely
|
53
|
+
EventMachine.add_periodic_timer(0.2) { die_safely }
|
43
54
|
end
|
44
55
|
|
56
|
+
private
|
57
|
+
|
45
58
|
def die_safely
|
46
59
|
FLAMETHROWER_LOGGER.info("Waiting for streams and connections to die")
|
47
|
-
if
|
48
|
-
|
60
|
+
if any_streams_alive? || any_connections_alive?
|
61
|
+
return
|
49
62
|
else
|
50
63
|
FLAMETHROWER_LOGGER.info("Done.")
|
51
64
|
EventMachine.stop
|
52
65
|
end
|
53
66
|
end
|
54
67
|
|
55
|
-
def
|
68
|
+
def any_streams_alive?
|
56
69
|
@connections.any? do |connection|
|
57
|
-
connection.
|
58
|
-
channel.to_campfire.alive?
|
59
|
-
end
|
70
|
+
connection.streams_alive?
|
60
71
|
end
|
61
72
|
end
|
62
73
|
|
63
|
-
def
|
64
|
-
@connections.size
|
74
|
+
def any_connections_alive?
|
75
|
+
@connections.size > 0
|
65
76
|
end
|
66
77
|
end
|
67
78
|
end
|
@@ -1 +1 @@
|
|
1
|
-
{"room_id":73541,"created_at":"2010/12/14 20:48:30 +0000","body":"Line one
|
1
|
+
{"room_id":73541,"created_at":"2010/12/14 20:48:30 +0000","body":"Line one\n\tpoint one\n\tpoint two\npoint three","id":289383470,"user_id":703609,"type":"PasteMessage"}
|
data/spec/spec_helper.rb
CHANGED
@@ -2,11 +2,12 @@ $:.unshift File.join(File.dirname(__FILE__), "../lib")
|
|
2
2
|
|
3
3
|
require 'flamethrower'
|
4
4
|
require 'server/mock_server'
|
5
|
+
require 'webmock/rspec'
|
5
6
|
require 'json'
|
6
|
-
require 'fakeweb'
|
7
7
|
require 'time'
|
8
8
|
|
9
|
-
|
9
|
+
#::FLAMETHROWER_LOGGER = Logger.new("/dev/null") unless Object.const_defined?("FLAMETHROWER_LOGGER")
|
10
|
+
::FLAMETHROWER_LOGGER = Logger.new("/Users/blake/test.log") unless Object.const_defined?("FLAMETHROWER_LOGGER")
|
10
11
|
|
11
12
|
def json_fixture(name)
|
12
13
|
file = File.join(File.dirname(__FILE__), "fixtures/#{name}.json")
|
@@ -4,30 +4,56 @@ describe Flamethrower::Campfire::Connection do
|
|
4
4
|
before do
|
5
5
|
@server = Flamethrower::MockServer.new
|
6
6
|
@connection = @server.campfire_connection
|
7
|
-
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#fetch_my_user" do
|
10
|
+
it "retrieves my user and stores it on the connection" do
|
11
|
+
stub_request(:get, "https://mydomain.campfirenow.com/users/me.json").
|
12
|
+
with(:headers => {'Authorization'=>['mytoken', 'x']}).
|
13
|
+
to_return(:status => 200, :body => json_fixture("user"))
|
14
|
+
EM.run_block { @connection.fetch_my_user }
|
15
|
+
@server.current_user.nickname.should == "blake"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "renames your current user to the new current user" do
|
19
|
+
@server.current_user = Flamethrower::Irc::User.new(:nickname => "bob")
|
20
|
+
stub_request(:get, "https://mydomain.campfirenow.com/users/me.json").
|
21
|
+
with(:headers => {'Authorization'=>['mytoken', 'x']}).
|
22
|
+
to_return(:status => 200, :body => json_fixture("user"))
|
23
|
+
@server.should_receive(:send_message).with(":bob NICK blake")
|
24
|
+
EM.run_block { @connection.fetch_my_user }
|
25
|
+
end
|
8
26
|
end
|
9
27
|
|
10
28
|
describe "#rooms" do
|
11
29
|
it "retrieves a list of rooms from JSON" do
|
12
|
-
|
13
|
-
|
30
|
+
stub_request(:get, "https://mydomain.campfirenow.com/rooms.json").
|
31
|
+
with(:headers => {'Authorization'=>['mytoken', 'x']}).
|
32
|
+
to_return(:status => 200, :body => json_fixture("rooms"))
|
33
|
+
EM.run_block { @connection.fetch_rooms }
|
34
|
+
room = @server.irc_channels.first.to_campfire
|
14
35
|
room.number.should == 347348
|
15
36
|
room.name.should == "Room 1"
|
16
37
|
room.topic.should == "some topic"
|
17
38
|
end
|
18
39
|
|
19
40
|
it "makes the http request with a token in basic auth" do
|
20
|
-
|
21
|
-
|
22
|
-
|
41
|
+
stub_request(:get, "https://mydomain.campfirenow.com/rooms.json").
|
42
|
+
with(:headers => {'Authorization'=>['mytoken', 'x']}).
|
43
|
+
to_return(:status => 200, :body => json_fixture("rooms"))
|
44
|
+
EM.run_block { @connection.fetch_rooms }
|
45
|
+
assert_requested(:get, "https://mydomain.campfirenow.com/rooms.json") {|req| req.headers['Authorization'].should == ["mytoken", "x"]}
|
23
46
|
end
|
24
47
|
|
25
48
|
it "returns empty set if not a successful response" do
|
26
|
-
|
27
|
-
|
49
|
+
stub_request(:get, "https://mydomain.campfirenow.com/rooms.json").
|
50
|
+
with(:headers => {'Authorization'=>['mytoken', 'x']}).
|
51
|
+
to_return(:status => 400)
|
52
|
+
EM.run_block { @connection.fetch_rooms }
|
53
|
+
@server.irc_channels.should == []
|
28
54
|
end
|
29
55
|
|
30
|
-
|
56
|
+
xit "sends a motd error message if unable to fetch room list" do
|
31
57
|
@connection.should_receive(:campfire_get).and_raise(SocketError)
|
32
58
|
@server.should_receive(:send_message).with(@server.reply(Flamethrower::Irc::Codes::RPL_MOTD, ":ERROR: Unable to fetch room list! Check your connection?"))
|
33
59
|
@connection.rooms.should == []
|
@@ -67,7 +67,11 @@ describe Flamethrower::Campfire::Message do
|
|
67
67
|
message = Flamethrower::Campfire::Message.new(json)
|
68
68
|
message.user = @campfire_user
|
69
69
|
message.room = @room
|
70
|
-
|
70
|
+
expected = ":#{@irc_user.to_s} PRIVMSG #{@channel.name} :Line one\r\n"
|
71
|
+
expected << ":#{@irc_user.to_s} PRIVMSG #{@channel.name} :\tpoint one\r\n"
|
72
|
+
expected << ":#{@irc_user.to_s} PRIVMSG #{@channel.name} :\tpoint two\r\n"
|
73
|
+
expected << ":#{@irc_user.to_s} PRIVMSG #{@channel.name} :point three"
|
74
|
+
message.to_irc.to_s.should == expected
|
71
75
|
end
|
72
76
|
end
|
73
77
|
|
@@ -2,7 +2,9 @@ require File.join(File.dirname(__FILE__), "../../spec_helper")
|
|
2
2
|
|
3
3
|
describe Flamethrower::Campfire::Room do
|
4
4
|
before do
|
5
|
+
@server = Flamethrower::MockServer.new
|
5
6
|
@room = Flamethrower::Campfire::Room.new("mydomain", "mytoken", "id" => 347348, "topic" => "some topic", "name" => "some name")
|
7
|
+
@room.server = @server
|
6
8
|
@user = Flamethrower::Campfire::User.new('name' => "bob", 'id' => 489198)
|
7
9
|
@user2 = Flamethrower::Campfire::User.new('name' => "bill", 'id' => 123456)
|
8
10
|
end
|
@@ -30,64 +32,82 @@ describe Flamethrower::Campfire::Room do
|
|
30
32
|
|
31
33
|
describe "#send_topic!" do
|
32
34
|
it "sets the topic when the campfire API returns 200" do
|
33
|
-
|
34
|
-
|
35
|
+
stub_request(:put, "https://mydomain.campfirenow.com/room/347348.json").
|
36
|
+
with(:headers => {'Authorization'=>['mytoken', 'x'], 'Content-Type'=>'application/json'}).
|
37
|
+
to_return(:status => 200, :body => json_fixture("room_update"))
|
38
|
+
EM.run_block { @room.send_topic("some updated topic") }
|
35
39
|
@room.topic.should == "some updated topic"
|
36
40
|
end
|
37
41
|
|
38
42
|
it "keeps the previous topic when the campfire API returns non 200" do
|
39
|
-
|
43
|
+
stub_request(:put, "https://mydomain.campfirenow.com/room/347348.json").
|
44
|
+
with(:headers => {'Authorization'=>['mytoken', 'x'], 'Content-Type'=>'application/json'}).
|
45
|
+
to_return(:status => 400, :body => json_fixture("room_update"))
|
40
46
|
@room.instance_variable_set("@topic", "some old topic")
|
41
|
-
@room.send_topic
|
47
|
+
EM.run_block { @room.send_topic("some updated topic") }
|
42
48
|
@room.topic.should == "some old topic"
|
43
49
|
end
|
44
50
|
end
|
45
51
|
|
46
52
|
describe "#fetch_room_info" do
|
47
53
|
before do
|
48
|
-
|
54
|
+
stub_request(:get, "https://mydomain.campfirenow.com/room/347348.json").
|
55
|
+
with(:headers => {'Authorization'=>['mytoken', 'x']}).
|
56
|
+
to_return(:status => 200, :body => json_fixture("room"))
|
49
57
|
end
|
50
58
|
|
51
59
|
it "retrieves a list of users and stores them as user objects" do
|
52
|
-
@room.fetch_room_info
|
60
|
+
EM.run_block { @room.fetch_room_info }
|
53
61
|
@room.users.all? {|u| u.is_a?(Flamethrower::Campfire::User)}.should be_true
|
54
62
|
end
|
55
63
|
|
64
|
+
it "doesn't send the room join info if the room has already been joined" do
|
65
|
+
@room.instance_variable_set("@room_info_sent", true)
|
66
|
+
@room.should_not_receive(:send_info)
|
67
|
+
EM.run_block { @room.fetch_room_info }
|
68
|
+
end
|
69
|
+
|
56
70
|
it "makes the http request with a token in basic auth" do
|
57
|
-
@room.fetch_room_info
|
58
|
-
|
71
|
+
EM.run_block { @room.fetch_room_info }
|
72
|
+
assert_requested(:get, "https://mydomain.campfirenow.com/room/347348.json") {|req| req.headers['Authorization'].should == ["mytoken", "x"]}
|
59
73
|
end
|
60
74
|
end
|
61
75
|
|
62
76
|
describe "#fetch_users" do
|
63
77
|
it "makes a call to the campfire api to fetch user information" do
|
64
|
-
|
78
|
+
stub_request(:get, "https://mydomain.campfirenow.com/users/734581.json").
|
79
|
+
with(:headers => {'Authorization'=>['mytoken', 'x']}).
|
80
|
+
to_return(:status => 200, :body => json_fixture("user"))
|
65
81
|
@room.instance_variable_get("@users_to_fetch") << Flamethrower::Campfire::Message.new(JSON.parse(json_fixture("enter_message")))
|
66
|
-
@room.fetch_users
|
82
|
+
EM.run_block { @room.fetch_users }
|
67
83
|
@room.users.map(&:name).should == ["blake"]
|
68
84
|
end
|
69
85
|
|
70
86
|
it "fetches using the 'user_id' field if a streaming message" do
|
71
|
-
|
87
|
+
stub_request(:get, "https://mytoken:x@mydomain.campfirenow.com/users/734581.json").to_return(:body => json_fixture("user"), :status => 200)
|
72
88
|
@room.instance_variable_get("@users_to_fetch") << Flamethrower::Campfire::Message.new(JSON.parse(json_fixture("enter_message")))
|
73
|
-
@room.should_receive(:campfire_get).with("/users/734581.json")
|
74
|
-
@room.fetch_users
|
89
|
+
@room.should_receive(:campfire_get).with("/users/734581.json").and_return(mock(:post, :callback => nil))
|
90
|
+
EM.run_block { @room.fetch_users }
|
75
91
|
end
|
76
92
|
|
77
93
|
context "successfully get user info" do
|
78
94
|
it "enqueues an EnterMessage into @inbound_messages for displaying in irc" do
|
79
|
-
|
95
|
+
stub_request(:get, "https://mydomain.campfirenow.com/users/734581.json").
|
96
|
+
with(:headers => {'Authorization'=>['mytoken', 'x']}).
|
97
|
+
to_return(:status => 200, :body => json_fixture("user"))
|
80
98
|
@room.instance_variable_get("@users_to_fetch") << Flamethrower::Campfire::Message.new(JSON.parse(json_fixture("enter_message")))
|
81
|
-
@room.fetch_users
|
99
|
+
EM.run_block { @room.fetch_users }
|
82
100
|
message = @room.inbound_messages.pop.user.number.should == 734581
|
83
101
|
end
|
84
102
|
end
|
85
103
|
|
86
104
|
context "fails to get user info" do
|
87
105
|
it "doesn't enqueue an EnterMessage" do
|
88
|
-
|
106
|
+
stub_request(:get, "https://mydomain.campfirenow.com/users/734581.json").
|
107
|
+
with(:headers => {'Authorization'=>['mytoken', 'x']}).
|
108
|
+
to_return(:status => 400, :body => json_fixture("user"))
|
89
109
|
@room.instance_variable_get("@users_to_fetch") << Flamethrower::Campfire::Message.new(JSON.parse(json_fixture("enter_message")))
|
90
|
-
@room.fetch_users
|
110
|
+
EM.run_block { @room.fetch_users }
|
91
111
|
message = @room.inbound_messages.size.should == 0
|
92
112
|
end
|
93
113
|
end
|
@@ -95,13 +115,19 @@ describe Flamethrower::Campfire::Room do
|
|
95
115
|
|
96
116
|
describe "#join" do
|
97
117
|
it "returns true when posting to the room join call succeeds" do
|
98
|
-
|
99
|
-
|
118
|
+
stub_request(:post, "https://mydomain.campfirenow.com/room/347348/join.json").
|
119
|
+
with(:headers => {'Authorization'=>['mytoken', 'x'], 'Content-Type'=>'application/json'}).
|
120
|
+
to_return(:status => 200)
|
121
|
+
EM.run_block { @room.join }
|
122
|
+
@room.joined.should be_true
|
100
123
|
end
|
101
124
|
|
102
125
|
it "returns false when posting to the room join call fails" do
|
103
|
-
|
104
|
-
|
126
|
+
stub_request(:post, "https://mydomain.campfirenow.com/room/347348/join.json").
|
127
|
+
with(:headers => {'Authorization'=>['mytoken', 'x'], 'Content-Type'=>'application/json'}).
|
128
|
+
to_return(:status => 400)
|
129
|
+
EM.run_block { @room.join }
|
130
|
+
@room.joined.should be_false
|
105
131
|
end
|
106
132
|
end
|
107
133
|
|
@@ -199,59 +225,56 @@ describe Flamethrower::Campfire::Room do
|
|
199
225
|
|
200
226
|
describe "#post_messages" do
|
201
227
|
it "pops the message off the queue and posts it to the campfire api" do
|
202
|
-
|
228
|
+
stub_request(:post, "https://mydomain.campfirenow.com/room/347348/speak.json").
|
229
|
+
with(:headers => {'Authorization'=>['mytoken', 'x'], 'Content-Type'=>'application/json'}).
|
230
|
+
to_return(:status => 200, :body => json_fixture("speak_message"))
|
203
231
|
message = Flamethrower::Campfire::Message.new('type' => 'TextMessage', 'body' => 'Hello there', 'user' => @user, 'room' => @room)
|
204
232
|
@room.outbound_messages << message
|
205
|
-
@room.post_messages
|
233
|
+
EM.run_block { @room.post_messages }
|
206
234
|
@room.outbound_messages.size.should == 0
|
207
235
|
end
|
208
236
|
|
209
237
|
it "adds the message to the failed_messages array if it fails to post to the campfire API" do
|
210
|
-
|
238
|
+
stub_request(:post, "https://mydomain.campfirenow.com/room/347348/speak.json").
|
239
|
+
with(:headers => {'Authorization'=>['mytoken', 'x'], 'Content-Type'=>'application/json'}).
|
240
|
+
to_return(:status => 400, :body => json_fixture("speak_message"))
|
241
|
+
|
211
242
|
message = Flamethrower::Campfire::Message.new('type' => 'TextMessage', 'body' => 'Hello there', 'user' => @user, 'room' => @room)
|
212
243
|
@room.outbound_messages << message
|
213
|
-
@room.post_messages
|
244
|
+
EM.run_block { @room.post_messages }
|
214
245
|
@room.outbound_messages.size.should == 0
|
215
246
|
@room.failed_messages.size.should == 1
|
216
247
|
end
|
217
248
|
|
218
249
|
it "marks the message as failed when not able to deliver" do
|
219
|
-
|
250
|
+
stub_request(:post, "https://mydomain.campfirenow.com/room/347348/speak.json").
|
251
|
+
with(:headers => {'Authorization'=>['mytoken', 'x'], 'Content-Type'=>'application/json'}).
|
252
|
+
to_return(:status => 400, :body => json_fixture("speak_message"))
|
253
|
+
|
220
254
|
message = Flamethrower::Campfire::Message.new('type' => 'TextMessage', 'body' => 'Hello there', 'user' => @user, 'room' => @room)
|
221
255
|
@room.outbound_messages << message
|
222
|
-
@room.post_messages
|
256
|
+
EM.run_block { @room.post_messages }
|
223
257
|
message.status.should == "failed"
|
224
258
|
end
|
225
259
|
|
226
260
|
it "marks the message as delivered if successfully posted to campfire" do
|
227
|
-
|
261
|
+
stub_request(:post, "https://mydomain.campfirenow.com/room/347348/speak.json").
|
262
|
+
with(:headers => {'Authorization'=>['mytoken', 'x'], 'Content-Type'=>'application/json'}).
|
263
|
+
to_return(:status => 201, :body => json_fixture("speak_message"))
|
264
|
+
|
228
265
|
message = Flamethrower::Campfire::Message.new('type' => 'TextMessage', 'body' => 'Hello there', 'user' => @user, 'room' => @room)
|
229
266
|
@room.outbound_messages << message
|
230
|
-
@room.post_messages
|
267
|
+
EM.run_block { @room.post_messages }
|
231
268
|
message.status.should == "delivered"
|
232
269
|
end
|
233
270
|
|
234
271
|
it "sends the right json" do
|
235
|
-
|
272
|
+
stub_request(:post, "https://mytoken:x@mydomain.campfirenow.com/room/347348/speak.json").to_return(:body => json_fixture("speak_message"), :status => 201)
|
236
273
|
message = Flamethrower::Campfire::Message.new('type' => 'TextMessage', 'body' => 'Hello there', 'user' => @user, 'room' => @room)
|
237
274
|
@room.outbound_messages << message
|
238
275
|
expected_json = {"message"=>{"body"=>"Hello there", "type"=>"TextMessage"}}.to_json
|
239
|
-
@room.should_receive(:campfire_post).with("/room/#{@room.number}/speak.json", expected_json)
|
240
|
-
@room.post_messages
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
|
-
describe "#retrieve_messages" do
|
245
|
-
it "returns all the messages in the message buffer" do
|
246
|
-
@room.inbound_messages << "one"
|
247
|
-
@room.inbound_messages << "two"
|
248
|
-
@room.retrieve_messages.should == ["one", "two"]
|
249
|
-
end
|
250
|
-
|
251
|
-
it "pops the messages from the messages array" do
|
252
|
-
@room.inbound_messages << "one"
|
253
|
-
@room.retrieve_messages.should == ["one"]
|
254
|
-
@room.inbound_messages.size.should == 0
|
276
|
+
@room.should_receive(:campfire_post).with("/room/#{@room.number}/speak.json", expected_json).and_return(mock(:post, :callback => nil))
|
277
|
+
EM.run_block { @room.post_messages }
|
255
278
|
end
|
256
279
|
end
|
257
280
|
|