From c6960ded8acc5f01a3b00aea2e1c1de6e6981af9 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 21 Apr 2017 17:07:42 +0300 Subject: Refactor add_users method for project and group Signed-off-by: Dmitriy Zaporozhets --- app/models/member.rb | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'app/models/member.rb') diff --git a/app/models/member.rb b/app/models/member.rb index 0545bd4eedf..97fba501759 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -151,6 +151,22 @@ class Member < ActiveRecord::Base member end + def add_users(source, users, access_level, current_user: nil, expires_at: nil) + return [] unless users.present? + + self.transaction do + users.map do |user| + add_user( + source, + user, + access_level, + current_user: current_user, + expires_at: expires_at + ) + end + end + end + def access_levels Gitlab::Access.sym_options end @@ -173,18 +189,6 @@ class Member < ActiveRecord::Base # There is no current user for bulk actions, in which case anything is allowed !current_user || current_user.can?(:"update_#{member.type.underscore}", member) end - - def add_users_to_source(source, users, access_level, current_user: nil, expires_at: nil) - users.each do |user| - add_user( - source, - user, - access_level, - current_user: current_user, - expires_at: expires_at - ) - end - end end def real_source_type -- cgit v1.2.1 From b8dc4c761dd5277188320c74633122b8a3a3173a Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 28 Apr 2017 11:50:11 +0300 Subject: Collect all users by single query when using Member#add_users Signed-off-by: Dmitriy Zaporozhets --- app/models/member.rb | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'app/models/member.rb') diff --git a/app/models/member.rb b/app/models/member.rb index 97fba501759..7228e82e978 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -154,6 +154,11 @@ class Member < ActiveRecord::Base def add_users(source, users, access_level, current_user: nil, expires_at: nil) return [] unless users.present? + # Collect all user ids into separate array + # so we can use single sql query to get user objects + user_ids = users.select { |user| user =~ /\A\d+\Z/ } + users = users - user_ids + User.where(id: user_ids) + self.transaction do users.map do |user| add_user( -- cgit v1.2.1