From d2bd60675913bba47a6c3fb43a282da6bfe20646 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Fri, 27 Mar 2015 11:45:06 +0100 Subject: [PATCH] Refactor Mentionable mentioned users to use ReferenceExtractor. --- app/models/concerns/mentionable.rb | 23 ++++++----------------- lib/gitlab/reference_extractor.rb | 12 ++++++++++-- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/app/models/concerns/mentionable.rb b/app/models/concerns/mentionable.rb index 52eb87d1dbc..db75a34f592 100644 --- a/app/models/concerns/mentionable.rb +++ b/app/models/concerns/mentionable.rb @@ -43,28 +43,17 @@ module Mentionable end 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 identifier == "all" - users.push(*project.team.members.flatten) - elsif namespace = Namespace.find_by(path: identifier) - if namespace.is_a?(Group) - users.push(*namespace.users) - else - users << namespace.owner - end - end - end - users.uniq + return [] if mentionable_text.blank? + + ext = Gitlab::ReferenceExtractor.new(self.project) + ext.analyze(text) + ext.users.uniq end # Extract GFM references to other Mentionables from this Mentionable. Always excludes its #local_reference. def references(p = project, text = mentionable_text) return [] if text.blank? + ext = Gitlab::ReferenceExtractor.new(p) ext.analyze(text) diff --git a/lib/gitlab/reference_extractor.rb b/lib/gitlab/reference_extractor.rb index 3bf6f14a7bc..422d35aceb7 100644 --- a/lib/gitlab/reference_extractor.rb +++ b/lib/gitlab/reference_extractor.rb @@ -34,8 +34,16 @@ module Gitlab def users references[:users].map do |entry| - project.users.where(username: entry[:id]).first - end.compact + if entry[:id] == "all" + project.team.members.flatten + elsif namespace = Namespace.find_by(path: entry[:id]) + if namespace.is_a?(Group) + namespace.users + else + namespace.owner + end + end + end.flatten.compact end def labels