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 @@ | @@ -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,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 |