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