Commit d27a79ec04bd611e328d30a976bef7c8ad02526f
Committed by
Antonio Terceiro
1 parent
8f09db6a
Exists in
master
and in
8 other branches
Feed articles are listed even in private profiles
The access to the feed must be controlled by the content viewer access logic, not by the feed. P.S.: I'm not pretty sure if my solution have performance issues! (ActionItem1619)
Showing
3 changed files
with
32 additions
and
4 deletions
Show diff stats
app/models/profile.rb
... | ... | @@ -332,6 +332,16 @@ class Profile < ActiveRecord::Base |
332 | 332 | self.articles.recent(limit, options) |
333 | 333 | end |
334 | 334 | |
335 | + def last_articles(limit = 10, options = {}) | |
336 | + options = { :limit => limit, | |
337 | + :conditions => ["advertise = ? AND published = ? AND | |
338 | + ((articles.type != ? and articles.type != ? and articles.type != ?) OR | |
339 | + articles.type is NULL)", | |
340 | + true, true, 'UploadedFile', 'RssFeed', 'Blog'], | |
341 | + :order => 'articles.published_at desc, articles.id desc' }.merge(options) | |
342 | + self.articles.find(:all, options) | |
343 | + end | |
344 | + | |
335 | 345 | class << self |
336 | 346 | |
337 | 347 | # finds a profile by its identifier. This method is a shortcut to | ... | ... |
app/models/rss_feed.rb
test/unit/rss_feed_test.rb
... | ... | @@ -58,7 +58,7 @@ class RssFeedTest < Test::Unit::TestCase |
58 | 58 | feed = RssFeed.new |
59 | 59 | feed.expects(:profile).returns(profile).at_least_once |
60 | 60 | array = [] |
61 | - profile.expects(:recent_documents).returns(array) | |
61 | + profile.expects(:last_articles).returns(array) | |
62 | 62 | feed.data |
63 | 63 | end |
64 | 64 | |
... | ... | @@ -150,11 +150,11 @@ class RssFeedTest < Test::Unit::TestCase |
150 | 150 | feed.profile = profile |
151 | 151 | feed.save! |
152 | 152 | |
153 | - feed.profile.expects(:recent_documents).with(10).returns([]).once | |
153 | + feed.profile.expects(:last_articles).with(10).returns([]).once | |
154 | 154 | feed.data |
155 | 155 | |
156 | 156 | feed.limit = 5 |
157 | - feed.profile.expects(:recent_documents).with(5).returns([]).once | |
157 | + feed.profile.expects(:last_articles).with(5).returns([]).once | |
158 | 158 | feed.data |
159 | 159 | end |
160 | 160 | |
... | ... | @@ -218,4 +218,22 @@ class RssFeedTest < Test::Unit::TestCase |
218 | 218 | assert_match published_article.to_html, feed.data |
219 | 219 | end |
220 | 220 | |
221 | + should 'display articles even within a private profile' do | |
222 | + profile = create_user('testuser').person | |
223 | + profile.public_profile = false | |
224 | + profile.save! | |
225 | + a1 = profile.articles.build(:name => 'article 1'); a1.save! | |
226 | + a2 = profile.articles.build(:name => 'article 2'); a2.save! | |
227 | + a3 = profile.articles.build(:name => 'article 3'); a3.save! | |
228 | + | |
229 | + feed = RssFeed.new(:name => 'testfeed') | |
230 | + feed.profile = profile | |
231 | + feed.save! | |
232 | + | |
233 | + rss = feed.data | |
234 | + assert_match /<item><title>article 1<\/title>/, rss | |
235 | + assert_match /<item><title>article 2<\/title>/, rss | |
236 | + assert_match /<item><title>article 3<\/title>/, rss | |
237 | + end | |
238 | + | |
221 | 239 | end | ... | ... |