class Daneel::Adapters::Campfire
Public Class Methods
new(robot)
click to toggle source
Calls superclass method
# File lib/daneel/adapters/campfire.rb, line 9 def initialize(robot) super domain = ENV['CAMPFIRE_SUBDOMAIN'] token = ENV['CAMPFIRE_API_TOKEN'] @fire = Sparks.new(domain, token, :logger => logger) ENV['CAMPFIRE_ROOM_IDS'].split(",").map(&:to_i).map do |id| # Get info about the room state room = Room.new(id, self, @fire.room(id)) robot.data.rooms[id] = room # Save the user info for all the users in the room room.data["users"].each do |data| user = User.new(data["id"], data["name"], data) robot.data.users[user.id] = user end end end
Public Instance Methods
announce(*texts)
click to toggle source
# File lib/daneel/adapters/campfire.rb, line 43 def announce(*texts) robot.data.rooms.each do |id, room| say id, *texts end end
leave()
click to toggle source
# File lib/daneel/adapters/campfire.rb, line 49 def leave # stop the listening threads @threads.each{|t| t.kill } # leave each room robot.data.rooms.each{|r| @fire.room(r.id).leave } end
me()
click to toggle source
# File lib/daneel/adapters/campfire.rb, line 56 def me @me ||= begin data = @fire.me me = User.new(data["id"], data["name"], data) robot.data.users[me.id] = me end end
run()
click to toggle source
# File lib/daneel/adapters/campfire.rb, line 27 def run @threads ||= [] robot.data.rooms.each do |id, room| t = Thread.new { watch_room(room) } until t t.abort_on_exception = true @threads << t end @threads.each{|t| t.join } end
say(id, *texts)
click to toggle source
# File lib/daneel/adapters/campfire.rb, line 37 def say(id, *texts) texts.each do |text| text =~ /\n/ ? @fire.paste(id, text) : @fire.speak(id, text) end end
Private Instance Methods
find_user(id)
click to toggle source
# File lib/daneel/adapters/campfire.rb, line 66 def find_user(id) robot.data.users[id] ||= begin data = @fire.user(id) User.new(data["id"], data["name"], data) end end
watch_room(room)
click to toggle source
# File lib/daneel/adapters/campfire.rb, line 73 def watch_room(room) @fire.watch(room.id) do |data| next if data["type"] == "TimestampMessage" # TODO pass through self-messages, once they are filtered by # the accept? method on scripts next if data["user_id"] == me.id text = data["body"] time = Time.parse(data["created_at"]) rescue Time.now type = data["type"].gsub(/Message$/, '').downcase mesg = Message.new(text, time, type) room = robot.data.rooms[data["room_id"]] user = find_user(data["user_id"]) robot.receive room, mesg, user end end