Commit 7024df4e1acc430e2c4b2a3f76c7480b29141770

Authored by Rafael Reggiani Manzo
1 parent 2942e278

Remove PeopleBlock#content

This method was producing view code from within the model which is a
violation of MVC.

Part of the code was extracted into the new helper and most of it became
a view. This follow the standard for using
BoxesHelper#render_block_content.
plugins/people_block/lib/friends_block.rb
@@ -24,7 +24,7 @@ class FriendsBlock < PeopleBlockBase @@ -24,7 +24,7 @@ class FriendsBlock < PeopleBlockBase
24 profile = self.owner 24 profile = self.owner
25 suggestions = self.suggestions 25 suggestions = self.suggestions
26 proc do 26 proc do
27 - render :file => 'blocks/friends', :locals => { :profile => profile, :suggestions => suggestions } 27 + render :file => 'blocks/footers/friends', :locals => { :profile => profile, :suggestions => suggestions }
28 end 28 end
29 end 29 end
30 30
plugins/people_block/lib/members_block.rb
@@ -25,7 +25,7 @@ class MembersBlock < PeopleBlockBase @@ -25,7 +25,7 @@ class MembersBlock < PeopleBlockBase
25 role_key = visible_role 25 role_key = visible_role
26 s = show_join_leave_button 26 s = show_join_leave_button
27 proc do 27 proc do
28 - render :file => 'blocks/members', :locals => { :profile => profile, :show_join_leave_button => s, :role_key => role_key} 28 + render :file => 'blocks/footers/members', :locals => { :profile => profile, :show_join_leave_button => s, :role_key => role_key}
29 end 29 end
30 end 30 end
31 31
plugins/people_block/lib/people_block.rb
@@ -18,7 +18,7 @@ class PeopleBlock < PeopleBlockBase @@ -18,7 +18,7 @@ class PeopleBlock < PeopleBlockBase
18 18
19 def footer 19 def footer
20 proc do 20 proc do
21 - render :file => 'blocks/people' 21 + render :file => 'blocks/footers/people'
22 end 22 end
23 end 23 end
24 24
plugins/people_block/lib/people_block_base.rb
@@ -42,6 +42,7 @@ class PeopleBlockBase < Block @@ -42,6 +42,7 @@ class PeopleBlockBase < Block
42 profiles.visible.count 42 profiles.visible.count
43 end 43 end
44 44
  45 +=begin
45 def content(args={}) 46 def content(args={})
46 profiles = self.profile_list 47 profiles = self.profile_list
47 title = self.view_title 48 title = self.view_title
@@ -84,7 +85,7 @@ class PeopleBlockBase < Block @@ -84,7 +85,7 @@ class PeopleBlockBase < Block
84 block_title(title) + content_tag('div', list + tag('br', :style => 'clear:both')) 85 block_title(title) + content_tag('div', list + tag('br', :style => 'clear:both'))
85 end 86 end
86 end 87 end
87 - 88 +=end
88 def expand_address(address) 89 def expand_address(address)
89 if address !~ /^[a-z]+:\/\// && address !~ /^\// 90 if address !~ /^[a-z]+:\/\// && address !~ /^\//
90 'http://' + address 91 'http://' + address
plugins/people_block/lib/people_block_helper.rb 0 → 100644
@@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
  1 +module PeopleBlockHelper
  2 + def profiles_images_list(profiles)
  3 + profiles.map { |profile| profile_image_link(profile, :minor) }.join("\n")
  4 + end
  5 +
  6 + def set_address_protocol(address)
  7 + !URI.parse(address).scheme ? 'http://'+address : address
  8 + end
  9 +end
