Commit cfb2b54198c2f4048663bffcd0c809b2f1df4af1

Authored by Rodrigo Souto
Committed by Daniela Feitosa
1 parent 8c5ac225

ProfileListBlock option to prioritize profiles with image

(ActionItem1800)
app/models/profile_list_block.rb
1 1 class ProfileListBlock < Block
2 2  
3 3 settings_items :limit, :type => :integer, :default => 6
  4 + settings_items :prioritize_profiles_with_image, :type => :boolean, :default => false
4 5  
5 6 def self.description
6 7 _('Random profiles')
... ... @@ -12,8 +13,7 @@ class ProfileListBlock &lt; Block
12 13 end
13 14  
14 15 def profile_list
15   - random = randomizer
16   - profiles.visible.all(:limit => limit, :select => 'DISTINCT profiles.*, ' + random, :order => random)
  16 + profiles.visible.all(:include => :image, :limit => limit, :select => 'DISTINCT profiles.*, ' + image_prioritizer + randomizer, :order => image_prioritizer + randomizer)
17 17 end
18 18  
19 19 def profile_count
... ... @@ -24,6 +24,10 @@ class ProfileListBlock &lt; Block
24 24 @randomizer ||= "(profiles.id % #{rand(profile_count) + 1})"
25 25 end
26 26  
  27 + def image_prioritizer
  28 + prioritize_profiles_with_image ? '(images.id is null),' : ''
  29 + end
  30 +
27 31 # the title of the block. Probably will be overriden in subclasses.
28 32 def default_title
29 33 _('{#} People or Groups')
... ...
app/views/box_organizer/_profile_list_block.rhtml
1 1 <div id='edit-profile-list-block'>
2 2 <%= labelled_form_field _('Limit of items'), text_field(:block, :limit, :size => 3) %>
  3 + <%= labelled_form_field _('Prioritize profiles with image'), check_box(:block, :prioritize_profiles_with_image) %>
3 4 </div>
4 5  
... ...
test/unit/profile_list_block_test.rb
... ... @@ -145,7 +145,7 @@ class ProfileListBlockTest &lt; Test::Unit::TestCase
145 145 block.stubs(:owner).returns(env)
146 146  
147 147 # force the "random" function to return something we know
148   - block.stubs(:randomizer).returns('-id')
  148 + block.stubs(:randomizer).returns('-profiles.id')
149 149  
150 150 assert_equal [p3.id, p2.id, p1.id], block.profile_list.map(&:id)
151 151 end
... ... @@ -164,4 +164,23 @@ class ProfileListBlockTest &lt; Test::Unit::TestCase
164 164 assert_no_match /profiles.id % 0/, block.randomizer
165 165 end
166 166  
  167 + should 'prioritize profiles with image if this option is turned on' do
  168 + env = fast_create(Environment)
  169 + p1 = fast_create(Person, :environment_id => env.id)
  170 + img1 = Image.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :owner => p1)
  171 + p2 = fast_create(Person, :environment_id => env.id)
  172 + img2 = Image.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :owner => p2)
  173 +
  174 + p_without_image = fast_create(Person, :environment_id => env.id)
  175 +
  176 + block = ProfileListBlock.new
  177 + block.stubs(:owner).returns(env)
  178 + block.stubs(:prioritize_profiles_with_image).returns(true)
  179 +
  180 + # force the "random" function to return something we know
  181 + block.stubs(:randomizer).returns('-profiles.id')
  182 +
  183 + assert_not_includes block.profile_list[0..1], p_without_image
  184 + end
  185 +
167 186 end
... ...