Simplify ProjectTeam#fetch_members to satisfy flog
This commit is contained in:
parent
b674ab529a
commit
b7b41d1f68
1 changed files with 40 additions and 30 deletions
|
@ -163,7 +163,7 @@ class ProjectTeam
|
|||
|
||||
# Each group produces a list of maximum access level per user. We take the
|
||||
# max of the values produced by each group.
|
||||
if project.invited_groups.any? && project.allowed_to_share_with_group?
|
||||
if project_shared_with_group?
|
||||
project.project_group_links.each do |group_link|
|
||||
invited_access = max_invited_level_for_users(group_link, user_ids)
|
||||
merge_max!(access, invited_access)
|
||||
|
@ -200,35 +200,6 @@ class ProjectTeam
|
|||
def fetch_members(level = nil)
|
||||
project_members = project.members
|
||||
group_members = group ? group.members : []
|
||||
invited_members = []
|
||||
|
||||
if project.invited_groups.any? && project.allowed_to_share_with_group?
|
||||
project.project_group_links.includes(group: [:group_members]).each do |group_link|
|
||||
invited_group = group_link.group
|
||||
im = invited_group.members
|
||||
|
||||
if level
|
||||
int_level = GroupMember.access_level_roles[level.to_s.singularize.titleize]
|
||||
|
||||
# Skip group members if we ask for masters
|
||||
# but max group access is developers
|
||||
next if int_level > group_link.group_access
|
||||
|
||||
# If we ask for developers and max
|
||||
# group access is developers we need to provide
|
||||
# both group master, developers as devs
|
||||
if int_level == group_link.group_access
|
||||
im.where("access_level >= ?)", group_link.group_access)
|
||||
else
|
||||
im.send(level)
|
||||
end
|
||||
end
|
||||
|
||||
invited_members << im
|
||||
end
|
||||
|
||||
invited_members = invited_members.flatten.compact
|
||||
end
|
||||
|
||||
if level
|
||||
project_members = project_members.send(level)
|
||||
|
@ -236,7 +207,10 @@ class ProjectTeam
|
|||
end
|
||||
|
||||
user_ids = project_members.pluck(:user_id)
|
||||
|
||||
invited_members = fetch_invited_members(level)
|
||||
user_ids.push(*invited_members.map(&:user_id)) if invited_members.any?
|
||||
|
||||
user_ids.push(*group_members.pluck(:user_id)) if group
|
||||
|
||||
User.where(id: user_ids)
|
||||
|
@ -249,4 +223,40 @@ class ProjectTeam
|
|||
def merge_max!(first_hash, second_hash)
|
||||
first_hash.merge!(second_hash) { |_key, old, new| old > new ? old : new }
|
||||
end
|
||||
|
||||
def project_shared_with_group?
|
||||
project.invited_groups.any? && project.allowed_to_share_with_group?
|
||||
end
|
||||
|
||||
def fetch_invited_members(level = nil)
|
||||
invited_members = []
|
||||
|
||||
return invited_members unless project_shared_with_group?
|
||||
|
||||
project.project_group_links.includes(group: [:group_members]).each do |group_link|
|
||||
invited_group = group_link.group
|
||||
im = invited_group.members
|
||||
|
||||
if level
|
||||
int_level = GroupMember.access_level_roles[level.to_s.singularize.titleize]
|
||||
|
||||
# Skip group members if we ask for masters
|
||||
# but max group access is developers
|
||||
next if int_level > group_link.group_access
|
||||
|
||||
# If we ask for developers and max
|
||||
# group access is developers we need to provide
|
||||
# both group master, developers as devs
|
||||
if int_level == group_link.group_access
|
||||
im.where("access_level >= ?)", group_link.group_access)
|
||||
else
|
||||
im.send(level)
|
||||
end
|
||||
end
|
||||
|
||||
invited_members << im
|
||||
end
|
||||
|
||||
invited_members.flatten.compact
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue