Add option to not exclude _html fields from attributes
This commit is contained in:
parent
cc5095edfc
commit
3fd8e61271
2 changed files with 27 additions and 8 deletions
|
@ -7,6 +7,7 @@
|
||||||
# cache_markdown_field :foo
|
# cache_markdown_field :foo
|
||||||
# cache_markdown_field :bar
|
# cache_markdown_field :bar
|
||||||
# cache_markdown_field :baz, pipeline: :single_line
|
# cache_markdown_field :baz, pipeline: :single_line
|
||||||
|
# cache_markdown_field :baz, hidden: false
|
||||||
#
|
#
|
||||||
# Corresponding foo_html, bar_html and baz_html fields should exist.
|
# Corresponding foo_html, bar_html and baz_html fields should exist.
|
||||||
module CacheMarkdownField
|
module CacheMarkdownField
|
||||||
|
@ -39,6 +40,14 @@ module CacheMarkdownField
|
||||||
def html_fields
|
def html_fields
|
||||||
markdown_fields.map { |field| html_field(field) }
|
markdown_fields.map { |field| html_field(field) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def hidden_html_fields
|
||||||
|
markdown_fields.each_with_object([]) do |field, fields|
|
||||||
|
if @data[field].fetch(:hidden, true)
|
||||||
|
fields << html_field(field)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def skip_project_check?
|
def skip_project_check?
|
||||||
|
@ -149,13 +158,17 @@ module CacheMarkdownField
|
||||||
alias_method :attributes_before_markdown_cache, :attributes
|
alias_method :attributes_before_markdown_cache, :attributes
|
||||||
def attributes
|
def attributes
|
||||||
attrs = attributes_before_markdown_cache
|
attrs = attributes_before_markdown_cache
|
||||||
|
html_fields = cached_markdown_fields.html_fields
|
||||||
|
hidden_html_fields = cached_markdown_fields.hidden_html_fields
|
||||||
|
|
||||||
attrs.delete('cached_markdown_version')
|
hidden_html_fields.each do |field|
|
||||||
|
|
||||||
cached_markdown_fields.html_fields.each do |field|
|
|
||||||
attrs.delete(field)
|
attrs.delete(field)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if (html_fields - hidden_html_fields).empty?
|
||||||
|
attrs.delete('cached_markdown_version')
|
||||||
|
end
|
||||||
|
|
||||||
attrs
|
attrs
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ describe CacheMarkdownField do
|
||||||
include CacheMarkdownField
|
include CacheMarkdownField
|
||||||
cache_markdown_field :foo
|
cache_markdown_field :foo
|
||||||
cache_markdown_field :baz, pipeline: :single_line
|
cache_markdown_field :baz, pipeline: :single_line
|
||||||
|
cache_markdown_field :zoo, hidden: false
|
||||||
|
|
||||||
def self.add_attr(name)
|
def self.add_attr(name)
|
||||||
self.attribute_names += [name]
|
self.attribute_names += [name]
|
||||||
|
@ -35,7 +36,7 @@ describe CacheMarkdownField do
|
||||||
|
|
||||||
add_attr :cached_markdown_version
|
add_attr :cached_markdown_version
|
||||||
|
|
||||||
[:foo, :foo_html, :bar, :baz, :baz_html].each do |name|
|
[:foo, :foo_html, :bar, :baz, :baz_html, :zoo, :zoo_html].each do |name|
|
||||||
add_attr(name)
|
add_attr(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -84,8 +85,8 @@ describe CacheMarkdownField do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '.attributes' do
|
describe '.attributes' do
|
||||||
it 'excludes cache attributes' do
|
it 'excludes cache attributes that is hidden by default' do
|
||||||
expect(thing.attributes.keys.sort).to eq(%w[bar baz foo])
|
expect(thing.attributes.keys.sort).to eq(%w[bar baz cached_markdown_version foo zoo zoo_html])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -297,7 +298,12 @@ describe CacheMarkdownField do
|
||||||
it 'saves the changes using #update_columns' do
|
it 'saves the changes using #update_columns' do
|
||||||
expect(thing).to receive(:persisted?).and_return(true)
|
expect(thing).to receive(:persisted?).and_return(true)
|
||||||
expect(thing).to receive(:update_columns)
|
expect(thing).to receive(:update_columns)
|
||||||
.with("foo_html" => updated_html, "baz_html" => "", "cached_markdown_version" => cache_version)
|
.with(
|
||||||
|
"foo_html" => updated_html,
|
||||||
|
"baz_html" => "",
|
||||||
|
"zoo_html" => "",
|
||||||
|
"cached_markdown_version" => cache_version
|
||||||
|
)
|
||||||
|
|
||||||
thing.refresh_markdown_cache!
|
thing.refresh_markdown_cache!
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue