feed_reader_block.rb
2.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
class FeedReaderBlock < Block
attr_accessible :address, :update_errors
def initialize(attributes = nil, options = {})
data = attributes || {}
super(data)
self.enabled= !data[:address].blank?
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 = (new_address && new_address != old_address) || (new_address && self.enabled) || false
self.fetched_at = nil
end
settings_items :limit, :type => :integer
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
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 = []
end
def self.description
_('Feed reader')
end
def help
_('This block can be used to list the latest new from any site you want. You just need to inform the address of a RSS feed.')
end
def default_title
self.feed_title.nil? ? _('Feed Reader') : self.feed_title
end
def formatted_feed_content
if error_message.blank?
"<ul>\n".html_safe +
self.feed_items[0..(limit-1)].map{ |item| "<li><a href='#{item[:link]}'>#{item[:title]}</a></li>" }.join("\n").html_safe +
"</ul>".html_safe
else
"<p>#{error_message}</p>".html_safe
end
end
def footer
if self.fetched_at.nil? or self.feed_items.empty?
_('Feed content was not loaded yet')
else
_("Updated: %s") % show_date(self.fetched_at)
end
end
def add_item(title, link, date, content)
self.feed_items.unshift( {:title => title, :link => link})
end
def clear
self.feed_items = []
self.feed_title = nil
self.error_message = nil
end
def finish_fetch
self.fetched_at = Time.now
self.save!
end
def content(args={})
block_title(title) + formatted_feed_content
end
end