From e77710c6b633e41c8f9edd5ca9c9dffb1657c860 Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Wed, 9 Jul 2025 10:08:47 -0500 Subject: [PATCH] Cards inherit their collection's publication status --- app/controllers/concerns/public_card_scoped.rb | 13 +++++++++++++ app/controllers/public/cards_controller.rb | 12 ++++++++++++ config/routes.rb | 6 ++++++ 3 files changed, 31 insertions(+) create mode 100644 app/controllers/concerns/public_card_scoped.rb create mode 100644 app/controllers/public/cards_controller.rb diff --git a/app/controllers/concerns/public_card_scoped.rb b/app/controllers/concerns/public_card_scoped.rb new file mode 100644 index 000000000..7416609ef --- /dev/null +++ b/app/controllers/concerns/public_card_scoped.rb @@ -0,0 +1,13 @@ +module PublicCardScoped + extend ActiveSupport::Concern + + included do + before_action :set_collection_and_card + end + + private + def set_collection_and_card + @collection = Collection.find_by_published_key(params[:collection_id]) + @card = @collection.cards.find(params[:id]) + end +end diff --git a/app/controllers/public/cards_controller.rb b/app/controllers/public/cards_controller.rb new file mode 100644 index 000000000..060c43871 --- /dev/null +++ b/app/controllers/public/cards_controller.rb @@ -0,0 +1,12 @@ +class Public::CardsController < ApplicationController + include PublicCardScoped + + allow_unauthenticated_access only: :show + + layout "public" + + def show + # To enable caching at intermediate proxies during traffic spikes + expires_in 5.seconds, public: true + end +end diff --git a/config/routes.rb b/config/routes.rb index 99213b019..07290777b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -134,6 +134,8 @@ Rails.application.routes.draw do scope module: :collections do resources :card_previews end + + resources :cards, only: :show end end @@ -141,6 +143,10 @@ Rails.application.routes.draw do route_for :public_collection, collection.publication.key end + direct :published_card do |card, options| + route_for :public_collection_card, card.collection.publication.key, card + end + resolve "Card" do |card, options| route_for :collection_card, card.collection, card, options end