ref: master
app/models/rss_feed.rb
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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
class RssFeed < Article attr_accessible :limit, :enabled, :language, :include, :feed_item_description def self.type_name _('RssFeed') end # i dont know why before filter dont work here def initialize(*args) super(*args) self.advertise = false end # store setting in body serialize :body, Hash def body self[:body] ||= {} end alias :settings :body def feed_item_description self.body[:feed_item_description] end def feed_item_description=(feed_item_description) self.body[:feed_item_description] = feed_item_description end settings_items :limit, :type => :integer, :default => 10 def limit_with_body_change=(value) #UPGRADE Leandro: I add this line to save the serialize attribute self.body_will_change! self.limit_without_body_change= value end alias_method_chain :limit=, :body_change # FIXME this should be validates_numericality_of, but Rails 2.0.2 does not # support validates_numericality_of with virtual attributes validates_format_of :limit, :with => /\d+/, :if => :limit # determinates what to include in the feed. Possible values are +:all+ # (include everything from the profile) and :parent_and_children (include # only articles that are siblings of the feed). # # The feed itself is never included. def include settings[:include] end def include=(value) settings[:include] = value end validates_inclusion_of :include, :in => [ 'all', 'parent_and_children' ], :if => :include # TODO def to_html(options = {}) "" end # RSS feeds have type =text/xml=. def mime_type 'text/xml' end def download?(view = nil) true end include Rails.application.routes.url_helpers def fetch_articles if parent && parent.has_posts? language = self.language.blank? ? {} : { :language => self.language } return parent.posts.where({published: true}.merge language).limit(self.limit).order('id desc') end articles = if (self.include == 'parent_and_children') && self.parent self.parent.map_traversal else profile.last_articles(self.limit) end end def data articles = fetch_articles.select { |a| a != self } FeedWriter.new.write( articles, :title => _("%s's RSS feed") % (self.profile.name), :description => _("%s's content published at %s") % [self.profile.name, self.profile.environment.name], :link => url_for(self.profile.url) ) end def published? if self.parent self.parent.published? else self.published end end def self.short_description _('RSS Feed') end def self.description _('Provides a news feed of your more recent articles.') end def self.icon_name(article = nil) 'rss-feed' end def can_display_hits? false end end |