diff --git a/app/controllers/cards_controller.rb b/app/controllers/cards_controller.rb index 12d784ec6..9cb0b8e52 100644 --- a/app/controllers/cards_controller.rb +++ b/app/controllers/cards_controller.rb @@ -14,7 +14,7 @@ class CardsController < ApplicationController end def show - fresh_when etag: @card.cache_invalidation_parts.for_perma + fresh_when etag: [ @card, @card.collection.columns ] end def edit diff --git a/app/helpers/cards_helper.rb b/app/helpers/cards_helper.rb index 5a4a35d62..423478810 100644 --- a/app/helpers/cards_helper.rb +++ b/app/helpers/cards_helper.rb @@ -46,4 +46,8 @@ module CardsHelper icon_tag("trash") + tag.span("Remove background image", class: "for-screen-reader") end end + + def card_preview_cache_parts(card) + [ card, card.collection.entropy_configuration, card.collection.publication, card.collection.name, card.column ] + end end diff --git a/app/models/card.rb b/app/models/card.rb index e12f6e3ae..c21512848 100644 --- a/app/models/card.rb +++ b/app/models/card.rb @@ -1,7 +1,7 @@ class Card < ApplicationRecord - include Assignable, Attachments, Cacheable, Closeable, Colored, Entropic, Eventable, - Golden, Mentions, Multistep, Pinnable, Postponable, Promptable, Readable, Searchable, - Stallable, Statuses, Taggable, Triageable, Watchable + include Assignable, Attachments, Closeable, Colored, Entropic, Eventable, + Golden, Mentions, Multistep, Pinnable, Postponable, Promptable, Readable, + Searchable, Stallable, Statuses, Taggable, Triageable, Watchable belongs_to :collection, touch: true belongs_to :creator, class_name: "User", default: -> { Current.user } diff --git a/app/models/card/cacheable.rb b/app/models/card/cacheable.rb deleted file mode 100644 index abb3bb730..000000000 --- a/app/models/card/cacheable.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Card::Cacheable - extend ActiveSupport::Concern - - def cache_key - [ super, collection.name ].compact.join("/") - end - - def cache_invalidation_parts - @cache_invalidation_parts ||= InvalidationParts.new(self) - end - - class InvalidationParts - attr_reader :card - - def initialize(card) - @card = card - end - - def for_perma - [ card, card.collection.columns ] - end - - def for_preview - [ card, card.collection.entropy_configuration, card.collection.publication, card.column ] - end - end -end diff --git a/app/views/cards/_container.html.erb b/app/views/cards/_container.html.erb index e7a673554..7ef38603b 100644 --- a/app/views/cards/_container.html.erb +++ b/app/views/cards/_container.html.erb @@ -1,4 +1,4 @@ -<% cache card.cache_invalidation_parts.for_perma do %> +<% cache [ card, card.collection.columns ] do %>
<%= render "cards/container/status", card: card %> diff --git a/app/views/cards/columns/_column.html.erb b/app/views/cards/columns/_column.html.erb index e2da152a4..c7d007879 100644 --- a/app/views/cards/columns/_column.html.erb +++ b/app/views/cards/columns/_column.html.erb @@ -1 +1 @@ -<%= render partial: "cards/display/preview", collection: column.cards, as: :card, locals: { draggable: draggable }, cached: ->(card) { card.cache_invalidation_parts.for_preview } %> \ No newline at end of file +<%= render partial: "cards/display/preview", collection: column.cards, as: :card, locals: { draggable: draggable }, cached: ->(card) { card_preview_cache_parts(card) } %> \ No newline at end of file diff --git a/app/views/cards/display/_public_preview.html.erb b/app/views/cards/display/_public_preview.html.erb index cafd49611..967879dbf 100644 --- a/app/views/cards/display/_public_preview.html.erb +++ b/app/views/cards/display/_public_preview.html.erb @@ -1,4 +1,4 @@ -<% cache card.cache_invalidation_parts.for_preview do %> +<% cache card_preview_cache_parts(card) do %> <%= card_article_tag card, class: "card" do %>
diff --git a/app/views/cards/index.html.erb b/app/views/cards/index.html.erb index 8fcca4d7c..2b81313d8 100644 --- a/app/views/cards/index.html.erb +++ b/app/views/cards/index.html.erb @@ -20,7 +20,7 @@ <%= turbo_frame_tag :cards_container do %>
<%= with_automatic_pagination :cards_paginated_container, @page do %> - <%= render partial: "cards/display/preview", collection: @page.records, as: :card, locals: { draggable: true }, cached: ->(card) { card.cache_invalidation_parts.for_preview } %> + <%= render partial: "cards/display/preview", collection: @page.records, as: :card, locals: { draggable: true }, cached: ->(card) { card_preview_cache_parts(card) } %> <% end %>
<% end %> diff --git a/app/views/collections/columns/_list.html.erb b/app/views/collections/columns/_list.html.erb index a2d9e3202..d0194cbb7 100644 --- a/app/views/collections/columns/_list.html.erb +++ b/app/views/collections/columns/_list.html.erb @@ -1,3 +1,3 @@
- <%= render partial: "cards/display/preview", collection: cards, as: :card, locals: { draggable: draggable }, cached: ->(card) { card.cache_invalidation_parts.for_preview } %> + <%= render partial: "cards/display/preview", collection: cards, as: :card, locals: { draggable: draggable }, cached: ->(card) { card_preview_cache_parts(card) } %>
diff --git a/app/views/collections/show/_filtered_cards.html.erb b/app/views/collections/show/_filtered_cards.html.erb index 9925e1e0a..2cfe4e881 100644 --- a/app/views/collections/show/_filtered_cards.html.erb +++ b/app/views/collections/show/_filtered_cards.html.erb @@ -1,5 +1,5 @@
<%= with_automatic_pagination :filtered_cards_paginated_container, page do %> - <%= render partial: "cards/display/preview", collection: page.records, as: :card, locals: { draggable: true }, cached: ->(card) { card.cache_invalidation_parts.for_preview } %> + <%= render partial: "cards/display/preview", collection: page.records, as: :card, locals: { draggable: true }, cached: ->(card) { card_preview_cache_parts(card) } %> <% end %>
diff --git a/app/views/public/collections/columns/_list.html.erb b/app/views/public/collections/columns/_list.html.erb index 82939d48f..de36e9b7e 100644 --- a/app/views/public/collections/columns/_list.html.erb +++ b/app/views/public/collections/columns/_list.html.erb @@ -1,3 +1,3 @@
- <%= render partial: "cards/display/public_preview", collection: cards, as: :card, cached: ->(card) { card.cache_invalidation_parts.for_preview } %> + <%= render partial: "cards/display/public_preview", collection: cards, as: :card, cached: ->(card) { card_preview_cache_parts(card) } %>
diff --git a/app/views/public/collections/show/_doing.html.erb b/app/views/public/collections/show/_doing.html.erb index 386ce6104..d9458c71e 100644 --- a/app/views/public/collections/show/_doing.html.erb +++ b/app/views/public/collections/show/_doing.html.erb @@ -4,7 +4,7 @@ <% if page.used? %> - <%= render partial: "cards/display/public_preview", collection: page.records, as: :card, cached: ->(card) { card.cache_invalidation_parts.for_preview } %> + <%= render partial: "cards/display/public_preview", collection: page.records, as: :card, cached: ->(card) { card_preview_cache_parts(card) } %> <% unless page.last? %>
diff --git a/test/models/card_test.rb b/test/models/card_test.rb index 953b3ead1..82920b323 100644 --- a/test/models/card_test.rb +++ b/test/models/card_test.rb @@ -104,17 +104,6 @@ class CardTest < ActiveSupport::TestCase assert_equal [ card, cards(:logo), cards(:text) ].sort, Card.mentioning("haggis").sort end - test "cache key includes the collection name" do - card = cards(:logo) - cache_v1_key = card.cache_key - - card.collection.touch - assert_equal cache_v1_key, card.reload.cache_key, "general collection touching should not affect the card's cache key" - - card.collection.update! name: "Good ideas" - assert_not_equal cache_v1_key, card.reload.cache_key, "changing the name of the collection should invalidate the cache" - end - test "cache key includes the tenant name" do card = cards(:logo)