debian-mirror-gitlab/lib/gitlab/markdown_cache/active_record/extension.rb
2021-02-22 17:27:13 +05:30

47 lines
1.4 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module MarkdownCache
module ActiveRecord
module Extension
extend ActiveSupport::Concern
included do
# 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?
after_save :store_mentions!, if: :mentionable_attributes_changed?
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 write_markdown_field(field_name, value)
write_attribute(field_name, value)
end
def markdown_field_changed?(field_name)
attribute_changed?(field_name)
end
def save_markdown(updates)
return unless persisted? && Gitlab::Database.read_write?
update_columns(updates)
end
end
end
end
end