Refactor Member#add_user for GitLab EE

GitLab EE extends Member#add_user by adding some LDAP specific flags.
Prior to these changes, the only way this could be done was by modifying
Member#add_user in place. This could lead to merge conflicts whenever a
developer wants to change this method.

To resolve this issue, the logic that EE extends has been moved into a
separate method with the appropriate arguments. This allows EE to extend
the logic by prepending the method using an EE specific module.
This commit is contained in:
Yorick Peterse 2018-11-15 16:09:27 +01:00
parent 379ed169f7
commit 0aa386f75c
No known key found for this signature in database
GPG key ID: EDD30D2BEB691AC9

View file

@ -152,11 +152,13 @@ class Member < ActiveRecord::Base
return member unless can_update_member?(current_user, member) return member unless can_update_member?(current_user, member)
member.attributes = { set_member_attributes(
created_by: member.created_by || current_user, member,
access_level: access_level, access_level,
expires_at: expires_at current_user: current_user,
} expires_at: expires_at,
ldap: ldap
)
if member.request? if member.request?
::Members::ApproveAccessRequestService.new( ::Members::ApproveAccessRequestService.new(
@ -175,6 +177,18 @@ class Member < ActiveRecord::Base
# rubocop: enable CodeReuse/ServiceClass # rubocop: enable CodeReuse/ServiceClass
end end
# Populates the attributes of a member.
#
# This logic resides in a separate method so that EE can extend this logic,
# without having to patch the `add_user` method directly.
def set_member_attributes(member, access_level, current_user: nil, expires_at: nil, ldap: false)
member.attributes = {
created_by: member.created_by || current_user,
access_level: access_level,
expires_at: expires_at
}
end
def add_users(source, users, access_level, current_user: nil, expires_at: nil) def add_users(source, users, access_level, current_user: nil, expires_at: nil)
return [] unless users.present? return [] unless users.present?