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 |