summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2016-05-26 13:34:06 +0200
committerYorick Peterse <yorickpeterse@gmail.com>2016-05-26 17:14:07 +0200
commit35e977d69b622e5a82be58c632ddc427d771cc09 (patch)
tree59ba545748b47e2bdb3879ac3e0e072da74a9a54
parent25c08d11bbf3a889501ebe295a1ab66a12a52d49 (diff)
downloadgitlab-ce-35e977d69b622e5a82be58c632ddc427d771cc09.tar.gz
Refactor Mentionable
Caching is now always enabled when rendering attributes as there's no reason to not cache them. The method Mentionable#all_references has also been modified to take an optional Gitlab::ReferenceExtractor instance to allow other code to create one and re-use it between multiple calls.
-rw-r--r--app/models/concerns/mentionable.rb19
1 files changed, 9 insertions, 10 deletions
diff --git a/app/models/concerns/mentionable.rb b/app/models/concerns/mentionable.rb
index b381d225485..f00b5b8497c 100644
--- a/app/models/concerns/mentionable.rb
+++ b/app/models/concerns/mentionable.rb
@@ -23,7 +23,7 @@ module Mentionable
included do
if self < Participable
- participant ->(current_user) { mentioned_users(current_user) }
+ participant -> (user, ext) { all_references(user, extractor: ext) }
end
end
@@ -43,23 +43,22 @@ module Mentionable
self
end
- def all_references(current_user = nil, text = nil)
- ext = Gitlab::ReferenceExtractor.new(self.project, current_user || self.author, self.author)
+ def all_references(current_user = nil, text = nil, extractor: nil)
+ extractor ||= Gitlab::ReferenceExtractor.
+ new(project, current_user || author)
if text
- ext.analyze(text)
+ extractor.analyze(text, author: author)
else
self.class.mentionable_attrs.each do |attr, options|
- text = send(attr)
+ text = __send__(attr)
+ options = options.merge(cache_key: [self, attr], author: author)
- context = options.dup
- context[:cache_key] = [self, attr] if context.delete(:cache) && self.persisted?
-
- ext.analyze(text, context)
+ extractor.analyze(text, options)
end
end
- ext
+ extractor
end
def mentioned_users(current_user = nil)