plugins/people_block/test/unit/friends_block_test.rb
@@ -60,26 +60,6 @@ class FriendsBlockTest < ActionView::TestCase @@ -60,26 +60,6 @@ class FriendsBlockTest < ActionView::TestCase
60 assert_equal 20, block.limit 60 assert_equal 20, block.limit
61 end 61 end
62 62
63 - should 'list friends from person' do  
64 - owner = fast_create(Person)  
65 - friend1 = fast_create(Person)  
66 - friend2 = fast_create(Person)  
67 - owner.add_friend(friend1)  
68 - owner.add_friend(friend2)  
69 -  
70 - block = FriendsBlock.new  
71 -  
72 - block.expects(:owner).returns(owner).at_least_once  
73 - expects(:profile_image_link).with(friend1, :minor).returns(friend1.name)  
74 - expects(:profile_image_link).with(friend2, :minor).returns(friend2.name)  
75 - expects(:block_title).with(anything).returns('')  
76 -  
77 - content = instance_eval(&block.content)  
78 -  
79 - assert_match(/#{friend1.name}/, content)  
80 - assert_match(/#{friend2.name}/, content)  
81 - end  
82 -  
83 should 'link to "all friends"' do 63 should 'link to "all friends"' do
84 person1 = create_user('mytestperson').person 64 person1 = create_user('mytestperson').person
85 65
@@ -151,3 +131,29 @@ class FriendsBlockTest < ActionView::TestCase @@ -151,3 +131,29 @@ class FriendsBlockTest < ActionView::TestCase
151 include NoosferoTestHelper 131 include NoosferoTestHelper
152 132
153 end 133 end
  134 +
  135 +require 'boxes_helper'
  136 +
  137 +class FriendsBlockViewTest < ActionView::TestCase
  138 + include BoxesHelper
  139 +
  140 + should 'list friends from person' do
  141 + owner = fast_create(Person)
  142 + friend1 = fast_create(Person)
  143 + friend2 = fast_create(Person)
  144 + owner.add_friend(friend1)
  145 + owner.add_friend(friend2)
  146 +
  147 + block = FriendsBlock.new
  148 +
  149 + block.expects(:owner).returns(owner).at_least_once
  150 + ActionView::Base.any_instance.expects(:profile_image_link).with(friend1, :minor).returns(friend1.name)
  151 + ActionView::Base.any_instance.expects(:profile_image_link).with(friend2, :minor).returns(friend2.name)
  152 + ActionView::Base.any_instance.expects(:block_title).with(anything).returns('')
  153 +
  154 + content = render_block_content(block)
  155 +
  156 + assert_match(/#{friend1.name}/, content)
  157 + assert_match(/#{friend2.name}/, content)
  158 + end
  159 +end
plugins/people_block/test/unit/members_block_test.rb
@@ -90,26 +90,6 @@ class MembersBlockTest &lt; ActionView::TestCase @@ -90,26 +90,6 @@ class MembersBlockTest &lt; ActionView::TestCase
90 end 90 end
91 91
92 92
93 - should 'list members from community' do  
94 - owner = fast_create(Community)  
95 - person1 = fast_create(Person)  
96 - person2 = fast_create(Person)  
97 - owner.add_member(person1)  
98 - owner.add_member(person2)  
99 -  
100 - block = MembersBlock.new  
101 -  
102 - block.expects(:owner).returns(owner).at_least_once  
103 - expects(:profile_image_link).with(person1, :minor).returns(person1.name)  
104 - expects(:profile_image_link).with(person2, :minor).returns(person2.name)  
105 - expects(:block_title).with(anything).returns('')  
106 -  
107 - content = instance_eval(&block.content)  
108 -  
109 - assert_match(/#{person1.name}/, content)  
110 - assert_match(/#{person2.name}/, content)  
111 - end  
112 -  
113 should 'count number of public and private members' do 93 should 'count number of public and private members' do
114 owner = fast_create(Community) 94 owner = fast_create(Community)
115 private_p = fast_create(Person, {:public_profile => false}) 95 private_p = fast_create(Person, {:public_profile => false})
@@ -299,3 +279,31 @@ class MembersBlockTest &lt; ActionView::TestCase @@ -299,3 +279,31 @@ class MembersBlockTest &lt; ActionView::TestCase
299 include NoosferoTestHelper 279 include NoosferoTestHelper
300 280
301 end 281 end
  282 +
  283 +require 'boxes_helper'
  284 +
  285 +class MembersBlockViewTest < ActionView::TestCase
  286 + include BoxesHelper
  287 +
  288 + should 'list members from community' do
  289 + owner = fast_create(Community)
  290 + person1 = fast_create(Person)
  291 + person2 = fast_create(Person)
  292 + owner.add_member(person1)
  293 + owner.add_member(person2)
  294 + profile = Profile.new
  295 + profile.identifier = 42
  296 +
  297 + block = MembersBlock.new
  298 +
  299 + block.expects(:owner).returns(owner).at_least_once
  300 + ActionView::Base.any_instance.expects(:profile_image_link).with(person1, :minor).returns(person1.name)
  301 + ActionView::Base.any_instance.expects(:profile_image_link).with(person2, :minor).returns(person2.name)
  302 + ActionView::Base.any_instance.expects(:block_title).with(anything).returns('')
  303 +
  304 + content = render_block_content(block)
  305 +
  306 + assert_match(/#{person1.name}/, content)
  307 + assert_match(/#{person2.name}/, content)
  308 + end
  309 +end
plugins/people_block/test/unit/people_block_helper_test.rb 0 → 100644
@@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
  1 +require 'test_helper'
  2 +
  3 +class PeopleBlockHelperTest < ActionView::TestCase
  4 + include PeopleBlockHelper
  5 +
  6 + should 'list profiles as images links' do
  7 + owner = fast_create(Environment)
  8 + profiles = [
  9 + fast_create(Person, :environment_id => owner.id),
  10 + fast_create(Person, :environment_id => owner.id),
  11 + fast_create(Person, :environment_id => owner.id)
  12 + ]
  13 + link_html = "<a href=#><img src='' /></a>"
  14 +
  15 + profiles.each do |profile|
  16 + expects(:profile_image_link).with(profile, :minor).returns(link_html)
  17 + end
  18 +
  19 + list = profiles_images_list(profiles)
  20 +
  21 + assert_equal list, ([link_html]*profiles.count).join("\n")
  22 + end
  23 +
  24 + should 'prepend the protocol to urls missing it' do
  25 + address = 'noosfero.org'
  26 +
  27 + assert_equal set_address_protocol(address), 'http://'+address
  28 + end
  29 +
  30 + should 'leave urls already with protocol unchanged' do
  31 + address = 'http://noosfero.org'
  32 + ssl_address = 'https://noosfero.org'
  33 +
  34 + assert_equal set_address_protocol(address), address
  35 + assert_equal set_address_protocol(ssl_address), ssl_address
  36 + end
  37 +end
0 \ No newline at end of file 38 \ No newline at end of file
plugins/people_block/test/unit/people_block_test.rb
@@ -85,25 +85,6 @@ class PeopleBlockTest &lt; ActionView::TestCase @@ -85,25 +85,6 @@ class PeopleBlockTest &lt; ActionView::TestCase
85 end 85 end
86 86
87 87
88 - should 'list people from environment' do  
89 - owner = fast_create(Environment)  
90 - person1 = fast_create(Person, :environment_id => owner.id)  
91 - person2 = fast_create(Person, :environment_id => owner.id)  
92 -  
93 - block = PeopleBlock.new  
94 -  
95 - block.expects(:owner).returns(owner).at_least_once  
96 - expects(:profile_image_link).with(person1, :minor).returns(person1.name)  
97 - expects(:profile_image_link).with(person2, :minor).returns(person2.name)  
98 - expects(:block_title).with(anything).returns('')  
99 -  
100 - content = instance_exec(&block.content)  
101 -  
102 - assert_match(/#{person1.name}/, content)  
103 - assert_match(/#{person2.name}/, content)  
104 - end  
105 -  
106 -  
107 should 'link to "all people"' do 88 should 'link to "all people"' do
108 env = fast_create(Environment) 89 env = fast_create(Environment)
109 block = PeopleBlock.new 90 block = PeopleBlock.new
@@ -142,3 +123,27 @@ class PeopleBlockTest &lt; ActionView::TestCase @@ -142,3 +123,27 @@ class PeopleBlockTest &lt; ActionView::TestCase
142 include NoosferoTestHelper 123 include NoosferoTestHelper
143 124
144 end 125 end
  126 +
  127 +require 'boxes_helper'
  128 +
  129 +class PeopleBlockViewTest < ActionView::TestCase
  130 + include BoxesHelper
  131 +
  132 + should 'list people from environment' do
  133 + owner = fast_create(Environment)
  134 + person1 = fast_create(Person, :environment_id => owner.id)
  135 + person2 = fast_create(Person, :environment_id => owner.id)
  136 +
  137 + block = PeopleBlock.new
  138 +
  139 + block.expects(:owner).returns(owner).at_least_once
  140 + ActionView::Base.any_instance.expects(:profile_image_link).with(person1, :minor).returns(person1.name)
  141 + ActionView::Base.any_instance.expects(:profile_image_link).with(person2, :minor).returns(person2.name)
  142 + ActionView::Base.any_instance.stubs(:block_title).returns("")
  143 +
  144 + content = render_block_content(block)
  145 +
  146 + assert_match(/#{person1.name}/, content)
  147 + assert_match(/#{person2.name}/, content)
  148 + end
  149 +end
plugins/people_block/views/blocks/footers/friends.html.erb 0 → 100644
@@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
  1 +<%= link_to s_('friends|View all'), {:profile => profile.identifier, :controller => 'profile', :action => 'friends'}, :class => 'view-all' %>
  2 +
  3 +<% if !suggestions.empty? && user == profile %>
  4 + <div class='suggestions-block common-profile-list-block'>
  5 + <h4 class='block-subtitle'><%= _('Some suggestions for you') %></h4>
  6 + <div class='profiles-suggestions'>
  7 + <%= render :partial => 'shared/profile_suggestions_list', :locals => { :suggestions => suggestions, :collection => :friends_suggestions } %>
  8 + </div>
  9 + <div class='more-suggestions'>
  10 + <%= link_to _('See all suggestions'), profile.people_suggestions_url %>
  11 + </div>
  12 + </div>
  13 +<% end %>
plugins/people_block/views/blocks/footers/members.html.erb 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +<% anchor = role_key == "profile_admin" ? "admins-tab" : "members-tab" %>
  2 +<%= link_to c_('View all'), {:profile => profile.identifier, :controller => 'profile', :action => 'members', :anchor =>anchor }, :class => 'view-all' %>
  3 +
  4 +<% if show_join_leave_button %>
  5 + <%= render :partial => 'blocks/profile_info_actions/join_leave_community' %>
  6 +<% end %>
plugins/people_block/views/blocks/footers/people.html.erb 0 → 100644
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +<%= link_to c_('View all'), {:controller => 'search', :action => 'people'}, :class => 'view-all' %>
plugins/people_block/views/blocks/friends.html.erb
@@ -1,13 +0,0 @@ @@ -1,13 +0,0 @@
1 -<%= link_to s_('friends|View all'), {:profile => profile.identifier, :controller => 'profile', :action => 'friends'}, :class => 'view-all' %>  
2 -  
3 -<% if !suggestions.empty? && user == profile %>  
4 - <div class='suggestions-block common-profile-list-block'>  
5 - <h4 class='block-subtitle'><%= _('Some suggestions for you') %></h4>  
6 - <div class='profiles-suggestions'>  
7 - <%= render :partial => 'shared/profile_suggestions_list', :locals => { :suggestions => suggestions, :collection => :friends_suggestions } %>  
8 - </div>  
9 - <div class='more-suggestions'>  
10 - <%= link_to _('See all suggestions'), profile.people_suggestions_url %>  
11 - </div>  
12 - </div>  
13 -<% end %>  
plugins/people_block/views/blocks/members.html.erb
@@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
1 -<% anchor = role_key == "profile_admin" ? "admins-tab" : "members-tab" %>  
2 -<%= link_to c_('View all'), {:profile => profile.identifier, :controller => 'profile', :action => 'members', :anchor =>anchor }, :class => 'view-all' %>  
3 -  
4 -<% if show_join_leave_button %>  
5 - <%= render :partial => 'blocks/profile_info_actions/join_leave_community' %>  
6 -<% end %>  
plugins/people_block/views/blocks/people.html.erb
@@ -1 +0,0 @@ @@ -1 +0,0 @@
1 -<%= link_to c_('View all'), {:controller => 'search', :action => 'people'}, :class => 'view-all' %>  
plugins/people_block/views/blocks/people_base.html.erb 0 → 100644
@@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
  1 +<% extend PeopleBlockHelper %>
  2 +
  3 +<%= block_title(block.view_title) %>
  4 +
  5 +<div>
  6 + <% unless block.profiles.count == 0 %>
  7 + <ul>
  8 + <%= profiles_images_list(block.profiles) %>
  9 +
  10 + <% unless block.name.blank? || block.address.blank? %>
  11 + <div class="common-profile-list-block">
  12 + <li class="vcard">
  13 + <div class="banner-div">
  14 + <%= link_to(
  15 + content_tag('span', block.name, :class => 'banner-span' ),
  16 + set_address_protocol(block.address),
  17 + title: block.name
  18 + ) %>
  19 + </div>
  20 + </li>
  21 + </div>
  22 + <% end %>
  23 + </ul>
  24 + <% else %>
  25 + <div class="common-profile-list-block-none"><%= c_('None') %></div>
  26 + <% end %>
  27 + <br style="clear:both" />
  28 +</div>