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 | 7 | end |
| 8 | 8 | |
| 9 | 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 | 12 | end |
| 13 | 13 | |
| 14 | 14 | def new |
| 15 | - @team_member = project.users_projects.new | |
| 15 | + @user_project_relation = project.users_projects.new | |
| 16 | 16 | end |
| 17 | 17 | |
| 18 | 18 | def create |
| ... | ... | @@ -28,18 +28,18 @@ class TeamMembersController < ProjectResourceController |
| 28 | 28 | end |
| 29 | 29 | |
| 30 | 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 | 35 | flash[:alert] = "User should have at least one role" |
| 36 | 36 | end |
| 37 | 37 | redirect_to project_team_index_path(@project) |
| 38 | 38 | end |
| 39 | 39 | |
| 40 | 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 | 44 | respond_to do |format| |
| 45 | 45 | format.html { redirect_to project_team_index_path(@project) } |
| ... | ... | @@ -54,4 +54,10 @@ class TeamMembersController < ProjectResourceController |
| 54 | 54 | |
| 55 | 55 | redirect_to project_team_members_path(project), notice: notice |
| 56 | 56 | end |
| 57 | + | |
| 58 | + protected | |
| 59 | + | |
| 60 | + def member | |
| 61 | + @member ||= User.find(params[:id]) | |
| 62 | + end | |
| 57 | 63 | end | ... | ... |
app/helpers/projects_helper.rb
| ... | ... | @@ -3,8 +3,8 @@ module ProjectsHelper |
| 3 | 3 | @project.users_projects.sort_by(&:project_access).reverse.group_by(&:project_access) |
| 4 | 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 | 8 | end |
| 9 | 9 | |
| 10 | 10 | def link_to_project project | ... | ... |
app/views/team_members/_form.html.haml
| 1 | 1 | %h3.page_title |
| 2 | 2 | = "New Team member(s)" |
| 3 | 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 | 6 | .alert-message.block-message.error |
| 7 | 7 | %ul |
| 8 | - - @team_member.errors.full_messages.each do |msg| | |
| 8 | + - @user_project_relation.errors.full_messages.each do |msg| | |
| 9 | 9 | %li= msg |
| 10 | 10 | |
| 11 | 11 | %h6 1. Choose people you want in the team |
| ... | ... | @@ -16,7 +16,7 @@ |
| 16 | 16 | %h6 2. Set access level for them |
| 17 | 17 | .clearfix |
| 18 | 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 | 21 | .actions |
| 22 | 22 | = f.submit 'Save', class: "btn save-btn" | ... | ... |
app/views/team_members/_show.html.haml
| 1 | 1 | - user = member.user |
| 2 | 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 | 4 | .row |
| 5 | 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 | 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 | 9 | %strong= truncate(user.name, lenght: 40) |
| 10 | 10 | %br |
| 11 | 11 | %small.cgray= user.email |
| ... | ... | @@ -13,7 +13,7 @@ |
| 13 | 13 | .span5.right |
| 14 | 14 | - if allow_admin |
| 15 | 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 | 17 | = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select span2" |
| 18 | 18 | .right |
| 19 | 19 | - if current_user == user |
| ... | ... | @@ -23,6 +23,6 @@ |
| 23 | 23 | - elsif user.blocked |
| 24 | 24 | %span.btn.disabled.blocked Blocked |
| 25 | 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 | 27 | %i.icon-minus.icon-white |
| 28 | 28 | ... | ... |
app/views/team_members/create.js.haml
app/views/team_members/index.html.haml
app/views/team_members/show.html.haml
| 1 | 1 | - allow_admin = can? current_user, :admin_project, @project |
| 2 | -- user = @team_member.user | |
| 3 | 2 | |
| 4 | 3 | .team_member_show |
| 5 | 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 | 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 | 8 | %h3.page_title |
| 10 | - = user.name | |
| 11 | - %small (@#{user.username}) | |
| 9 | + = @member.name | |
| 10 | + %small (@#{@member.username}) | |
| 12 | 11 | |
| 13 | 12 | %hr |
| 14 | 13 | .back_link |
| ... | ... | @@ -21,34 +20,34 @@ |
| 21 | 20 | %table.lite |
| 22 | 21 | %tr |
| 23 | 22 | %td Email |
| 24 | - %td= mail_to user.email | |
| 23 | + %td= mail_to @member.email | |
| 25 | 24 | %tr |
| 26 | 25 | %td Skype |
| 27 | - %td= user.skype | |
| 28 | - - unless user.linkedin.blank? | |
| 26 | + %td= @member.skype | |
| 27 | + - unless @member.linkedin.blank? | |
| 29 | 28 | %tr |
| 30 | 29 | %td LinkedIn |
| 31 | - %td= user.linkedin | |
| 32 | - - unless user.twitter.blank? | |
| 30 | + %td= @member.linkedin | |
| 31 | + - unless @member.twitter.blank? | |
| 33 | 32 | %tr |
| 34 | 33 | %td Twitter |
| 35 | - %td= user.twitter | |
| 36 | - - unless user.bio.blank? | |
| 34 | + %td= @member.twitter | |
| 35 | + - unless @member.bio.blank? | |
| 37 | 36 | %tr |
| 38 | 37 | %td Bio |
| 39 | - %td= user.bio | |
| 38 | + %td= @member.bio | |
| 40 | 39 | .span6 |
| 41 | 40 | %table.lite |
| 42 | 41 | %tr |
| 43 | 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 | 44 | %tr |
| 46 | 45 | %td |
| 47 | 46 | Project Access: |
| 48 | 47 | %small (#{link_to "read more", help_permissions_path, class: "vlink"}) |
| 49 | 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 | 51 | %hr |
| 53 | 52 | = render @events |
| 54 | 53 | :javascript | ... | ... |
app/views/team_members/update.js.haml
| 1 | -- if @team_member.valid? | |
| 1 | +- if @user_project_relation.valid? | |
| 2 | 2 | :plain |
| 3 | - $("##{dom_id(@team_member)}").effect("highlight", {color: "#529214"}, 1000);; | |
| 3 | + $("##{dom_id(@user_project_relation)}").effect("highlight", {color: "#529214"}, 1000);; | |
| 4 | 4 | - else |
| 5 | 5 | :plain |
| 6 | - $("##{dom_id(@team_member)}").effect("highlight", {color: "#D12F19"}, 1000);; | |
| 6 | + $("##{dom_id(@user_project_relation)}").effect("highlight", {color: "#D12F19"}, 1000);; | ... | ... |