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 CHANGED
@@ -3,8 +3,9 @@ source :gemcutter
3
3
  gem 'eventmachine'
4
4
  gem 'twitter-stream'
5
5
  gem 'json'
6
+ gem 'em-http-request'
6
7
 
7
8
  group :test do
8
9
  gem 'rspec'
9
- gem 'fakeweb'
10
+ gem 'webmock'
10
11
  end
data/Gemfile.lock CHANGED
@@ -1,9 +1,13 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ addressable (2.2.2)
5
+ crack (0.1.8)
4
6
  diff-lcs (1.1.2)
7
+ em-http-request (0.2.15)
8
+ addressable (>= 2.0.0)
9
+ eventmachine (>= 0.12.9)
5
10
  eventmachine (0.12.10)
6
- fakeweb (1.3.0)
7
11
  json (1.4.6)
8
12
  roauth (0.0.3)
9
13
  rspec (2.1.0)
@@ -17,13 +21,17 @@ GEM
17
21
  twitter-stream (0.1.10)
18
22
  eventmachine (>= 0.12.8)
19
23
  roauth (>= 0.0.2)
24
+ webmock (1.6.2)
25
+ addressable (>= 2.2.2)
26
+ crack (>= 0.1.7)
20
27
 
21
28
  PLATFORMS
22
29
  ruby
23
30
 
24
31
  DEPENDENCIES
32
+ em-http-request
25
33
  eventmachine
26
- fakeweb
27
34
  json
28
35
  rspec
29
36
  twitter-stream
37
+ webmock
data/README.rdoc CHANGED
@@ -25,8 +25,6 @@ Then start flamethrower like so:
25
25
 
26
26
  === A work in progress
27
27
 
28
- TODO: Switch Net::HTTP sync calls to async EM::HttpRequest calls.
29
-
30
28
  Flamethrower is a work in progress. Right now basic messaging works, but
31
29
  it still needs a lot of love. If you find it useful and would like to see
32
30
  it do something, please submit a patch (with tests please)!. Bug reports are
data/Rakefile CHANGED
@@ -20,6 +20,7 @@ begin
20
20
  gemspec.authors = ["Blake Smith"]
21
21
  gemspec.add_dependency('eventmachine', '>=0.12.10')
22
22
  gemspec.add_dependency('json')
23
+ gemspec.add_dependency('em-http-request')
23
24
  gemspec.add_dependency('twitter-stream')
24
25
  end
25
26
  rescue LoadError
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/bin/flamethrower CHANGED
@@ -14,6 +14,7 @@ HELP
14
14
  require 'rubygems'
15
15
  require 'flamethrower'
16
16
  require 'optparse'
17
+ require 'yaml'
17
18
 
18
19
  options = {}
19
20
  opts = OptionParser.new do |opts|
@@ -42,17 +43,21 @@ end
42
43
 
43
44
  opts.parse!
44
45
 
45
- if options['config']
46
- case File.exists?(options['config'])
47
- when true
48
- require 'yaml'
49
- yaml = YAML.load_file(options['config'])
46
+ load_options_from_file = lambda do |filename, verbose|
47
+ if File.exists?(filename)
48
+ yaml = YAML.load_file(filename)
50
49
  yaml.each {|k, v| options[k] = v}
51
- when false
52
- puts "Unable to find the specified file! Check the path?"
50
+ else
51
+ puts "Unable to load config file!" if verbose
53
52
  end
54
53
  end
55
54
 
55
+ if options['config']
56
+ load_options_from_file.call(options['config'], true)
57
+ else
58
+ load_options_from_file.call(File.join(ENV["HOME"], '.flamethrower', 'config.yml'), false)
59
+ end
60
+
56
61
  FLAMETHROWER_LOGGER = Logger.new(options['logger'] || STDOUT)
57
62
 
58
63
  server = Flamethrower::EventServer.new(options['host'], options['port'], options['domain'], options['token'])
data/flamethrower.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{flamethrower}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Blake Smith"]
12
- s.date = %q{2011-01-12}
12
+ s.date = %q{2011-01-17}
13
13
  s.default_executable = %q{flamethrower}
14
14
  s.description = %q{Flamethrower gives you the power to use your awesome irc client to talk in your campfire rooms.}
15
15
  s.email = %q{blakesmith0@gmail.com}
@@ -18,75 +18,73 @@ Gem::Specification.new do |s|
18
18
  "README.rdoc"
19
19
  ]
