diff options
author | Stan Hu <stanhu@gmail.com> | 2019-03-21 00:46:58 +0300 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2019-03-21 00:46:58 +0300 |
commit | f7fcfc7720c5149e2fa6f027900503ae3f215bf1 (patch) | |
tree | a7378e9a0027b261f66fd34ea4f43197d9676c68 /app | |
parent | 9ca395134501b57331a7a49d0c6f5ceb0fc3301d (diff) | |
parent | 6264694d572c48f4517f8999a61cc6e0fb32ccae (diff) |
Merge branch '59208-add-option-to-keep-cached-fields-during-serialization' into 'master'
Add option to whitelist _html fields from attributes on CacheMarkdownField
See merge request gitlab-org/gitlab-ce!26374
Diffstat (limited to 'app')
-rw-r--r-- | app/models/broadcast_message.rb | 2 | ||||
-rw-r--r-- | app/models/concerns/cache_markdown_field.rb | 22 |
2 files changed, 19 insertions, 5 deletions
diff --git a/app/models/broadcast_message.rb b/app/models/broadcast_message.rb index 2d237383e60..1c95abdd9ee 100644 --- a/app/models/broadcast_message.rb +++ b/app/models/broadcast_message.rb @@ -4,7 +4,7 @@ class BroadcastMessage < ActiveRecord::Base include CacheMarkdownField include Sortable - cache_markdown_field :message, pipeline: :broadcast_message + cache_markdown_field :message, pipeline: :broadcast_message, whitelisted: true validates :message, presence: true validates :starts_at, presence: true diff --git a/app/models/concerns/cache_markdown_field.rb b/app/models/concerns/cache_markdown_field.rb index 1a8570b80c3..15d8d58b9b5 100644 --- a/app/models/concerns/cache_markdown_field.rb +++ b/app/models/concerns/cache_markdown_field.rb @@ -7,6 +7,7 @@ # cache_markdown_field :foo # cache_markdown_field :bar # cache_markdown_field :baz, pipeline: :single_line +# cache_markdown_field :baz, whitelisted: true # # Corresponding foo_html, bar_html and baz_html fields should exist. module CacheMarkdownField @@ -37,7 +38,15 @@ module CacheMarkdownField end def html_fields - markdown_fields.map {|field| html_field(field) } + markdown_fields.map { |field| html_field(field) } + end + + def html_fields_whitelisted + markdown_fields.each_with_object([]) do |field, fields| + if @data[field].fetch(:whitelisted, false) + fields << html_field(field) + end + end end end @@ -149,13 +158,18 @@ module CacheMarkdownField alias_method :attributes_before_markdown_cache, :attributes def attributes attrs = attributes_before_markdown_cache + html_fields = cached_markdown_fields.html_fields + whitelisted = cached_markdown_fields.html_fields_whitelisted + exclude_fields = html_fields - whitelisted - attrs.delete('cached_markdown_version') - - cached_markdown_fields.html_fields.each do |field| + exclude_fields.each do |field| attrs.delete(field) end + if whitelisted.empty? + attrs.delete('cached_markdown_version') + end + attrs end |