Commit 32e3c06e8db35f5051f05951f56f96583247da02
1 parent
47bbb6bf
Exists in
master
and in
28 other branches
ActionItem936: enhancements done in pair
* making the block available for environments * moving the status message to the block footer * renaming `clean` to `clear` * moving all feed processing logic to FeedHandler * copied style from recent documents block * using actual ActiveRecord object for testing
Showing
7 changed files
with
54 additions
and
40 deletions
Show diff stats
app/controllers/admin/environment_design_controller.rb
| ... | ... | @@ -3,7 +3,7 @@ class EnvironmentDesignController < BoxOrganizerController |
| 3 | 3 | protect 'edit_environment_design', :environment |
| 4 | 4 | |
| 5 | 5 | def available_blocks |
| 6 | - @available_blocks ||= [ LoginBlock, EnvironmentStatisticsBlock, RecentDocumentsBlock, EnterprisesBlock, CommunitiesBlock, PeopleBlock, SellersSearchBlock, LinkListBlock ] | |
| 6 | + @available_blocks ||= [ LoginBlock, EnvironmentStatisticsBlock, RecentDocumentsBlock, EnterprisesBlock, CommunitiesBlock, PeopleBlock, SellersSearchBlock, LinkListBlock, FeedReaderBlock ] | |
| 7 | 7 | end |
| 8 | 8 | |
| 9 | 9 | end | ... | ... |
app/models/feed_reader_block.rb
| ... | ... | @@ -27,13 +27,16 @@ class FeedReaderBlock < Block |
| 27 | 27 | end |
| 28 | 28 | |
| 29 | 29 | def formatted_feed_content |
| 30 | + return "<ul>\n" + | |
| 31 | + self.feed_items.map{ |item| "<li><a href='#{item[:link]}'>#{item[:title]}</a></li>" }.join("\n") + | |
| 32 | + "</ul>" | |
| 33 | + end | |
| 34 | + | |
| 35 | + def footer | |
| 30 | 36 | if self.fetched_at.nil? or self.feed_items.empty? |
| 31 | - return ("<p class='feed-reader-block-error'>%s</p>" % _('Feed content was not loaded yet')) | |
| 37 | + _('Feed content was not loaded yet') | |
| 32 | 38 | else |
| 33 | - return "<ul class='feed-reader-block-list'>" + | |
| 34 | - self.feed_items.map{ |item| "<li><a href='#{item[:link]}' class='feed-reader-block-item'>#{item[:title]}</a></li>" }.join("\n") + | |
| 35 | - "</ul>" + | |
| 36 | - "<div class='feed-reader-block-fetched-at'>#{_("Updated: %s") % show_date(self.fetched_at)}</div>" | |
| 39 | + _("Updated: %s") % show_date(self.fetched_at) | |
| 37 | 40 | end |
| 38 | 41 | end |
| 39 | 42 | |
| ... | ... | @@ -41,7 +44,7 @@ class FeedReaderBlock < Block |
| 41 | 44 | self.feed_items << {:title => title, :link => link} |
| 42 | 45 | end |
| 43 | 46 | |
| 44 | - def clean | |
| 47 | + def clear | |
| 45 | 48 | self.feed_items = [] |
| 46 | 49 | self.feed_title = nil |
| 47 | 50 | end | ... | ... |
lib/feed_handler.rb
| ... | ... | @@ -23,12 +23,16 @@ class FeedHandler |
| 23 | 23 | end |
| 24 | 24 | |
| 25 | 25 | def process(container) |
| 26 | - content = fetch(container.address) | |
| 27 | - container.fetched_at = Time.now | |
| 28 | - parse = parse(content) | |
| 29 | - container.feed_title = parse.title | |
| 30 | - parse.items[0..container.limit-1].each do |item| | |
| 31 | - container.add_item(item.title, item.link, item.date, item.content) | |
| 26 | + container.class.transaction do | |
| 27 | + container.clear | |
| 28 | + content = fetch(container.address) | |
| 29 | + container.fetched_at = Time.now | |
| 30 | + parse = parse(content) | |
| 31 | + container.feed_title = parse.title | |
| 32 | + parse.items[0..container.limit-1].each do |item| | |
| 33 | + container.add_item(item.title, item.link, item.date, item.content) | |
| 34 | + end | |
| 35 | + container.save! | |
| 32 | 36 | end |
| 33 | 37 | end |
| 34 | 38 | ... | ... |
public/stylesheets/blocks/feed-reader-block.css
| 1 | -.feed-reader-block-fetched-at { | |
| 1 | +#content .feed-reader-block { | |
| 2 | + padding: 10px 0px 10px 10px; | |
| 3 | + overflow: hidden; | |
| 4 | +} | |
| 5 | + | |
| 6 | +.feed-reader-block ul { | |
| 7 | + margin: 0px; | |
| 8 | + padding: 0px 0px 0px 20px; | |
| 9 | +} | |
| 10 | +.feed-reader-block li { | |
| 11 | + margin: 0px; | |
| 12 | + padding: 0px; | |
| 13 | +} | |
| 14 | + | |
| 15 | +.feed-reader-block a { | |
| 16 | + text-decoration: none; | |
| 17 | +} | |
| 18 | + | |
| 19 | +.feed-reader-block .block-footer-content { | |
| 2 | 20 | color: #CCC; |
| 3 | 21 | font-size: 11px; |
| 4 | 22 | text-align: center; | ... | ... |
script/feed-updater
| ... | ... | @@ -4,10 +4,8 @@ require File.dirname(__FILE__) + '/../config/environment' |
| 4 | 4 | FeedReaderBlock.find(:all).each do |feed_block| |
| 5 | 5 | unless feed_block.address.nil? |
| 6 | 6 | begin |
| 7 | - feed_block.clean | |
| 8 | 7 | handler = FeedHandler.new |
| 9 | 8 | handler.process(feed_block) |
| 10 | - feed_block.save! | |
| 11 | 9 | RAILS_DEFAULT_LOGGER.info("%s ID %d fetched at %s" % [feed_block.class.name, feed_block.id, feed_block.fetched_at]) |
| 12 | 10 | rescue FeedHandler::ParseError => ex |
| 13 | 11 | RAILS_DEFAULT_LOGGER.warn("Error parsing content from %s ID %d\n%s" % [feed_block.class.name, feed_block.id, ex.to_s]) | ... | ... |
test/unit/feed_handler_test.rb
| ... | ... | @@ -2,26 +2,9 @@ require File.dirname(__FILE__) + '/../test_helper' |
| 2 | 2 | |
| 3 | 3 | class FeedHandlerTest < Test::Unit::TestCase |
| 4 | 4 | |
| 5 | - class FeedContainer | |
| 6 | - attr_accessor :limit | |
| 7 | - attr_accessor :fetched_at | |
| 8 | - attr_accessor :feed_title | |
| 9 | - attr_accessor :feed_items | |
| 10 | - attr_accessor :address | |
| 11 | - def initialize | |
| 12 | - self.limit = 5 | |
| 13 | - self.feed_title = "Feed Container Mocked" | |
| 14 | - self.feed_items = [] | |
| 15 | - self.address = 'test/fixtures/files/feed.xml' | |
| 16 | - end | |
| 17 | - def add_item(title, link, date, content) | |
| 18 | - self.feed_items << title | |
| 19 | - end | |
| 20 | - end | |
| 21 | - | |
| 22 | 5 | def setup |
| 23 | 6 | @handler = FeedHandler.new |
| 24 | - @container = FeedContainer.new | |
| 7 | + @container = FeedReaderBlock.create!(:box_id => 99999, :address => 'test/fixtures/files/feed.xml') | |
| 25 | 8 | end |
| 26 | 9 | attr_reader :handler, :container |
| 27 | 10 | |
| ... | ... | @@ -43,7 +26,7 @@ class FeedHandlerTest < Test::Unit::TestCase |
| 43 | 26 | should 'process feed and populate container' do |
| 44 | 27 | handler.process(container) |
| 45 | 28 | assert_equal 'Feed for unit tests', container.feed_title |
| 46 | - assert_equal ["Last POST", "Second POST", "First POST"], container.feed_items | |
| 29 | + assert_equal ["Last POST", "Second POST", "First POST"], container.feed_items.map {|item| item[:title]} | |
| 47 | 30 | end |
| 48 | 31 | |
| 49 | 32 | should 'raise exception when parser nil' do |
| ... | ... | @@ -80,4 +63,14 @@ class FeedHandlerTest < Test::Unit::TestCase |
| 80 | 63 | assert_equal 1, container.feed_items.size |
| 81 | 64 | end |
| 82 | 65 | |
| 66 | + should 'clear the container before processing' do | |
| 67 | + container.expects(:clear) | |
| 68 | + handler.process(container) | |
| 69 | + end | |
| 70 | + | |
| 71 | + should 'save after processing' do | |
| 72 | + container.expects(:save!) | |
| 73 | + handler.process(container) | |
| 74 | + end | |
| 75 | + | |
| 83 | 76 | end | ... | ... |
test/unit/feed_reader_block_test.rb
| ... | ... | @@ -52,20 +52,18 @@ class FeedReaderBlockTest < ActiveSupport::TestCase |
| 52 | 52 | end |
| 53 | 53 | |
| 54 | 54 | should 'notice when content not fetched yet' do |
| 55 | - assert_tag_in_string feed.content, :tag => 'p', :content => 'Feed content was not loaded yet' | |
| 55 | + assert_equal'Feed content was not loaded yet', feed.footer | |
| 56 | 56 | end |
| 57 | 57 | |
| 58 | 58 | should 'display last fetched date' do |
| 59 | 59 | feed.feed_items = ['one', 'two'] |
| 60 | - assert_tag_in_string feed.content, :tag => 'div', | |
| 61 | - :content => "Updated: #{show_date(@fetched_at)}", | |
| 62 | - :attributes => {:class => 'feed-reader-block-fetched-at'} | |
| 60 | + assert_equal "Updated: #{show_date(@fetched_at)}", feed.footer | |
| 63 | 61 | end |
| 64 | 62 | |
| 65 | 63 | should 'clear feed title and items' do |
| 66 | 64 | feed.feed_items = %w[ last-post second-post first-post ] |
| 67 | 65 | feed.feed_title = 'Feed Test' |
| 68 | - feed.clean | |
| 66 | + feed.clear | |
| 69 | 67 | assert_nil feed.feed_title |
| 70 | 68 | assert_equal [], feed.feed_items |
| 71 | 69 | end | ... | ... |