From 32e3c06e8db35f5051f05951f56f96583247da02 Mon Sep 17 00:00:00 2001 From: Antonio Terceiro Date: Fri, 20 Mar 2009 17:25:02 -0300 Subject: [PATCH] ActionItem936: enhancements done in pair --- app/controllers/admin/environment_design_controller.rb | 2 +- app/models/feed_reader_block.rb | 15 +++++++++------ lib/feed_handler.rb | 16 ++++++++++------ public/stylesheets/blocks/feed-reader-block.css | 20 +++++++++++++++++++- script/feed-updater | 2 -- test/unit/feed_handler_test.rb | 31 ++++++++++++------------------- test/unit/feed_reader_block_test.rb | 8 +++----- 7 files changed, 54 insertions(+), 40 deletions(-) diff --git a/app/controllers/admin/environment_design_controller.rb b/app/controllers/admin/environment_design_controller.rb index c208f0d..782c90a 100644 --- a/app/controllers/admin/environment_design_controller.rb +++ b/app/controllers/admin/environment_design_controller.rb @@ -3,7 +3,7 @@ class EnvironmentDesignController < BoxOrganizerController protect 'edit_environment_design', :environment def available_blocks - @available_blocks ||= [ LoginBlock, EnvironmentStatisticsBlock, RecentDocumentsBlock, EnterprisesBlock, CommunitiesBlock, PeopleBlock, SellersSearchBlock, LinkListBlock ] + @available_blocks ||= [ LoginBlock, EnvironmentStatisticsBlock, RecentDocumentsBlock, EnterprisesBlock, CommunitiesBlock, PeopleBlock, SellersSearchBlock, LinkListBlock, FeedReaderBlock ] end end diff --git a/app/models/feed_reader_block.rb b/app/models/feed_reader_block.rb index 654ceea..60eea6a 100644 --- a/app/models/feed_reader_block.rb +++ b/app/models/feed_reader_block.rb @@ -27,13 +27,16 @@ class FeedReaderBlock < Block end def formatted_feed_content + return "" + end + + def footer if self.fetched_at.nil? or self.feed_items.empty? - return ("

%s

" % _('Feed content was not loaded yet')) + _('Feed content was not loaded yet') else - return "" + - "
#{_("Updated: %s") % show_date(self.fetched_at)}
" + _("Updated: %s") % show_date(self.fetched_at) end end @@ -41,7 +44,7 @@ class FeedReaderBlock < Block self.feed_items << {:title => title, :link => link} end - def clean + def clear self.feed_items = [] self.feed_title = nil end diff --git a/lib/feed_handler.rb b/lib/feed_handler.rb index 3a273f2..273bffa 100644 --- a/lib/feed_handler.rb +++ b/lib/feed_handler.rb @@ -23,12 +23,16 @@ class FeedHandler end def process(container) - content = fetch(container.address) - container.fetched_at = Time.now - parse = parse(content) - container.feed_title = parse.title - parse.items[0..container.limit-1].each do |item| - container.add_item(item.title, item.link, item.date, item.content) + container.class.transaction do + container.clear + content = fetch(container.address) + container.fetched_at = Time.now + parse = parse(content) + container.feed_title = parse.title + parse.items[0..container.limit-1].each do |item| + container.add_item(item.title, item.link, item.date, item.content) + end + container.save! end end diff --git a/public/stylesheets/blocks/feed-reader-block.css b/public/stylesheets/blocks/feed-reader-block.css index 2058ed1..cc1ac53 100644 --- a/public/stylesheets/blocks/feed-reader-block.css +++ b/public/stylesheets/blocks/feed-reader-block.css @@ -1,4 +1,22 @@ -.feed-reader-block-fetched-at { +#content .feed-reader-block { + padding: 10px 0px 10px 10px; + overflow: hidden; +} + +.feed-reader-block ul { + margin: 0px; + padding: 0px 0px 0px 20px; +} +.feed-reader-block li { + margin: 0px; + padding: 0px; +} + +.feed-reader-block a { + text-decoration: none; +} + +.feed-reader-block .block-footer-content { color: #CCC; font-size: 11px; text-align: center; diff --git a/script/feed-updater b/script/feed-updater index db2e2bd..4b4d94f 100755 --- a/script/feed-updater +++ b/script/feed-updater @@ -4,10 +4,8 @@ require File.dirname(__FILE__) + '/../config/environment' FeedReaderBlock.find(:all).each do |feed_block| unless feed_block.address.nil? begin - feed_block.clean handler = FeedHandler.new handler.process(feed_block) - feed_block.save! RAILS_DEFAULT_LOGGER.info("%s ID %d fetched at %s" % [feed_block.class.name, feed_block.id, feed_block.fetched_at]) rescue FeedHandler::ParseError => ex RAILS_DEFAULT_LOGGER.warn("Error parsing content from %s ID %d\n%s" % [feed_block.class.name, feed_block.id, ex.to_s]) diff --git a/test/unit/feed_handler_test.rb b/test/unit/feed_handler_test.rb index 4e214f3..88a0796 100644 --- a/test/unit/feed_handler_test.rb +++ b/test/unit/feed_handler_test.rb @@ -2,26 +2,9 @@ require File.dirname(__FILE__) + '/../test_helper' class FeedHandlerTest < Test::Unit::TestCase - class FeedContainer - attr_accessor :limit - attr_accessor :fetched_at - attr_accessor :feed_title - attr_accessor :feed_items - attr_accessor :address - def initialize - self.limit = 5 - self.feed_title = "Feed Container Mocked" - self.feed_items = [] - self.address = 'test/fixtures/files/feed.xml' - end - def add_item(title, link, date, content) - self.feed_items << title - end - end - def setup @handler = FeedHandler.new - @container = FeedContainer.new + @container = FeedReaderBlock.create!(:box_id => 99999, :address => 'test/fixtures/files/feed.xml') end attr_reader :handler, :container @@ -43,7 +26,7 @@ class FeedHandlerTest < Test::Unit::TestCase should 'process feed and populate container' do handler.process(container) assert_equal 'Feed for unit tests', container.feed_title - assert_equal ["Last POST", "Second POST", "First POST"], container.feed_items + assert_equal ["Last POST", "Second POST", "First POST"], container.feed_items.map {|item| item[:title]} end should 'raise exception when parser nil' do @@ -80,4 +63,14 @@ class FeedHandlerTest < Test::Unit::TestCase assert_equal 1, container.feed_items.size end + should 'clear the container before processing' do + container.expects(:clear) + handler.process(container) + end + + should 'save after processing' do + container.expects(:save!) + handler.process(container) + end + end diff --git a/test/unit/feed_reader_block_test.rb b/test/unit/feed_reader_block_test.rb index 0443274..1b8ff67 100644 --- a/test/unit/feed_reader_block_test.rb +++ b/test/unit/feed_reader_block_test.rb @@ -52,20 +52,18 @@ class FeedReaderBlockTest < ActiveSupport::TestCase end should 'notice when content not fetched yet' do - assert_tag_in_string feed.content, :tag => 'p', :content => 'Feed content was not loaded yet' + assert_equal'Feed content was not loaded yet', feed.footer end should 'display last fetched date' do feed.feed_items = ['one', 'two'] - assert_tag_in_string feed.content, :tag => 'div', - :content => "Updated: #{show_date(@fetched_at)}", - :attributes => {:class => 'feed-reader-block-fetched-at'} + assert_equal "Updated: #{show_date(@fetched_at)}", feed.footer end should 'clear feed title and items' do feed.feed_items = %w[ last-post second-post first-post ] feed.feed_title = 'Feed Test' - feed.clean + feed.clear assert_nil feed.feed_title assert_equal [], feed.feed_items end -- libgit2 0.21.2