Commit 6f7fdaf9ed2c97e07961507e88b34224f73689df

Authored by AntonioTerceiro
1 parent 7d54b7cc

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
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 &lt; 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
... ...