Turn Group#owners into a has_many association
This allows the owners to be eager loaded where needed.
This commit is contained in:
parent
a4a85c269a
commit
84e2be5a5f
|
@ -9,6 +9,12 @@ class Group < Namespace
|
||||||
has_many :group_members, dependent: :destroy, as: :source, class_name: 'GroupMember'
|
has_many :group_members, dependent: :destroy, as: :source, class_name: 'GroupMember'
|
||||||
alias_method :members, :group_members
|
alias_method :members, :group_members
|
||||||
has_many :users, -> { where(members: { requested_at: nil }) }, through: :group_members
|
has_many :users, -> { where(members: { requested_at: nil }) }, through: :group_members
|
||||||
|
|
||||||
|
has_many :owners,
|
||||||
|
-> { where(members: { access_level: Gitlab::Access::OWNER }) },
|
||||||
|
through: :group_members,
|
||||||
|
source: :user
|
||||||
|
|
||||||
has_many :project_group_links, dependent: :destroy
|
has_many :project_group_links, dependent: :destroy
|
||||||
has_many :shared_projects, through: :project_group_links, source: :project
|
has_many :shared_projects, through: :project_group_links, source: :project
|
||||||
has_many :notification_settings, dependent: :destroy, as: :source
|
has_many :notification_settings, dependent: :destroy, as: :source
|
||||||
|
@ -88,10 +94,6 @@ class Group < Namespace
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def owners
|
|
||||||
@owners ||= group_members.owners.includes(:user).map(&:user)
|
|
||||||
end
|
|
||||||
|
|
||||||
def add_users(user_ids, access_level, current_user = nil)
|
def add_users(user_ids, access_level, current_user = nil)
|
||||||
user_ids.each do |user_id|
|
user_ids.each do |user_id|
|
||||||
Member.add_user(self.group_members, user_id, access_level, current_user)
|
Member.add_user(self.group_members, user_id, access_level, current_user)
|
||||||
|
|
|
@ -158,6 +158,18 @@ describe Group, models: true do
|
||||||
it { expect(group.has_master?(@members[:requester])).to be_falsey }
|
it { expect(group.has_master?(@members[:requester])).to be_falsey }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#owners' do
|
||||||
|
let(:owner) { create(:user) }
|
||||||
|
let(:developer) { create(:user) }
|
||||||
|
|
||||||
|
it 'returns the owners of a Group' do
|
||||||
|
group.add_owner(owner)
|
||||||
|
group.add_developer(developer)
|
||||||
|
|
||||||
|
expect(group.owners).to eq([owner])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def setup_group_members(group)
|
def setup_group_members(group)
|
||||||
members = {
|
members = {
|
||||||
owner: create(:user),
|
owner: create(:user),
|
||||||
|
|
Loading…
Reference in New Issue