summaryrefslogtreecommitdiff
path: root/app/finders
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-12-13 15:08:02 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2019-12-13 15:08:02 +0000
commit4eeb6b0d16021ab4a730eec4610eff2606421147 (patch)
tree488db828fe58f1e80dc5415970e4c929db7e4c4b /app/finders
parent8cc5f2790908ba9bb8eecba2b78a3c5a88c77b90 (diff)
downloadgitlab-ce-4eeb6b0d16021ab4a730eec4610eff2606421147.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/finders')
-rw-r--r--app/finders/group_members_finder.rb10
-rw-r--r--app/finders/members_finder.rb20
2 files changed, 18 insertions, 12 deletions
diff --git a/app/finders/group_members_finder.rb b/app/finders/group_members_finder.rb
index 165d9adae31..d8739c350e4 100644
--- a/app/finders/group_members_finder.rb
+++ b/app/finders/group_members_finder.rb
@@ -6,15 +6,15 @@ class GroupMembersFinder < UnionFinder
end
# rubocop: disable CodeReuse/ActiveRecord
- def execute(include_descendants: false)
+ def execute(include_relations: [:inherited, :direct])
group_members = @group.members
relations = []
- return group_members unless @group.parent || include_descendants
+ return group_members if include_relations == [:direct]
- relations << group_members
+ relations << group_members if include_relations.include?(:direct)
- if @group.parent
+ if include_relations.include?(:inherited) && @group.parent
parents_members = GroupMember.non_request
.where(source_id: @group.ancestors.select(:id))
.where.not(user_id: @group.users.select(:id))
@@ -22,7 +22,7 @@ class GroupMembersFinder < UnionFinder
relations << parents_members
end
- if include_descendants
+ if include_relations.include?(:descendants)
descendant_members = GroupMember.non_request
.where(source_id: @group.descendants.select(:id))
.where.not(user_id: @group.users.select(:id))
diff --git a/app/finders/members_finder.rb b/app/finders/members_finder.rb
index e8c7f9622a9..a919ff5bf8a 100644
--- a/app/finders/members_finder.rb
+++ b/app/finders/members_finder.rb
@@ -9,14 +9,18 @@ class MembersFinder
@group = project.group
end
- def execute(include_descendants: false, include_invited_groups_members: false)
+ def execute(include_relations: [:inherited, :direct])
project_members = project.project_members
project_members = project_members.non_invite unless can?(current_user, :admin_project, project)
- union_members = group_union_members(include_descendants, include_invited_groups_members)
+ return project_members if include_relations == [:direct]
+
+ union_members = group_union_members(include_relations)
+
+ union_members << project_members if include_relations.include?(:direct)
if union_members.any?
- distinct_union_of_members(union_members << project_members)
+ distinct_union_of_members(union_members)
else
project_members
end
@@ -28,15 +32,17 @@ class MembersFinder
private
- def group_union_members(include_descendants, include_invited_groups_members)
+ def group_union_members(include_relations)
[].tap do |members|
- members << direct_group_members(include_descendants) if group
- members << project_invited_groups_members if include_invited_groups_members
+ members << direct_group_members(include_relations.include?(:descendants)) if group
+ members << project_invited_groups_members if include_relations.include?(:invited_groups_members)
end
end
def direct_group_members(include_descendants)
- GroupMembersFinder.new(group).execute(include_descendants: include_descendants).non_invite # rubocop: disable CodeReuse/Finder
+ requested_relations = [:inherited, :direct]
+ requested_relations << :descendants if include_descendants
+ GroupMembersFinder.new(group).execute(include_relations: requested_relations).non_invite # rubocop: disable CodeReuse/Finder
end
def project_invited_groups_members