38 lines
861 B
Ruby
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
|