diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2016-06-15 15:22:05 +0200 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2016-06-15 17:24:39 +0200 |
commit | a8638a7836db073144938ddbf71f93a03b4cd183 (patch) | |
tree | f65164feec14330465aafd0ee7b844cb5d233341 | |
parent | a4a85c269a4f3165914915ede4a9a7642057d105 (diff) | |
download | gitlab-ce-group-owners-association.tar.gz |
Turn Group#owners into a has_many associationgroup-owners-association
This allows the owners to be eager loaded where needed.
-rw-r--r-- | app/models/group.rb | 10 | ||||
-rw-r--r-- | spec/models/group_spec.rb | 12 |
2 files changed, 18 insertions, 4 deletions
diff --git a/app/models/group.rb b/app/models/group.rb index b8dffe9f5b9..e66e04371b2 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -9,6 +9,12 @@ class Group < Namespace has_many :group_members, dependent: :destroy, as: :source, class_name: 'GroupMember' alias_method :members, :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 :shared_projects, through: :project_group_links, source: :project has_many :notification_settings, dependent: :destroy, as: :source @@ -88,10 +94,6 @@ class Group < Namespace end end - def owners - @owners ||= group_members.owners.includes(:user).map(&:user) - end - def add_users(user_ids, access_level, current_user = nil) user_ids.each do |user_id| Member.add_user(self.group_members, user_id, access_level, current_user) diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb index ccdcb29f773..a2bdb344ba0 100644 --- a/spec/models/group_spec.rb +++ b/spec/models/group_spec.rb @@ -158,6 +158,18 @@ describe Group, models: true do it { expect(group.has_master?(@members[:requester])).to be_falsey } end + describe '#owners' do + let(:user1) { create(:user) } + let(:user2) { create(:user) } + + it 'returns the owners of a Group' do + group.add_user(user1, Gitlab::Access::OWNER) + group.add_user(user2, Gitlab::Access::DEVELOPER) + + expect(group.owners).to eq([user1]) + end + end + def setup_group_members(group) members = { owner: create(:user), |