diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-12-13 15:08:02 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-12-13 15:08:02 +0000 |
commit | 4eeb6b0d16021ab4a730eec4610eff2606421147 (patch) | |
tree | 488db828fe58f1e80dc5415970e4c929db7e4c4b /app/finders | |
parent | 8cc5f2790908ba9bb8eecba2b78a3c5a88c77b90 (diff) | |
download | gitlab-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.rb | 10 | ||||
-rw-r--r-- | app/finders/members_finder.rb | 20 |
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 |