Commit f6f414ce3b8c252779e78cfd1a6470dc03e2e374
Committed by
Dmitriy Zaporozhets
1 parent
ccf8fa4f
Exists in
master
and in
4 other branches
refactoring project team members controller (corresponding mental model)
Showing
8 changed files
with
45 additions
and
40 deletions
Show diff stats
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);; |