class Ruboty::Handlers::Rss
Constants
- DEFAULT_INTERVAL
- NAMESPACE
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
# File lib/ruboty/handlers/rss.rb, line 13 def initialize(*args) super(*args) load_feeds start_watching end
Public Instance Methods
list(message)
click to toggle source
# File lib/ruboty/handlers/rss.rb, line 45 def list(message) list = feeds.each_value.reject do |feed| feed.from && message.from && feed.from != message.from end.map do |feed| "#{feed.id}: #{feed.url}" end if list.empty? message.reply("No RSS feed") else message.reply(list.join("\n")) end end
subscribe(message)
click to toggle source
# File lib/ruboty/handlers/rss.rb, line 19 def subscribe(message) urls = message[:urls].split(' ') urls.each do |url| feed = Ruboty::Rss::Feed.new( message.original.except(:robot).merge( id: generate_id, url: url, ) ) feeds[feed.id] = feed feed_data[feed.id] = feed.attributes end message.reply("#{urls.size} feed(s) subscribed.") end
unsubscribe(message)
click to toggle source
# File lib/ruboty/handlers/rss.rb, line 36 def unsubscribe(message) id = message[:id].to_i feeds.delete(id) feed_data.delete(id) message.reply("Unsubscribed.") end
Private Instance Methods
debug(str)
click to toggle source
# File lib/ruboty/handlers/rss.rb, line 101 def debug(str) Ruboty.logger.debug("[#{Time.now.to_s}] ruboty-rss: #{str}") end
feed_data()
click to toggle source
# File lib/ruboty/handlers/rss.rb, line 59 def feed_data robot.brain.data[NAMESPACE] ||= {} end
feeds()
click to toggle source
# File lib/ruboty/handlers/rss.rb, line 63 def feeds @feeds ||= {} end
generate_id()
click to toggle source
# File lib/ruboty/handlers/rss.rb, line 92 def generate_id begin id = rand(1000) end while feeds.has_key?(id) id end
load_feeds()
click to toggle source
# File lib/ruboty/handlers/rss.rb, line 67 def load_feeds feed_data.each_pair do |id, datum| feed = Ruboty::Rss::Feed.new(datum) feeds[feed.id] = feed end end
start_watching()
click to toggle source
# File lib/ruboty/handlers/rss.rb, line 74 def start_watching Thread.start do while true feeds.each_pair do |id, feed| debug "Fetching RSS feed (#{feed.url})" feed.new_items.each do |item| debug "New item found (#{item.title} / #{item.link})" body = "New Entry: #{item.title}\n#{item.link}" Message.new( feed.attributes.symbolize_keys.except(:url, :id).merge(robot: robot) ).reply(body) end end sleep (ENV["RUBOTY_RSS_INTERVAL"] || DEFAULT_INTERVAL).to_i end end end