summaryrefslogtreecommitdiff
path: root/app/models/member.rb
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-04-14 12:33:27 +0200
committerDouwe Maan <douwe@gitlab.com>2015-04-14 12:41:19 +0200
commit0013ea5130494326f37fb1d6988a369fa2c91d22 (patch)
tree78f8e3313ddb3d25be139673e0e0b08b1f5366e3 /app/models/member.rb
parenta8b462bbfe3647574e17c483aad27281c2adc5f2 (diff)
downloadgitlab-ce-0013ea5130494326f37fb1d6988a369fa2c91d22.tar.gz
Remove duplication between Group and ProjectMember.
Diffstat (limited to 'app/models/member.rb')
-rw-r--r--app/models/member.rb36
1 files changed, 33 insertions, 3 deletions
diff --git a/app/models/member.rb b/app/models/member.rb
index 2421222eaa2..9340c442172 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -52,9 +52,39 @@ class Member < ActiveRecord::Base
delegate :name, :username, :email, to: :user, prefix: true
- def self.find_by_invite_token(invite_token)
- invite_token = Devise.token_generator.digest(self, :invite_token, invite_token)
- find_by(invite_token: invite_token)
+ class << self
+ def find_by_invite_token(invite_token)
+ invite_token = Devise.token_generator.digest(self, :invite_token, invite_token)
+ find_by(invite_token: invite_token)
+ end
+
+ # This method is used to find users that have been entered into the "Add members" field.
+ # These can be the User objects directly, their IDs, their emails, or new emails to be invited.
+ def user_for_id(user_id)
+ return user_id if user_id.is_a?(User)
+
+ user = User.find_by(id: user_id)
+ user ||= User.find_by(email: user_id)
+ user ||= user_id
+ user
+ end
+
+ def add_user(members, user_id, access_level, current_user = nil)
+ user = user_for_id(user_id)
+
+ # `user` can be either a User object or an email to be invited
+ if user.is_a?(User)
+ member = members.find_or_initialize_by(user_id: user.id)
+ else
+ member = members.build
+ member.invite_email = user
+ end
+
+ member.created_by ||= current_user
+ member.access_level = access_level
+
+ member.save
+ end
end
def invite?