Cleanup #attributes method

Since we're prepending the ActiveRecord::Extension module, we
can take advantage of it and avoid using an alias to extend the
original #attributes method.
This commit is contained in:
Patrick Bajao 2019-06-05 20:26:56 +08:00
parent 93dd5390b6
commit ea12c5aae8
1 changed files with 14 additions and 20 deletions

View File

@ -7,31 +7,25 @@ module Gitlab
extend ActiveSupport::Concern
included do
# Always exclude _html fields from attributes (including serialization).
# They contain unredacted HTML, which would be a security issue
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
exclude_fields.each do |field|
attrs.delete(field)
end
if whitelisted.empty?
attrs.delete('cached_markdown_version')
end
attrs
end
# Using before_update here conflicts with elasticsearch-model somehow
before_create :refresh_markdown_cache, if: :invalidated_markdown_cache?
before_update :refresh_markdown_cache, if: :invalidated_markdown_cache?
end
# Always exclude _html fields from attributes (including serialization).
# They contain unredacted HTML, which would be a security issue
def attributes
attrs = super
html_fields = cached_markdown_fields.html_fields
whitelisted = cached_markdown_fields.html_fields_whitelisted
exclude_fields = html_fields - whitelisted
attrs.except!(*exclude_fields)
attrs.delete('cached_markdown_version') if whitelisted.empty?
attrs
end
def changed_markdown_fields
changed_attributes.keys.map(&:to_s) & cached_markdown_fields.markdown_fields.map(&:to_s)
end