Sha256: c63db852489de745342218eefb701a0d7c3959b03af3481fdb3fdb407215d86a

Contents?: true

Size: 1.47 KB

Versions: 2

Compression:

Stored size: 1.47 KB

Contents

class NewsFeed < ActiveRecord::Base
  attr_accessible :title, :url
  default_scope order: "news_feeds.position"
  belongs_to :library_group, validate: true

  validates_presence_of :title, :url, :library_group
  validates_associated :library_group
  validates_length_of :url, maximum: 255
  before_save :fetch

  acts_as_list

  def self.per_page
    10
  end

  def fetch
    begin
      feed = open(url) do |f|
        f.read
      end
      if rss = RSS::Parser.parse(feed, false)
        self.body = feed
      end
    rescue StandardError, Timeout::Error
      nil
    end
  end

  def content
    if body
    # tDiary の RSS をパースした際に to_s が空になる
    # rss = RSS::Parser.parse(feed)
    # rss.to_s
    # => ""
    #if rss.nil?
      begin
        rss = RSS::Parser.parse(body)
      rescue RSS::InvalidRSSError
        rss = RSS::Parser.parse(body, false)
      rescue RSS::NotWellFormedError, TypeError
        nil
      end
    #end
    end
  end

  def force_reload
    save!
  end

  def self.fetch_feeds
    NewsFeed.all.each do |news_feed|
      news_feed.touch
    end
  end
end

# == Schema Information
#
# Table name: news_feeds
#
#  id               :integer          not null, primary key
#  library_group_id :integer          default(1), not null
#  title            :string(255)
#  url              :string(255)
#  body             :text
#  position         :integer
#  created_at       :datetime         not null
#  updated_at       :datetime         not null
#

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
enju_news-0.1.0.pre7 app/models/news_feed.rb
enju_news-0.1.0.pre6 app/models/news_feed.rb