20
20
  s.files = [
21
- ".gitignore",
22
- ".rspec",
23
- "Gemfile",
24
- "Gemfile.lock",
25
- "MIT-LICENSE",
26
- "README.rdoc",
27
- "Rakefile",
28
- "VERSION",
29
- "bin/flamethrower",
30
- "flamethrower.gemspec",
31
- "lib/flamethrower.rb",
32
- "lib/flamethrower/campfire/connection.rb",
33
- "lib/flamethrower/campfire/message.rb",
34
- "lib/flamethrower/campfire/rest_api.rb",
35
- "lib/flamethrower/campfire/room.rb",
36
- "lib/flamethrower/campfire/user.rb",
37
- "lib/flamethrower/dispatcher.rb",
38
- "lib/flamethrower/irc/channel.rb",
39
- "lib/flamethrower/irc/codes.rb",
40
- "lib/flamethrower/irc/commands.rb",
41
- "lib/flamethrower/irc/message.rb",
42
- "lib/flamethrower/irc/user.rb",
43
- "lib/flamethrower/server.rb",
44
- "lib/flamethrower/server/event_server.rb",
45
- "lib/flamethrower/server/mock_server.rb",
46
- "spec/fixtures/enter_message.json",
47
- "spec/fixtures/kick_message.json",
48
- "spec/fixtures/leave_message.json",
49
- "spec/fixtures/message.json",
50
- "spec/fixtures/paste_message.json",
51
- "spec/fixtures/paste_message_with_pound.json",
52
- "spec/fixtures/room.json",
53
- "spec/fixtures/room_update.json",
54
- "spec/fixtures/rooms.json",
55
- "spec/fixtures/speak_message.json",
56
- "spec/fixtures/streaming_message.json",
57
- "spec/fixtures/timestamp_message.json",
58
- "spec/fixtures/upload_message.json",
59
- "spec/fixtures/upload_url_sample",
60
- "spec/fixtures/user.json",
61
- "spec/spec_helper.rb",
62
- "spec/unit/campfire/connection_spec.rb",
63
- "spec/unit/campfire/message_spec.rb",
64
- "spec/unit/campfire/room_spec.rb",
65
- "spec/unit/campfire/user_spec.rb",
66
- "spec/unit/dispatcher_spec.rb",
67
- "spec/unit/irc/channel_spec.rb",
68
- "spec/unit/irc/message_spec.rb",
69
- "spec/unit/irc/user_spec.rb",
70
- "spec/unit/server/event_server_spec.rb",
71
- "spec/unit/server_spec.rb"
21
+ ".rspec",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "MIT-LICENSE",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/flamethrower",
29
+ "flamethrower.gemspec",
30
+ "lib/flamethrower.rb",
31
+ "lib/flamethrower/campfire/connection.rb",
32
+ "lib/flamethrower/campfire/message.rb",
33
+ "lib/flamethrower/campfire/rest_api.rb",
34
+ "lib/flamethrower/campfire/room.rb",
35
+ "lib/flamethrower/campfire/user.rb",
36
+ "lib/flamethrower/dispatcher.rb",
37
+ "lib/flamethrower/irc/channel.rb",
38
+ "lib/flamethrower/irc/codes.rb",
39
+ "lib/flamethrower/irc/commands.rb",
40
+ "lib/flamethrower/irc/message.rb",
41
+ "lib/flamethrower/irc/user.rb",
42
+ "lib/flamethrower/server.rb",
43
+ "lib/flamethrower/server/event_server.rb",
44
+ "lib/flamethrower/server/mock_server.rb",
45
+ "spec/fixtures/enter_message.json",
46
+ "spec/fixtures/kick_message.json",
47
+ "spec/fixtures/leave_message.json",
48
+ "spec/fixtures/message.json",
49
+ "spec/fixtures/paste_message.json",
50
+ "spec/fixtures/paste_message_with_pound.json",
51
+ "spec/fixtures/room.json",
52
+ "spec/fixtures/room_update.json",
53
+ "spec/fixtures/rooms.json",
54
+ "spec/fixtures/speak_message.json",
55
+ "spec/fixtures/streaming_message.json",
56
+ "spec/fixtures/timestamp_message.json",
57
+ "spec/fixtures/upload_message.json",
58
+ "spec/fixtures/upload_url_sample",
59
+ "spec/fixtures/user.json",
60
+ "spec/spec_helper.rb",
61
+ "spec/unit/campfire/connection_spec.rb",
62
+ "spec/unit/campfire/message_spec.rb",
63
+ "spec/unit/campfire/room_spec.rb",
64
+ "spec/unit/campfire/user_spec.rb",
65
+ "spec/unit/dispatcher_spec.rb",
66
+ "spec/unit/irc/channel_spec.rb",
67
+ "spec/unit/irc/message_spec.rb",
68
+ "spec/unit/irc/user_spec.rb",
69
+ "spec/unit/server/event_server_spec.rb",
70
+ "spec/unit/server_spec.rb"
72
71
  ]
