gitlab-org--gitlab-foss/app/models/concerns/mentionable.rb

38 lines
861 B
Ruby

# == Mentionable concern
#
# Contains common functionality shared between Issues and Notes
#
# Used by Issue, Note
#
module Mentionable
extend ActiveSupport::Concern
def mentioned_users
users = []
return users if mentionable_text.blank?
has_project = self.respond_to? :project
matches = mentionable_text.scan(/@[a-zA-Z][a-zA-Z0-9_\-\.]*/)
matches.each do |match|
identifier = match.delete "@"
if has_project
id = project.users_projects.joins(:user).where(users: { username: identifier }).pluck(:user_id).first
else
id = User.where(username: identifier).pluck(:id).first
end
users << User.find(id) unless id.blank?
end
users.uniq
end
def mentionable_text
if self.class == Issue
description
elsif self.class == Note
note
else
nil
end
end
end