Commit f6f414ce3b8c252779e78cfd1a6470dc03e2e374

Authored by Andrey Kumanyaev
Committed by Dmitriy Zaporozhets
1 parent ccf8fa4f

refactoring project team members controller (corresponding mental model)

app/controllers/team_members_controller.rb
@@ -7,12 +7,12 @@ class TeamMembersController < ProjectResourceController @@ -7,12 +7,12 @@ class TeamMembersController < ProjectResourceController
7 end 7 end
8 8
9 def show 9 def show
10 - @team_member = project.users_projects.find(params[:id])  
11 - @events = @team_member.user.recent_events.where(:project_id => @project.id).limit(7) 10 + @user_project_relation = project.users_projects.find_by_user_id(member)
  11 + @events = member.recent_events.in_projects(project).limit(7)
12 end 12 end
13 13
14 def new 14 def new
15 - @team_member = project.users_projects.new 15 + @user_project_relation = project.users_projects.new
16 end 16 end
17 17
18 def create 18 def create
@@ -28,18 +28,18 @@ class TeamMembersController < ProjectResourceController @@ -28,18 +28,18 @@ class TeamMembersController < ProjectResourceController
28 end 28 end
29 29
30 def update 30 def update
31 - @team_member = project.users_projects.find(params[:id])  
32 - @team_member.update_attributes(params[:team_member]) 31 + @user_project_relation = project.users_projects.find_by_user_id(member)
  32 + @user_project_relation.update_attributes(params[:team_member])
33 33
34 - unless @team_member.valid? 34 + unless @user_project_relation.valid?
35 flash[:alert] = "User should have at least one role" 35 flash[:alert] = "User should have at least one role"
36 end 36 end
37 redirect_to project_team_index_path(@project) 37 redirect_to project_team_index_path(@project)
38 end 38 end
39 39
40 def destroy 40 def destroy
41 - @team_member = project.users_projects.find(params[:id])  
42 - @team_member.destroy 41 + @user_project_relation = project.users_projects.find_by_user_id(params[:id])
  42 + @user_project_relation.destroy
43 43
44 respond_to do |format| 44 respond_to do |format|
45 format.html { redirect_to project_team_index_path(@project) } 45 format.html { redirect_to project_team_index_path(@project) }
@@ -54,4 +54,10 @@ class TeamMembersController < ProjectResourceController @@ -54,4 +54,10 @@ class TeamMembersController < ProjectResourceController
54 54
55 redirect_to project_team_members_path(project), notice: notice 55 redirect_to project_team_members_path(project), notice: notice
56 end 56 end
  57 +
  58 + protected
  59 +
  60 + def member
  61 + @member ||= User.find(params[:id])
  62 + end
57 end 63 end
app/helpers/projects_helper.rb
@@ -3,8 +3,8 @@ module ProjectsHelper @@ -3,8 +3,8 @@ module ProjectsHelper
3 @project.users_projects.sort_by(&:project_access).reverse.group_by(&:project_access) 3 @project.users_projects.sort_by(&:project_access).reverse.group_by(&:project_access)
4 end 4 end
5 5
6 - def remove_from_team_message(project, member)  
7 - "You are going to remove #{member.user_name} from #{project.name}. Are you sure?" 6 + def remove_from_project_team_message(project, user)
  7 + "You are going to remove #{user.name} from #{project.name} project team. Are you sure?"
8 end 8 end
9 9
10 def link_to_project project 10 def link_to_project project
app/views/team_members/_form.html.haml
1 %h3.page_title 1 %h3.page_title
2 = "New Team member(s)" 2 = "New Team member(s)"
3 %hr 3 %hr
4 -= form_for @team_member, as: :team_member, url: project_team_members_path(@project, @team_member) do |f|  
5 - -if @team_member.errors.any? 4 += form_for @user_project_relation, as: :team_member, url: project_team_members_path(@project) do |f|
  5 + -if @user_project_relation.errors.any?
