# == Schema Information # # Table name: feeds # # id :integer(4) not null, primary key # uri :string(2083) # display_uri :string(2083) # title :string(1000) # short_title :string(100) # description :text # tag_filter :string(1000) # top_tags :text # priority :integer(4) default(10) # status :integer(4) default(1) # last_requested_at :datetime # last_harvested_at :datetime # harvest_interval :integer(4) default(86400) # failed_requests :integer(4) default(0) # error_message :text # service_id :integer(4) default(0) # login :string(255) # password :string(255) # created_at :datetime # updated_at :datetime # entries_changed_at :datetime # harvested_from_display_uri :string(2083) # harvested_from_title :string(1000) # harvested_from_short_title :string(100) # entries_count :integer(4) # default_language_id :integer(4) default(0) # default_grain_size :string(255) default("unknown") # contributor_id :integer(4) # class Feed < ActiveRecord::Base require 'httparty' include HTTParty format :xml validates_presence_of :uri has_many :feed_parents has_many :entries belongs_to :contributor, :class_name => 'User', :foreign_key => 'contributor_id' belongs_to :default_language, :class_name => 'Language', :foreign_key => 'default_language_id' named_scope :banned, :conditions => "status < 0" named_scope :valid, :conditions => "status >= 0" named_scope :by_title, :order => "title ASC" named_scope :recent, lambda { { :conditions => ['created_at > ?', 1.week.ago] } } named_scope :by_newest, :order => "created_at DESC" # named_scope :ready_to_harvest, lambda { |*args| { :conditions => [ "feeds.last_harvested_at < ?", args.first || 1.day.ago.end_of_day ] } } def after_create if GlobalConfig.inform_admin_of_global_feed && self.feed_parents.empty? RakerMailer.deliver_notification_feed_added(self) # Global feed. Email the admin to let them know a feed has been added end end # harvest_interval is stored in seconds def refresh_interval_hours if self.harvest_interval self.harvest_interval/3600 else 168 # Once a week # Looks like 168 = 24 * 7 (1 week) # harvest_interval is currently stored in seconds. I'm guessing it used to be stored in hours and this is a relic end end def refresh_interval_hours=(interval) self.harvest_interval = interval + ":00:00" end # def self.harvest # feed = Feed.first # .ready_to_harvest.first # get(feed.uri) # end # Gathers all available feed uris from the given uri and parses them into # feed objects def self.gather_information(uri) feeds = [] @available_feeds = discover_feeds(uri) @available_feeds.each do |feed| feeds << make_feed(Feedzirra::Feed.fetch_and_parse(feed.url)) end feeds end # Turns a feed from feedzirra into a muck feed def self.make_feed(feed) Feed.new(:short_title => feed.title, :title => feed.title, :display_uri => feed.url, :uri => feed.feed_url) end # Looks for feeds from a given url def self.discover_feeds(uri) Feedbag.find(uri) end end