Commit b443571b3a01df50cf007e97afeb42b5ddb2d6e4

Authored by AntonioTerceiro
1 parent e2a20332

ActionItem23: checkpoint



git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1121 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/models/rss_feed.rb
@@ -17,8 +17,16 @@ class RssFeed < Article @@ -17,8 +17,16 @@ class RssFeed < Article
17 'text/xml' 17 'text/xml'
18 end 18 end
19 19
20 - # FIXME - feed real data into the RSS feed 20 + # FIXME feed real data into the RSS feed
21 def data 21 def data
  22 + articles =
  23 + if (self.settings[:include] == :parent_and_children) && self.parent
  24 + self.parent.map_traversal
  25 + else
  26 + profile.recent_documents(10)
  27 + end
  28 +
  29 +
22 result = "" 30 result = ""
23 xml = Builder::XmlMarkup.new(:target => result) 31 xml = Builder::XmlMarkup.new(:target => result)
24 32
@@ -29,14 +37,20 @@ class RssFeed < Article @@ -29,14 +37,20 @@ class RssFeed < Article
29 xml.link("http://www.yourDomain.com") 37 xml.link("http://www.yourDomain.com")
30 xml.description('Description here') 38 xml.description('Description here')
31 xml.language("pt_BR") 39 xml.language("pt_BR")
32 - for article in profile.recent_documents(10)  
33 - xml.item do  
34 - xml.title(article.name)  
35 - xml.description(article.abstract)  
36 - # rfc822  
37 - xml.pubDate(article.created_on.rfc2822)  
38 - xml.link("http://www.yourDomain.com/linkToYourPost")  
39 - xml.guid("http://www.yourDomain.com/linkToYourPost") 40 + for article in articles
  41 + unless self == article
  42 + xml.item do
  43 + xml.title(article.name)
  44 + if self.settings[:description] == :body
  45 + xml.description(article.body)
  46 + else
  47 + xml.description(article.abstract)
  48 + end
  49 + # rfc822
  50 + xml.pubDate(article.created_on.rfc2822)
  51 + xml.link("http://www.yourDomain.com/linkToYourPost")
  52 + xml.guid("http://www.yourDomain.com/linkToYourPost")
  53 + end
40 end 54 end
41 end 55 end
42 end 56 end
test/unit/rss_feed_test.rb
@@ -11,8 +11,8 @@ class RssFeedTest < Test::Unit::TestCase @@ -11,8 +11,8 @@ class RssFeedTest < Test::Unit::TestCase
11 assert_kind_of Hash, feed.body 11 assert_kind_of Hash, feed.body
12 12
13 feed.body = { 13 feed.body = {
14 - :include => :abstract,  
15 - :search => :parent, 14 + :description => :abstract,
  15 + :search => :parent_and_children,
16 } 16 }
17 feed.valid? 17 feed.valid?
18 assert !feed.errors.invalid?(:body) 18 assert !feed.errors.invalid?(:body)
@@ -34,9 +34,23 @@ class RssFeedTest < Test::Unit::TestCase @@ -34,9 +34,23 @@ class RssFeedTest < Test::Unit::TestCase
34 feed.save! 34 feed.save!
35 35
36 rss = feed.data 36 rss = feed.data
37 - assert_match /<title>article 1<\/title>/, rss  
38 - assert_match /<title>article 2<\/title>/, rss  
39 - assert_match /<title>article 3<\/title>/, rss 37 + assert_match /<item><title>article 1<\/title>/, rss
  38 + assert_match /<item><title>article 2<\/title>/, rss
  39 + assert_match /<item><title>article 3<\/title>/, rss
  40 + end
  41 +
  42 + should 'not list self' do
  43 + profile = create_user('testuser').person
  44 + a1 = profile.articles.build(:name => 'article 1'); a1.save!
  45 + a2 = profile.articles.build(:name => 'article 2'); a2.save!
  46 + a3 = profile.articles.build(:name => 'article 3'); a3.save!
  47 +
  48 + feed = RssFeed.new(:name => 'feed')
  49 + feed.profile = profile
  50 + feed.save!
  51 +
  52 + rss = feed.data
  53 + assert_no_match /<item><title>feed<\/title>/, rss
40 end 54 end
41 55
42 should 'list recent article from parent article' do 56 should 'list recent article from parent article' do
@@ -49,13 +63,47 @@ class RssFeedTest &lt; Test::Unit::TestCase @@ -49,13 +63,47 @@ class RssFeedTest &lt; Test::Unit::TestCase
49 end 63 end
50 64
51 should 'be able to choose to put abstract or entire body on feed' do 65 should 'be able to choose to put abstract or entire body on feed' do
52 - #feed = RssFeed.new  
53 - #feed.  
54 - flunk 'pending' 66 + profile = create_user('testuser').person
  67 + a1 = profile.articles.build(:name => 'article 1', :abstract => 'my abstract', :body => 'my text'); a1.save!
  68 +
  69 + feed = RssFeed.new(:name => 'feed')
  70 + feed.profile = profile
  71 + feed.save!
  72 +
  73 + rss = feed.data
  74 + assert_match /<description>my abstract<\/description>/, rss
  75 + assert_no_match /<description>my text<\/description>/, rss
  76 +
  77 + feed.settings[:description] = :body
  78 + rss = feed.data
  79 + assert_match /<description>my text<\/description>/, rss
  80 + assert_no_match /<description>my abstract<\/description>/, rss
55 end 81 end
56 82
57 - should 'be able to choose search in all articles or in subarticles of parent' do  
58 - flunk 'pending' 83 + should "be able to search only children of feed's parent" do
  84 + profile = create_user('testuser').person
  85 + a1 = profile.articles.build(:name => 'article 1'); a1.save!
  86 + a2 = profile.articles.build(:name => 'article 2'); a2.save!
  87 +
  88 + a3 = profile.articles.build(:name => 'article 3'); a3.save!
  89 + a3_1 = a3.children.build(:name => 'article 3.1', :parent => a3, :profile => profile); a3_1.save!
  90 + a3_2 = a3.children.build(:name => 'article 3.2', :parent => a3, :profile => profile); a3_2.save!
  91 + a3_2_1 = a3_2.children.build(:name => 'article 3.2.1', :parent => a3_2, :profile => profile); a3_2_1.save!
  92 +
  93 + feed = RssFeed.new(:name => 'feed')
  94 + feed.parent = a3
  95 + feed.profile = profile
  96 + feed.settings[:include] = :parent_and_children
  97 + feed.save!
  98 +
  99 + rss = feed.data
  100 + assert_match /<item><title>article 3<\/title>/, rss
  101 + assert_match /<item><title>article 3\.1<\/title>/, rss
  102 + assert_match /<item><title>article 3\.2<\/title>/, rss
  103 + assert_match /<item><title>article 3\.2\.1<\/title>/, rss
  104 +
  105 + assert_no_match /<item><title>article 1<\/title>/, rss
  106 + assert_no_match /<item><title>article 2<\/title>/, rss
59 end 107 end
60 108
61 should 'be able to indicate maximum number of items' do 109 should 'be able to indicate maximum number of items' do