Commit f9db76298c3d1b7d1f2042969528b7efb9c9f617

Authored by Antonio Terceiro
1 parent 15e3d3ad

ActionItem806: enhancements in RSS feed

app/models/blog.rb
... ... @@ -6,7 +6,7 @@ class Blog < Folder
6 6 attr_accessor :filter
7 7  
8 8 after_create do |blog|
9   - blog.children << RssFeed.new(:name => 'feed', :profile => blog.profile, :include => 'parent_and_children')
  9 + blog.children << RssFeed.new(:name => 'feed', :profile => blog.profile, :feed_item_description => 'body')
10 10 blog.feed = blog.feed_attrs
11 11 end
12 12  
... ...
app/models/rss_feed.rb
... ... @@ -59,14 +59,20 @@ class RssFeed &lt; Article
59 59 end
60 60  
61 61 include ActionController::UrlWriter
62   - def data
  62 + def fetch_articles
  63 + if parent && parent.blog?
  64 + return parent.posts.find(:all, :limit => self.limit, :order => 'id desc')
  65 + end
  66 +
63 67 articles =
64 68 if (self.include == 'parent_and_children') && self.parent
65 69 self.parent.map_traversal
66 70 else
67 71 profile.recent_documents(self.limit || 10)
68 72 end
69   -
  73 + end
  74 + def data
  75 + articles = fetch_articles
70 76  
71 77 result = ""
72 78 xml = Builder::XmlMarkup.new(:target => result)
... ...
lib/acts_as_filesystem.rb
... ... @@ -166,7 +166,7 @@ module ActsAsFileSystem
166 166 result += current_level
167 167 ids = current_level.select {|item| item.children_count > 0}.map(&:id)
168 168 break if ids.empty?
169   - current_level = self.class.find(:all, :conditions => { :parent_id => ids})
  169 + current_level = self.class.base_class.find(:all, :conditions => { :parent_id => ids})
170 170 end
171 171 block ||= (lambda { |x| x })
172 172 result.map(&block)
... ...
test/unit/acts_as_filesystem_test.rb
... ... @@ -73,6 +73,16 @@ class ActsAsFilesystemTest &lt; Test::Unit::TestCase
73 73  
74 74 end
75 75  
  76 + should 'be able to list text articles that are children of a folder' do
  77 + profile = create_user('testinguser').person
  78 + folder = Folder.create!(:name => 'folder', :profile => profile)
  79 + article1 = Article.create(:name => 'article 1', :profile => profile, :parent => folder)
  80 + article2 = Article.create(:name => 'article 2', :profile => profile, :parent => folder)
  81 + folder.reload
  82 +
  83 + assert_equal [folder, article1, article2], folder.map_traversal
  84 + end
  85 +
76 86 should 'allow dots in slug' do
77 87 assert_equal 'test.txt', Article.new(:name => 'test.txt').slug
78 88 end
... ...
test/unit/blog_test.rb
... ... @@ -32,6 +32,12 @@ class BlogTest &lt; ActiveSupport::TestCase
32 32 assert_kind_of RssFeed, b.feed
33 33 end
34 34  
  35 + should 'include articles body in feed by default' do
  36 + p = create_user('testuser').person
  37 + b = Blog.create!(:profile => p, :name => 'blog_feed_test')
  38 + assert_equal 'body', b.feed.feed_item_description
  39 + end
  40 +
35 41 should 'get first blog from profile' do
36 42 p = create_user('testuser').person
37 43 b = Blog.create!(:profile => p, :name => 'blog_feed_test')
... ...
test/unit/rss_feed_test.rb
... ... @@ -107,6 +107,20 @@ class RssFeedTest &lt; Test::Unit::TestCase
107 107 assert_no_match /<item><title>article 2<\/title>/, rss
108 108 end
109 109  
  110 + should 'list blog posts with more recent first and respecting limit' do
  111 + profile = create_user('testuser').person
  112 + blog = Blog.create(:name => 'blog', :profile => profile)
  113 + posts = []
  114 + 6.times do |i|
  115 + posts << TextArticle.create!(:name => "post #{i}", :profile => profile, :parent => blog)
  116 + end
  117 + feed = blog.feed
  118 + feed.limit = 5
  119 + feed.save!
  120 +
  121 + assert_equal [posts[5], posts[4], posts[3], posts[2], posts[1]], feed.fetch_articles
  122 + end
  123 +
110 124 should 'provide link to profile' do
111 125 profile = create_user('testuser').person
112 126 feed = RssFeed.new(:name => 'testfeed')
... ...