6 .alert-message.block-message.error 6 .alert-message.block-message.error
7 %ul 7 %ul
8 - - @team_member.errors.full_messages.each do |msg| 8 + - @user_project_relation.errors.full_messages.each do |msg|
9 %li= msg 9 %li= msg
10 10
11 %h6 1. Choose people you want in the team 11 %h6 1. Choose people you want in the team
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 %h6 2. Set access level for them 16 %h6 2. Set access level for them
17 .clearfix 17 .clearfix
18 = f.label :project_access, "Project Access" 18 = f.label :project_access, "Project Access"
19 - .input= select_tag :project_access, options_for_select(Project.access_options, @team_member.project_access), class: "project-access-select chosen" 19 + .input= select_tag :project_access, options_for_select(Project.access_options, @user_project_relation.project_access), class: "project-access-select chosen"
20 20
21 .actions 21 .actions
22 = f.submit 'Save', class: "btn save-btn" 22 = f.submit 'Save', class: "btn save-btn"
app/views/team_members/_show.html.haml
1 - user = member.user 1 - user = member.user
2 - allow_admin = can? current_user, :admin_project, @project 2 - allow_admin = can? current_user, :admin_project, @project
3 -%li{id: dom_id(member), class: "team_member_row user_#{user.id}"} 3 +%li{id: dom_id(user), class: "team_member_row user_#{user.id}"}
4 .row 4 .row
5 .span6 5 .span6
6 - = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do 6 + = link_to project_team_member_path(@project, user), title: user.name, class: "dark" do
7 = image_tag gravatar_icon(user.email, 40), class: "avatar s32" 7 = image_tag gravatar_icon(user.email, 40), class: "avatar s32"
8 - = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do 8 + = link_to project_team_member_path(@project, user), title: user.name, class: "dark" do
9 %strong= truncate(user.name, lenght: 40) 9 %strong= truncate(user.name, lenght: 40)
10 %br 10 %br
11 %small.cgray= user.email 11 %small.cgray= user.email
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 .span5.right 13 .span5.right
14 - if allow_admin 14 - if allow_admin
15 .left 15 .left
16 - = form_for(member, as: :team_member, url: project_team_member_path(@project, member)) do |f| 16 + = form_for(member, as: :team_member, url: project_team_member_path(@project, member.user)) do |f|
17 = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select span2" 17 = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select span2"
18 .right 18 .right
19 - if current_user == user 19 - if current_user == user
@@ -23,6 +23,6 @@ @@ -23,6 +23,6 @@
23 - elsif user.blocked 23 - elsif user.blocked
24 %span.btn.disabled.blocked Blocked 24 %span.btn.disabled.blocked Blocked
25 - elsif allow_admin 25 - elsif allow_admin
26 - = link_to project_team_member_path(project_id: @project, id: member.id), confirm: remove_from_team_message(@project, member), method: :delete, class: "very_small btn danger" do 26 + = link_to project_team_member_path(@project, user), confirm: remove_from_project_team_message(@project, user), method: :delete, class: "very_small btn danger" do
27 %i.icon-minus.icon-white 27 %i.icon-minus.icon-white
28 28
app/views/team_members/create.js.haml
1 -- if @team_member.valid? 1 +- if @user_project_relation.valid?
2 :plain 2 :plain
3 $("#new_team_member").hide("slide", { direction: "right" }, 150, function(){ 3 $("#new_team_member").hide("slide", { direction: "right" }, 150, function(){
4 $("#team-table").show("slide", { direction: "left" }, 150, function() { 4 $("#team-table").show("slide", { direction: "left" }, 150, function() {
app/views/team_members/index.html.haml
1 = render "projects/project_head" 1 = render "projects/project_head"
2 %h3.page_title 2 %h3.page_title
3 Team Members 3 Team Members
4 - (#{@project.users_projects.count}) 4 + (#{@project.users.count})
5 %small 5 %small
6 Read more about project permissions 6 Read more about project permissions
7 %strong= link_to "here", help_permissions_path, class: "vlink" 7 %strong= link_to "here", help_permissions_path, class: "vlink"
app/views/team_members/show.html.haml
1 - allow_admin = can? current_user, :admin_project, @project 1 - allow_admin = can? current_user, :admin_project, @project
2 -- user = @team_member.user  
3 2
4 .team_member_show 3 .team_member_show
5 - if can? current_user, :admin_project, @project 4 - if can? current_user, :admin_project, @project
6 - = link_to 'Remove from team', project_team_member_path(project_id: @project, id: @team_member.id), confirm: 'Are you sure?', method: :delete, class: "right btn danger" 5 + = link_to 'Remove from team', project_team_member_path(@project, @member), confirm: 'Are you sure?', method: :delete, class: "right btn danger"
7 .profile_avatar_holder 6 .profile_avatar_holder
8 - = image_tag gravatar_icon(user.email, 60), class: "borders" 7 + = image_tag gravatar_icon(@member.email, 60), class: "borders"
9 %h3.page_title 8 %h3.page_title
10 - = user.name  
11 - %small (@#{user.username}) 9 + = @member.name
  10 + %small (@#{@member.username})
12 11
13 %hr 12 %hr
14 .back_link 13 .back_link
@@ -21,34 +20,34 @@ @@ -21,34 +20,34 @@
21 %table.lite 20 %table.lite
22 %tr 21 %tr
23 %td Email 22 %td Email
24 - %td= mail_to user.email 23 + %td= mail_to @member.email
25 %tr 24 %tr
26 %td Skype 25 %td Skype
27 - %td= user.skype  
28 - - unless user.linkedin.blank? 26 + %td= @member.skype
  27 + - unless @member.linkedin.blank?
29 %tr 28 %tr
30 %td LinkedIn 29 %td LinkedIn
31 - %td= user.linkedin  
32 - - unless user.twitter.blank? 30 + %td= @member.linkedin
  31 + - unless @member.twitter.blank?
33 %tr 32 %tr
34 %td Twitter 33 %td Twitter
35 - %td= user.twitter  
36 - - unless user.bio.blank? 34 + %td= @member.twitter
  35 + - unless @member.bio.blank?
37 %tr 36 %tr
38 %td Bio 37 %td Bio
39 - %td= user.bio 38 + %td= @member.bio
40 .span6 39 .span6
41 %table.lite 40 %table.lite
42 %tr 41 %tr
43 %td Member since 42 %td Member since
44 - %td= @team_member.created_at.stamp("Aug 21, 2011") 43 + %td= @user_project_relation.created_at.stamp("Aug 21, 2011")
45 %tr 44 %tr
46 %td 45 %td
47 Project Access: 46 Project Access:
48 %small (#{link_to "read more", help_permissions_path, class: "vlink"}) 47 %small (#{link_to "read more", help_permissions_path, class: "vlink"})
49 %td 48 %td
50 - = form_for(@team_member, as: :team_member, url: project_team_member_path(@project, @team_member)) do |f|  
51 - = f.select :project_access, options_for_select(Project.access_options, @team_member.project_access), {}, class: "project-access-select", disabled: !allow_admin 49 + = form_for(@user_project_relation, as: :team_member, url: project_team_member_path(@project, @member)) do |f|
  50 + = f.select :project_access, options_for_select(Project.access_options, @user_project_relation.project_access), {}, class: "project-access-select", disabled: !allow_admin
52 %hr 51 %hr
53 = render @events 52 = render @events
54 :javascript 53 :javascript
app/views/team_members/update.js.haml
1 -- if @team_member.valid? 1 +- if @user_project_relation.valid?
2 :plain 2 :plain
3 - $("##{dom_id(@team_member)}").effect("highlight", {color: "#529214"}, 1000);; 3 + $("##{dom_id(@user_project_relation)}").effect("highlight", {color: "#529214"}, 1000);;
4 - else 4 - else
5 :plain 5 :plain
6 - $("##{dom_id(@team_member)}").effect("highlight", {color: "#D12F19"}, 1000);; 6 + $("##{dom_id(@user_project_relation)}").effect("highlight", {color: "#D12F19"}, 1000);;