Commit 6f7fdaf9ed2c97e07961507e88b34224f73689df
1 parent
7d54b7cc
Exists in
master
and in
28 other branches
ActionItem43: using a finder in ProfileListBlock instead of looking explicitly
in Profile. This way subclasses can just override the finder and reuse the logic of the list generation. git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1342 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
2 changed files
with
28 additions
and
1 deletions
Show diff stats
app/models/profile_list_block.rb
| ... | ... | @@ -6,9 +6,25 @@ class ProfileListBlock < Block |
| 6 | 6 | _('A block that displays random profiles') |
| 7 | 7 | end |
| 8 | 8 | |
| 9 | + # Override this method to make the block list specific types of profiles | |
| 10 | + # instead of anyone. | |
| 11 | + # | |
| 12 | + # In this class this method just returns <tt>Profile</tt> (the class). In | |
| 13 | + # subclasses you could return <tt>Person</tt>, for instance, if you only want | |
| 14 | + # to list people, or <tt>Organization</tt>, if you want organizations only. | |
| 15 | + # | |
| 16 | + # You don't need to return only classes. You can for instance return an | |
| 17 | + # association array from a has_many ActiveRecord association, for example. | |
| 18 | + # Actually the only requirement for the object returned by this method is to | |
| 19 | + # have a <tt>find</tt> method that accepts the same interface as the | |
| 20 | + # ActiveRecord::Base's find method . | |
| 21 | + def profile_finder | |
| 22 | + Profile | |
| 23 | + end | |
| 24 | + | |
| 9 | 25 | def profiles |
| 10 | 26 | # FIXME pick random people instead |
| 11 | - Profile.find(:all, :limit => self.limit, :order => 'created_at desc') | |
| 27 | + profile_finder.find(:all, :limit => self.limit, :order => 'created_at desc') | |
| 12 | 28 | end |
| 13 | 29 | |
| 14 | 30 | def random(top) | ... | ... |
test/unit/profile_list_block_test.rb
| ... | ... | @@ -40,6 +40,17 @@ class ProfileListBlockTest < Test::Unit::TestCase |
| 40 | 40 | assert_kind_of String, instance_eval(&block.content) |
| 41 | 41 | end |
| 42 | 42 | |
| 43 | + should 'find in Profile by default' do | |
| 44 | + assert_equal Profile, ProfileListBlock.new.profile_finder | |
| 45 | + end | |
| 46 | + | |
| 47 | + should 'ask profile finder for profiles' do | |
| 48 | + block = ProfileListBlock.new | |
| 49 | + block.expects(:profile_finder).returns(Profile).once | |
| 50 | + Profile.expects(:find).returns([]) | |
| 51 | + block.profiles | |
| 52 | + end | |
| 53 | + | |
| 43 | 54 | should 'pick random people' |
| 44 | 55 | |
| 45 | 56 | should 'use Kernel.rand to generate random numbers' do | ... | ... |