summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-03-27 11:45:06 +0100
committerDouwe Maan <douwe@gitlab.com>2015-04-02 10:57:01 +0200
commitd2bd60675913bba47a6c3fb43a282da6bfe20646 (patch)
treed609ba4bdb2a06103857e8ad771e99962e375902
parentca58e369c9f2a72402cfcf4d86d29c115b1b909c (diff)
downloadgitlab-ce-d2bd60675913bba47a6c3fb43a282da6bfe20646.tar.gz
Refactor Mentionable mentioned users to use ReferenceExtractor.
-rw-r--r--app/models/concerns/mentionable.rb23
-rw-r--r--lib/gitlab/reference_extractor.rb12
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