Commit 6d1c566ec9f8506500f997c5ab33915e98826f3f
Committed by
Dmitriy Zaporozhets
1 parent
c5f427b0
Exists in
master
and in
4 other branches
Rename Team class to ProjectTeam
Showing
3 changed files
with
123 additions
and
123 deletions
Show diff stats
app/models/project.rb
| ... | ... | @@ -0,0 +1,122 @@ |
| 1 | +class ProjectTeam | |
| 2 | + attr_accessor :project | |
| 3 | + | |
| 4 | + def initialize(project) | |
| 5 | + @project = project | |
| 6 | + end | |
| 7 | + | |
| 8 | + # Shortcut to add users | |
| 9 | + # | |
| 10 | + # Use: | |
| 11 | + # @team << [@user, :master] | |
| 12 | + # @team << [@users, :master] | |
| 13 | + # | |
| 14 | + def << args | |
| 15 | + users = args.first | |
| 16 | + | |
| 17 | + if users.respond_to?(:each) | |
| 18 | + add_users(users, args.second) | |
| 19 | + else | |
| 20 | + add_user(users, args.second) | |
| 21 | + end | |
| 22 | + end | |
| 23 | + | |
| 24 | + def get_tm user_id | |
| 25 | + project.users_projects.find_by_user_id(user_id) | |
| 26 | + end | |
| 27 | + | |
| 28 | + def add_user(user, access) | |
| 29 | + add_users_ids([user.id], access) | |
| 30 | + end | |
| 31 | + | |
| 32 | + def add_users(users, access) | |
| 33 | + add_users_ids(users.map(&:id), access) | |
| 34 | + end | |
| 35 | + | |
| 36 | + def add_users_ids(user_ids, access) | |
| 37 | + UsersProject.add_users_into_projects( | |
| 38 | + [project.id], | |
| 39 | + user_ids, | |
| 40 | + access | |
| 41 | + ) | |
| 42 | + end | |
| 43 | + | |
| 44 | + # Remove all users from project team | |
| 45 | + def truncate | |
| 46 | + UsersProject.truncate_team(project) | |
| 47 | + end | |
| 48 | + | |
| 49 | + def members | |
| 50 | + project.users_projects | |
| 51 | + end | |
| 52 | + | |
| 53 | + def guests | |
| 54 | + members.guests.map(&:user) | |
| 55 | + end | |
| 56 | + | |
| 57 | + def reporters | |
| 58 | + members.reporters.map(&:user) | |
| 59 | + end | |
| 60 | + | |
| 61 | + def developers | |
| 62 | + members.developers.map(&:user) | |
| 63 | + end | |
| 64 | + | |
| 65 | + def masters | |
| 66 | + members.masters.map(&:user) | |
| 67 | + end | |
| 68 | + | |
| 69 | + def repository_readers | |
| 70 | + repository_members[UsersProject::REPORTER] | |
| 71 | + end | |
| 72 | + | |
| 73 | + def repository_writers | |
| 74 | + repository_members[UsersProject::DEVELOPER] | |
| 75 | + end | |
| 76 | + | |
| 77 | + def repository_masters | |
| 78 | + repository_members[UsersProject::MASTER] | |
| 79 | + end | |
| 80 | + | |
| 81 | + def repository_members | |
| 82 | + keys = Hash.new {|h,k| h[k] = [] } | |
| 83 | + UsersProject.select("keys.identifier, project_access"). | |
| 84 | + joins(user: :keys).where(project_id: project.id). | |
| 85 | + each {|row| keys[row.project_access] << [row.identifier] } | |
| 86 | + | |
| 87 | + keys[UsersProject::REPORTER] += project.deploy_keys.pluck(:identifier) | |
| 88 | + keys | |
| 89 | + end | |
| 90 | + | |
| 91 | + def import(source_project) | |
| 92 | + target_project = project | |
| 93 | + | |
| 94 | + source_team = source_project.users_projects.all | |
| 95 | + target_team = target_project.users_projects.all | |
| 96 | + target_user_ids = target_team.map(&:user_id) | |
| 97 | + | |
| 98 | + source_team.reject! do |tm| | |
| 99 | + # Skip if user already present in team | |
| 100 | + target_user_ids.include?(tm.user_id) | |
| 101 | + end | |
| 102 | + | |
| 103 | + source_team.map! do |tm| | |
| 104 | + new_tm = tm.dup | |
| 105 | + new_tm.id = nil | |
| 106 | + new_tm.project_id = target_project.id | |
| 107 | + new_tm.skip_git = true | |
| 108 | + new_tm | |
| 109 | + end | |
| 110 | + | |
| 111 | + UsersProject.transaction do | |
| 112 | + source_team.each do |tm| | |
| 113 | + tm.save | |
| 114 | + end | |
| 115 | + target_project.update_repository | |
| 116 | + end | |
| 117 | + | |
| 118 | + true | |
| 119 | + rescue | |
| 120 | + false | |
| 121 | + end | |
| 122 | +end | ... | ... |
app/models/team.rb
| ... | ... | @@ -1,122 +0,0 @@ |
| 1 | -class Team | |
| 2 | - attr_accessor :project | |
| 3 | - | |
| 4 | - def initialize(project) | |
| 5 | - @project = project | |
| 6 | - end | |
| 7 | - | |
| 8 | - # Shortcut to add users | |
| 9 | - # | |
| 10 | - # Use: | |
| 11 | - # @team << [@user, :master] | |
| 12 | - # @team << [@users, :master] | |
| 13 | - # | |
| 14 | - def << args | |
| 15 | - users = args.first | |
| 16 | - | |
| 17 | - if users.respond_to?(:each) | |
| 18 | - add_users(users, args.second) | |
| 19 | - else | |
| 20 | - add_user(users, args.second) | |
| 21 | - end | |
| 22 | - end | |
| 23 | - | |
| 24 | - def get_tm user_id | |
| 25 | - project.users_projects.find_by_user_id(user_id) | |
| 26 | - end | |
| 27 | - | |
| 28 | - def add_user(user, access) | |
| 29 | - add_users_ids([user.id], access) | |
| 30 | - end | |
| 31 | - | |
| 32 | - def add_users(users, access) | |
| 33 | - add_users_ids(users.map(&:id), access) | |
| 34 | - end | |
| 35 | - | |
| 36 | - def add_users_ids(user_ids, access) | |
| 37 | - UsersProject.add_users_into_projects( | |
| 38 | - [project.id], | |
| 39 | - user_ids, | |
| 40 | - access | |
| 41 | - ) | |
| 42 | - end | |
| 43 | - | |
| 44 | - # Remove all users from project team | |
| 45 | - def truncate | |
| 46 | - UsersProject.truncate_team(project) | |
| 47 | - end | |
| 48 | - | |
| 49 | - def members | |
| 50 | - project.users_projects | |
| 51 | - end | |
| 52 | - | |
| 53 | - def guests | |
| 54 | - members.guests.map(&:user) | |
| 55 | - end | |
| 56 | - | |
| 57 | - def reporters | |
| 58 | - members.reporters.map(&:user) | |
| 59 | - end | |
| 60 | - | |
| 61 | - def developers | |
| 62 | - members.developers.map(&:user) | |
| 63 | - end | |
| 64 | - | |
| 65 | - def masters | |
| 66 | - members.masters.map(&:user) | |
| 67 | - end | |
| 68 | - | |
| 69 | - def repository_readers | |
| 70 | - repository_members[UsersProject::REPORTER] | |
| 71 | - end | |
| 72 | - | |
| 73 | - def repository_writers | |
| 74 | - repository_members[UsersProject::DEVELOPER] | |
| 75 | - end | |
| 76 | - | |
| 77 | - def repository_masters | |
| 78 | - repository_members[UsersProject::MASTER] | |
| 79 | - end | |
| 80 | - | |
| 81 | - def repository_members | |
| 82 | - keys = Hash.new {|h,k| h[k] = [] } | |
| 83 | - UsersProject.select("keys.identifier, project_access"). | |
| 84 | - joins(user: :keys).where(project_id: project.id). | |
| 85 | - each {|row| keys[row.project_access] << [row.identifier] } | |
| 86 | - | |
| 87 | - keys[UsersProject::REPORTER] += project.deploy_keys.pluck(:identifier) | |
| 88 | - keys | |
| 89 | - end | |
| 90 | - | |
| 91 | - def import(source_project) | |
| 92 | - target_project = project | |
| 93 | - | |
| 94 | - source_team = source_project.users_projects.all | |
| 95 | - target_team = target_project.users_projects.all | |
| 96 | - target_user_ids = target_team.map(&:user_id) | |
| 97 | - | |
| 98 | - source_team.reject! do |tm| | |
| 99 | - # Skip if user already present in team | |
| 100 | - target_user_ids.include?(tm.user_id) | |
| 101 | - end | |
| 102 | - | |
| 103 | - source_team.map! do |tm| | |
| 104 | - new_tm = tm.dup | |
| 105 | - new_tm.id = nil | |
| 106 | - new_tm.project_id = target_project.id | |
| 107 | - new_tm.skip_git = true | |
| 108 | - new_tm | |
| 109 | - end | |
| 110 | - | |
| 111 | - UsersProject.transaction do | |
| 112 | - source_team.each do |tm| | |
| 113 | - tm.save | |
| 114 | - end | |
| 115 | - target_project.update_repository | |
| 116 | - end | |
| 117 | - | |
| 118 | - true | |
| 119 | - rescue | |
| 120 | - false | |
| 121 | - end | |
| 122 | -end |