Commit 6d1c566ec9f8506500f997c5ab33915e98826f3f

Authored by Andrey Kumanyaev
Committed by Dmitriy Zaporozhets
1 parent c5f427b0

Rename Team class to ProjectTeam

app/models/project.rb
@@ -127,7 +127,7 @@ class Project < ActiveRecord::Base @@ -127,7 +127,7 @@ class Project < ActiveRecord::Base
127 end 127 end
128 128
129 def team 129 def team
130 - @team ||= Team.new(self) 130 + @team ||= ProjectTeam.new(self)
131 end 131 end
132 132
133 def repository 133 def repository
app/models/project_team.rb 0 → 100644
@@ -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