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 24 profile = self.owner
25 25 suggestions = self.suggestions
26 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 28 end
29 29 end
30 30  
... ...
plugins/people_block/lib/members_block.rb
... ... @@ -25,7 +25,7 @@ class MembersBlock < PeopleBlockBase
25 25 role_key = visible_role
26 26 s = show_join_leave_button
27 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 29 end
30 30 end
31 31  
... ...
plugins/people_block/lib/people_block.rb
... ... @@ -18,7 +18,7 @@ class PeopleBlock < PeopleBlockBase
18 18  
19 19 def footer
20 20 proc do
21   - render :file => 'blocks/people'
  21 + render :file => 'blocks/footers/people'
22 22 end
23 23 end
24 24  
... ...
plugins/people_block/lib/people_block_base.rb
... ... @@ -42,6 +42,7 @@ class PeopleBlockBase < Block
42 42 profiles.visible.count
43 43 end
44 44  
  45 +=begin
45 46 def content(args={})
46 47 profiles = self.profile_list
47 48 title = self.view_title
... ... @@ -84,7 +85,7 @@ class PeopleBlockBase < Block
84 85 block_title(title) + content_tag('div', list + tag('br', :style => 'clear:both'))
85 86 end
86 87 end
87   -
  88 +=end
88 89 def expand_address(address)
89 90 if address !~ /^[a-z]+:\/\// && address !~ /^\//
90 91 'http://' + address
... ...
plugins/people_block/lib/people_block_helper.rb 0 → 100644
... ... @@ -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 60 assert_equal 20, block.limit
61 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 63 should 'link to "all friends"' do
84 64 person1 = create_user('mytestperson').person
85 65  
... ... @@ -151,3 +131,29 @@ class FriendsBlockTest < ActionView::TestCase
151 131 include NoosferoTestHelper
152 132  
153 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 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 93 should 'count number of public and private members' do
114 94 owner = fast_create(Community)
115 95 private_p = fast_create(Person, {:public_profile => false})
... ... @@ -299,3 +279,31 @@ class MembersBlockTest &lt; ActionView::TestCase
299 279 include NoosferoTestHelper
300 280  
301 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 @@
  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 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 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 88 should 'link to "all people"' do
108 89 env = fast_create(Environment)
109 90 block = PeopleBlock.new
... ... @@ -142,3 +123,27 @@ class PeopleBlockTest &lt; ActionView::TestCase
142 123 include NoosferoTestHelper
143 124  
144 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 @@
  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 @@
  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 @@
  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   -<%= 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   -<% 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   -<%= 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 @@
  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>
... ...