diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2016-05-26 13:34:06 +0200 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2016-05-26 17:14:07 +0200 |
commit | 35e977d69b622e5a82be58c632ddc427d771cc09 (patch) | |
tree | 59ba545748b47e2bdb3879ac3e0e072da74a9a54 /app | |
parent | 25c08d11bbf3a889501ebe295a1ab66a12a52d49 (diff) | |
download | gitlab-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.
Diffstat (limited to 'app')
-rw-r--r-- | app/models/concerns/mentionable.rb | 19 |
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) |