73
72
  s.homepage = %q{http://github.com/blakesmith/flamethrower}
74
- s.rdoc_options = ["--charset=UTF-8"]
75
73
  s.require_paths = ["lib"]
76
74
  s.rubygems_version = %q{1.3.7}
77
75
  s.summary = %q{Campfire IRC gateway}
78
76
  s.test_files = [
79
77
  "spec/spec_helper.rb",
80
- "spec/unit/campfire/connection_spec.rb",
81
- "spec/unit/campfire/message_spec.rb",
82
- "spec/unit/campfire/room_spec.rb",
83
- "spec/unit/campfire/user_spec.rb",
84
- "spec/unit/dispatcher_spec.rb",
85
- "spec/unit/irc/channel_spec.rb",
86
- "spec/unit/irc/message_spec.rb",
87
- "spec/unit/irc/user_spec.rb",
88
- "spec/unit/server/event_server_spec.rb",
89
- "spec/unit/server_spec.rb"
78
+ "spec/unit/campfire/connection_spec.rb",
79
+ "spec/unit/campfire/message_spec.rb",
80
+ "spec/unit/campfire/room_spec.rb",
81
+ "spec/unit/campfire/user_spec.rb",
82
+ "spec/unit/dispatcher_spec.rb",
83
+ "spec/unit/irc/channel_spec.rb",
84
+ "spec/unit/irc/message_spec.rb",
85
+ "spec/unit/irc/user_spec.rb",
86
+ "spec/unit/server/event_server_spec.rb",
87
+ "spec/unit/server_spec.rb"
90
88
  ]
91
89
 
92
90
  if s.respond_to? :specification_version then
@@ -94,17 +92,32 @@ Gem::Specification.new do |s|
94
92
  s.specification_version = 3
95
93
 
96
94
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
95
+ s.add_runtime_dependency(%q<eventmachine>, [">= 0"])
96
+ s.add_runtime_dependency(%q<twitter-stream>, [">= 0"])
97
+ s.add_runtime_dependency(%q<json>, [">= 0"])
98
+ s.add_runtime_dependency(%q<em-http-request>, [">= 0"])
97
99
  s.add_runtime_dependency(%q<eventmachine>, [">= 0.12.10"])
98
100
  s.add_runtime_dependency(%q<json>, [">= 0"])
101
+ s.add_runtime_dependency(%q<em-http-request>, [">= 0"])
99
102
  s.add_runtime_dependency(%q<twitter-stream>, [">= 0"])
100
103
  else
104
+ s.add_dependency(%q<eventmachine>, [">= 0"])
105
+ s.add_dependency(%q<twitter-stream>, [">= 0"])
106
+ s.add_dependency(%q<json>, [">= 0"])
107
+ s.add_dependency(%q<em-http-request>, [">= 0"])
101
108
  s.add_dependency(%q<eventmachine>, [">= 0.12.10"])
102
109
  s.add_dependency(%q<json>, [">= 0"])
110
+ s.add_dependency(%q<em-http-request>, [">= 0"])
103
111
  s.add_dependency(%q<twitter-stream>, [">= 0"])
104
112
  end
105
113
  else
114
+ s.add_dependency(%q<eventmachine>, [">= 0"])
115
+ s.add_dependency(%q<twitter-stream>, [">= 0"])
116
+ s.add_dependency(%q<json>, [">= 0"])
117
+ s.add_dependency(%q<em-http-request>, [">= 0"])
106
118
  s.add_dependency(%q<eventmachine>, [">= 0.12.10"])
107
119
  s.add_dependency(%q<json>, [">= 0"])
120
+ s.add_dependency(%q<em-http-request>, [">= 0"])
108
121
  s.add_dependency(%q<twitter-stream>, [">= 0"])
109
122
  end
110
123
  end
data/lib/flamethrower.rb CHANGED
@@ -2,7 +2,8 @@ $:.unshift File.join(File.dirname(__FILE__), "flamethrower")
2
2
 
3
3
  require 'rubygems'
4
4
 
5
- require 'net/https'
5
+ #require 'net/https'
6
+ require 'em-http'
6
7
  require 'eventmachine'
7
8
  require 'twitter/json_stream'
8
9
  require 'logger'
@@ -11,28 +11,42 @@ module Flamethrower
11
11
  @server = server
12
12
  end
13
13
 
14
- def rooms
15
- begin
16
- @rooms ||= Array.new.tap do |rooms|
17
- response = campfire_get("/rooms.json")
18
- case response
19
- when Net::HTTPSuccess
20
- json = JSON.parse(response.body)
21
- json['rooms'].each do |room|
22
- rooms << Room.new(@domain, @token, room).tap do |r|
23
- r.server = @server
24
- end
14
+ def fetch_my_user
15
+ http = campfire_get("/users/me.json")
16
+ http.callback do
17
+ case http.response_header.status
18
+ when 200
19
+ json = JSON.parse(http.response)
20
+ old_user = @server.current_user.nickname
21
+ new_user = Flamethrower::Campfire::User.new(json['user']).to_irc
22
+ @server.current_user = new_user
23
+ @server.send_rename(old_user, new_user.nickname)
24
+ end
25
+ end
26
+ end
27
+
28
+ def fetch_rooms
29
+ http = campfire_get("/rooms.json")
30
+ http.callback do
31
+ case http.response_header.status
32
+ when 200
33
+ rooms = Array.new
34
+ json = JSON.parse(http.response)
35
+ json['rooms'].each do |room|
36
+ rooms << Room.new(@domain, @token, room).tap do |r|
37
+ r.server = @server
25
38
  end
26
- else
27
- ::FLAMETHROWER_LOGGER.debug response.body
28
39
  end
40
+ @server.irc_channels = rooms.map(&:to_irc)
41
+ @server.send_channel_list
42
+ else
43
+ ::FLAMETHROWER_LOGGER.debug http.response
29
44
  end
30
- rescue SocketError
45
+ end
46
+ http.errback do
31
47
  @server.send_message @server.reply(Flamethrower::Irc::Codes::RPL_MOTD, ":ERROR: Unable to fetch room list! Check your connection?")
32
- []
33
48
  end
34
49
  end
35
-
36
50
  end
37
51
  end
38
52
  end
@@ -34,12 +34,22 @@ module Flamethrower
34
34
  when "LeaveMessage"
35
35
  irc_string = ":#{@user.to_irc.to_s} PART #{@room.to_irc.name}"
36
36
  when "PasteMessage"
37
- irc_string = ":#{@user.to_irc.to_s} PRIVMSG #{@room.to_irc.name} :#{@body}"
37
+ irc_string = format_paste_message
38
38
  else
39
39
  return
40
40
  end
41
41
  Flamethrower::Irc::Message.new(irc_string)
42
42
  end
43
+
44
+ private
45
+
46
+ def format_paste_message
47
+ lines = @body.split("\n")
48
+ message = lines.inject(Array.new) do |array, line|
49
+ array << ":#{@user.to_irc.to_s} PRIVMSG #{@room.to_irc.name} :#{line}"
50
+ end
51
+ message.join("\r\n")
52
+ end
43
53
  end
44
54
  end
45
55
  end
@@ -3,36 +3,40 @@ module Flamethrower
3
3
  module RestApi
4
4
 
5
5
  def host
6
- "#{@domain}.campfirenow.com"
6
+ "https://#{@domain}.campfirenow.com"
7
7
  end
8
8
 
9
9
  private
10
10
  def http
11
- Net::HTTP.new(host, 443).tap do |connection|
12
- connection.use_ssl = true
13
- end
11
+ EventMachine::HttpRequest.new(host)
14
12
  end
15
13
 
16
14
  def campfire_get(path)
17
- get = Net::HTTP::Get.new(path)
18
- get.basic_auth @token, 'x'
19
- http.request(get)
15
+ action_log("get", path, nil)
16
+ full_path = host << path
17
+ EventMachine::HttpRequest.new(full_path).get :head => {'authorization' => [@token, 'x']}
20
18
  end
21
19
 
22
20
  def campfire_post(path, json=nil)
23
- put_or_post(Net::HTTP::Post, path, json)
21
+ action_log("post", path, json)
22
+ full_path = host << path
23
+ params = {:head => {'Content-Type' => 'application/json', 'authorization' => [@token, 'x']}}
24
+ params[:body] = json if json
25
+ http = EventMachine::HttpRequest.new(full_path).post params
24
26
  end
25
27
 
26
28
  def campfire_put(path, json=nil)
27
- put_or_post(Net::HTTP::Put, path, json)
29
+ action_log("put", path, json)
30
+ full_path = host << path
31
+ params = {:head => {'Content-Type' => 'application/json', 'authorization' => [@token, 'x']}}
32
+ params[:body] = json if json
33
+ EventMachine::HttpRequest.new(full_path).put params
28
34
  end
29
35
 
30
- def put_or_post(request_type, path, json)
31
- action = request_type.new(path)
32
- action.basic_auth @token, 'x'
33
- action.body = json if json
34
- action.add_field "Content-Type", "application/json"
35
- http.request(action)
36
+ private
37
+
38
+ def action_log(action, path, json)
39
+ ::FLAMETHROWER_LOGGER.debug "Sending #{action.upcase} #{path} with #{json || 'no'} JSON"
36
40
  end
37
41
 
38
42
  end
@@ -1,12 +1,15 @@
1
1
  module Flamethrower
2
2
  module Campfire
3
3
  class Room
4
+ POLL_SECONDS = 0.5
5
+ PERIODIC_UPDATE_SECONDS = 60 * 10
6
+
4
7
  include Flamethrower::Campfire::RestApi
5
8
 
6
9
  attr_reader :stream, :token
7
10
  attr_writer :topic
8
11
  attr_accessor :inbound_messages, :outbound_messages, :thread_messages, :number, :name, :users, :server
9
- attr_accessor :failed_messages
12
+ attr_accessor :failed_messages, :joined
10
13
 
11
14
  def initialize(domain, token, params = {})
12
15
  @domain = domain
@@ -19,23 +22,40 @@ module Flamethrower
19
22
  @name = params['name']
20
23
  @topic = params['topic']
21
24
  @users = []
22
- @thread_running = false
25
+ @joined = false
26
+ @room_info_sent = false
27
+ @room_alive = false
23
28
  end
24
29
 
25
30
  def topic
26
31
  @topic || "No topic"
27
32
  end
28
33
 
29
- def send_topic!(topic)
30
- response = campfire_put("/room/#{@number}.json", {:topic => topic}.to_json)
31
- @topic = topic if response.code == "200"
34
+ def send_topic(topic)
35
+ http = campfire_put("/room/#{@number}.json", {:topic => topic}.to_json)
36
+ http.callback do
37
+ @topic = topic if http.response_header.status == 200
38
+ end
39
+ end
40
+
41
+ def send_info
42
+ @server.send_topic(to_irc)
43
+ @server.send_userlist(to_irc)
32
44
  end
33
45
 
34
46
  def fetch_room_info
35
- response = campfire_get("/room/#{@number}.json")
36
- json = JSON.parse(response.body)
37
- json['room']['users'].each do |user|
38
- @users << Flamethrower::Campfire::User.new(user)
47
+ http = campfire_get("/room/#{@number}.json")
48
+ http.callback do
49
+ case http.response_header.status
50
+ when 200
51
+ @users = []
52
+ json = JSON.parse(http.response)
53
+ json['room']['users'].each do |user|
54
+ @users << Flamethrower::Campfire::User.new(user)
55
+ end
56
+ send_info unless @room_info_sent
57
+ @room_info_sent = true
58
+ end
39
59
  end
40
60
  end
41
61
 
@@ -44,40 +64,47 @@ module Flamethrower
44
64
  @outbound_messages << Flamethrower::Campfire::Message.new(params)
45
65
  end
46
66
 
47
- def start_thread
48
- ::FLAMETHROWER_LOGGER.debug "Starting thread for room #{name}"
49
- @thread_running = true
50
- Thread.new do
51
- connect
52
- until dead?
53
- fetch_messages
54
- post_messages
55
- requeue_failed_messages
56
- fetch_users
57
- messages_to_send = to_irc.retrieve_irc_messages
58
- messages_to_send.each do |m|
59
- ::FLAMETHROWER_LOGGER.debug "Sending irc message #{m.to_s}"
60
- @server.send_message(m.to_s)
61
- end
62
- sleep 0.5
67
+ def start
68
+ @room_alive = true
69
+ fetch_room_info
70
+ connect
71
+ @polling_timer = EventMachine.add_periodic_timer(POLL_SECONDS) { poll }
72
+ @periodic_timer = EventMachine.add_periodic_timer(PERIODIC_UPDATE_SECONDS) { fetch_room_info }
73
+ end
74
+
75
+ def stop
76
+ @room_alive = false
77
+ EventMachine.cancel_timer(@polling_timer)
78
+ EventMachine.cancel_timer(@periodic_timer)
79
+ end
80
+
81
+ def poll
82
+ unless dead?
83
+ fetch_messages
84
+ post_messages
85
+ requeue_failed_messages
86
+ fetch_users
87
+ messages_to_send = to_irc.retrieve_irc_messages
88
+ messages_to_send.each do |m|
89
+ ::FLAMETHROWER_LOGGER.debug "Sending irc message #{m.to_s}"
90
+ @server.send_message(m.to_s)
63
91
  end
64
92
  end
65
93
  end
66
94
 
67
95
  def alive?
68
- @thread_running
96
+ @room_alive
69
97
  end
70
98
 
71
99
  def dead?
72
- !@thread_running
73
- end
74
-
75
- def kill_thread!
76
- @thread_running = false
100
+ !@room_alive
77
101
  end
78
102
 
79
103
  def join
80
- campfire_post("/room/#{@number}/join.json").code == "200"
104
+ http = campfire_post("/room/#{@number}/join.json")
105
+ http.callback do
106
+ @joined = true if http.response_header.status == 200
107
+ end
81
108
  end
82
109
 
83
110
  def connect
@@ -89,8 +116,8 @@ module Flamethrower
89
116
 
90
117
  def fetch_messages
91
118
  @stream.each_item do |item|
119
+ ::FLAMETHROWER_LOGGER.debug "Got json message #{item.inspect}"
92
120
  params = JSON.parse(item)
93
- ::FLAMETHROWER_LOGGER.debug "Got json message #{params.inspect}"
94
121
  params['user'] = @users.find {|u| u.number == params['user_id'] }
95
122
  params['room'] = self
96
123
  message = Flamethrower::Campfire::Message.new(params)
@@ -107,14 +134,16 @@ module Flamethrower
107
134
  def fetch_users
108
135
  until @users_to_fetch.empty?
109
136
  message = @users_to_fetch.pop
110
- response = campfire_get("/users/#{message.user_id}.json")
111
- case response
112
- when Net::HTTPOK
113
- json = JSON.parse(response.body)
114
- user = Flamethrower::Campfire::User.new(json['user'])
115
- message.user = user
116
- @users << user
117
- @inbound_messages << message
137
+ http = campfire_get("/users/#{message.user_id}.json")
138
+ http.callback do
139
+ case http.response_header.status
140
+ when 200
141
+ json = JSON.parse(http.response)
142
+ user = Flamethrower::Campfire::User.new(json['user'])
143
+ message.user = user
144
+ @users << user
145
+ @inbound_messages << message
146
+ end
118
147
  end
119
148
  end
120
149
  end
@@ -124,14 +153,16 @@ module Flamethrower
124
153
  message = @outbound_messages.pop
125
154
  json = {"message" => {"body" => message.body, "type" => message.message_type}}.to_json
126
155
  ::FLAMETHROWER_LOGGER.debug "Sending #{json} to campfire API"
127
- response = campfire_post("/room/#{@number}/speak.json", json)
128
- case response
129
- when Net::HTTPCreated
130
- message.mark_delivered!
131
- else
132
- ::FLAMETHROWER_LOGGER.debug "Failed to post to campfire API with code: #{response.inspect}"
133
- message.mark_failed!
134
- @failed_messages << message
156
+ http = campfire_post("/room/#{@number}/speak.json", json)
157
+ http.callback do
158
+ case http.response_header.status
159
+ when 201
160
+ message.mark_delivered!
161
+ else
162
+ ::FLAMETHROWER_LOGGER.debug "Failed to post to campfire API with code: #{http.response_header.status} body: #{http.response}"
163
+ message.mark_failed!
164
+ @failed_messages << message
165
+ end
135
166
  end
136
167
  end
137
168
  end
@@ -139,7 +170,11 @@ module Flamethrower
139
170
  def retrieve_messages
140
171
  Array.new.tap do |new_array|
141
172
  until @inbound_messages.empty?
142
- new_array << @inbound_messages.pop
173
+ message = @inbound_messages.pop
174
+ next unless message
175
+ unless message.user.to_irc.nickname == @server.current_user.nickname
176
+ new_array << message
177
+ end
143
178
  end
144
179
  end
145
180
  end