From cd41bd6779a388f2265b721fdfc74fcdcd611c29 Mon Sep 17 00:00:00 2001 From: Antonio Terceiro Date: Tue, 27 Oct 2009 18:06:32 -0300 Subject: [PATCH] Rewriting feed updater code --- app/models/block.rb | 2 ++ app/models/external_feed.rb | 10 ++++++++-- app/models/feed_reader_block.rb | 27 +++++++++++++++++++++++++-- db/migrate/075_add_new_feed_stuff.rb | 40 ++++++++++++++++++++++++++++++++++++++++ db/schema.rb | 31 +++++++++++++++++++++---------- doc/README_FOR_APP | 3 ++- lib/feed_handler.rb | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------- lib/feed_updater.rb | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ script/feed-updater | 35 +++++++++++++++++++++++------------ script/production | 5 ++--- test/factories.rb | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ test/test_helper.rb | 4 ++++ test/unit/block_test.rb | 7 +++++++ test/unit/external_feed_test.rb | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------- test/unit/feed_handler_test.rb | 43 +++++++++++++++++++++++++++++++++++++++---- test/unit/feed_reader_block_test.rb | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ test/unit/feed_updater_test.rb | 38 ++++++++++++++++++++++++++++++++++++++ test/unit/tiny_mce_article_test.rb | 6 ++++++ vendor/plugins/white_list_sanitizer_unescape_before_reescape/init.rb | 2 +- 19 files changed, 614 insertions(+), 84 deletions(-) create mode 100644 db/migrate/075_add_new_feed_stuff.rb create mode 100644 lib/feed_updater.rb create mode 100644 test/factories.rb create mode 100644 test/unit/feed_updater_test.rb diff --git a/app/models/block.rb b/app/models/block.rb index b0db40a..77541a3 100644 --- a/app/models/block.rb +++ b/app/models/block.rb @@ -13,6 +13,8 @@ class Block < ActiveRecord::Base acts_as_having_settings settings_items :visible, :type => :boolean, :default => true + named_scope :enabled, :conditions => { :enabled => true } + def visible? visible end diff --git a/app/models/external_feed.rb b/app/models/external_feed.rb index 9d8f8bb..6513346 100644 --- a/app/models/external_feed.rb +++ b/app/models/external_feed.rb @@ -5,6 +5,11 @@ class ExternalFeed < ActiveRecord::Base validates_presence_of :address, :if => lambda {|efeed| efeed.enabled} validates_uniqueness_of :blog_id + named_scope :enabled, :conditions => { :enabled => true } + named_scope :expired, lambda { + { :conditions => ['(fetched_at is NULL) OR (fetched_at < ?)', Time.now - FeedUpdater.update_interval] } + } + def add_item(title, link, date, content) article = TinyMceArticle.new(:name => title, :profile => blog.profile, :body => content, :published_at => date, :source => link, :profile => blog.profile, :parent => blog) unless blog.children.exists?(:slug => article.slug) @@ -16,9 +21,10 @@ class ExternalFeed < ActiveRecord::Base # do nothing end def finish_fetch - if self.only_once - self.enabled = 'false' + if self.only_once && self.update_errors.zero? + self.enabled = false end + self.fetched_at = Time.now self.save! end diff --git a/app/models/feed_reader_block.rb b/app/models/feed_reader_block.rb index 2d6e3bf..cc04bf8 100644 --- a/app/models/feed_reader_block.rb +++ b/app/models/feed_reader_block.rb @@ -1,14 +1,32 @@ class FeedReaderBlock < Block + def initialize(attributes = nil) + data = attributes || {} + super({ :enabled => !data[:address].blank? }.merge(data)) + end + include DatesHelper settings_items :address, :type => :string + alias :orig_set_address :address= + def address=(new_address) + old_address = address + orig_set_address(new_address) + self.enabled = (old_address.blank? && !new_address.blank?) || (new_address && new_address != old_address) || false + end + settings_items :limit, :type => :integer - settings_items :fetched_at, :type => :date settings_items :feed_title, :type => :string settings_items :feed_items, :type => :array + settings_items :update_errors, :type => :integer, :default => 0 + settings_items :error_message, :type => :string + + named_scope :expired, lambda { + { :conditions => [ '(fetched_at is NULL) OR (fetched_at < ?)', Time.now - FeedUpdater.update_interval] } + } + before_create do |block| block.limit = 5 block.feed_items = [] @@ -27,9 +45,13 @@ class FeedReaderBlock < Block end def formatted_feed_content - return "