diff options
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/ability.rb | 2 | ||||
-rw-r--r-- | app/models/concerns/cache_markdown_field.rb | 8 | ||||
-rw-r--r-- | app/models/concerns/mentionable.rb | 6 | ||||
-rw-r--r-- | app/models/concerns/participable.rb | 3 | ||||
-rw-r--r-- | app/models/note.rb | 10 |
5 files changed, 22 insertions, 7 deletions
diff --git a/app/models/ability.rb b/app/models/ability.rb index 5bad5c17747..ad6c588202e 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -29,7 +29,7 @@ class Ability when Snippet::INTERNAL, Snippet::PUBLIC users when Snippet::PRIVATE - users.select { |user| snippet.author == user } + users.include?(snippet.author) ? [snippet.author] : [] end end diff --git a/app/models/concerns/cache_markdown_field.rb b/app/models/concerns/cache_markdown_field.rb index 25970158e70..a600f9c14c5 100644 --- a/app/models/concerns/cache_markdown_field.rb +++ b/app/models/concerns/cache_markdown_field.rb @@ -51,6 +51,10 @@ module CacheMarkdownField CACHING_CLASSES.map(&:constantize) end + def skip_project_check? + false + end + extend ActiveSupport::Concern included do @@ -112,9 +116,7 @@ module CacheMarkdownField invalidation_method = "#{html_field}_invalidated?".to_sym define_method(cache_method) do - options = { - skip_project_check: is_a?(Note) && for_personal_snippet? - } + options = { skip_project_check: skip_project_check? } html = Banzai::Renderer.cacheless_render_field(self, markdown_field, options) __send__("#{html_field}=", html) true diff --git a/app/models/concerns/mentionable.rb b/app/models/concerns/mentionable.rb index 9ded015aad3..ef2c1e5d414 100644 --- a/app/models/concerns/mentionable.rb +++ b/app/models/concerns/mentionable.rb @@ -52,7 +52,7 @@ module Mentionable options = options.merge( cache_key: [self, attr], author: author, - skip_project_check: is_a?(Note) && for_personal_snippet? + skip_project_check: skip_project_check? ) extractor.analyze(text, options) @@ -125,4 +125,8 @@ module Mentionable def cross_reference_exists?(target) SystemNoteService.cross_reference_exists?(target, local_reference) end + + def skip_project_check? + false + end end diff --git a/app/models/concerns/participable.rb b/app/models/concerns/participable.rb index 5d8a223fc21..4865c0a14b1 100644 --- a/app/models/concerns/participable.rb +++ b/app/models/concerns/participable.rb @@ -96,7 +96,8 @@ module Participable participants.merge(ext.users) - if self.is_a?(PersonalSnippet) + case self + when PersonalSnippet Ability.users_that_can_read_personal_snippet(participants.to_a, self) else Ability.users_that_can_read_project(participants.to_a, project) diff --git a/app/models/note.rb b/app/models/note.rb index cbf1d0adda7..bf090a0438c 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -167,7 +167,11 @@ class Note < ActiveRecord::Base end def for_personal_snippet? - noteable_type == "Snippet" && noteable.type == 'PersonalSnippet' + noteable.is_a?(PersonalSnippet) + end + + def skip_project_check? + for_personal_snippet? end # override to return commits, which are not active record @@ -225,6 +229,10 @@ class Note < ActiveRecord::Base note.match(Banzai::Filter::EmojiFilter.emoji_pattern)[1] end + def to_ability_name + for_personal_snippet? ? 'personal_snippet' : noteable_type.underscore + end + private def keep_around_commit |