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