Module: SpreeCmCommissioner::ContentCachable

Extended by:
ActiveSupport::Concern
Defined in:
app/controllers/concerns/spree_cm_commissioner/content_cachable.rb

Constant Summary collapse

STATIC_CONTENT_CONTROLLERS =

Cache duration priorities by content type Priority 1: Static/Rarely Changed (1 day)

%w[
  CountriesController
  ProvincesController
  GuestCardClassesController
  SeatLayoutController
  CmsPagesController
].freeze
SEMI_STATIC_CONTROLLERS =

Priority 2: Semi-Static (1 hour)

%w[
  MenusController
  HomepageBackgroundController
  HomepageDataController
  PopularRoutesController
  RoutePlacesController
].freeze
MODERATE_FRESHNESS_CONTROLLERS =

Priority 3: Moderate Freshness (30 minutes)

%w[
  HomepageSectionsController
  TaxonsController
  ProductsController
  EventsController
  EventMatchesController
  AccommodationsController
  VendorsController
  VendorPhotosController
  DynamicFieldsController
].freeze
HIGH_FRESHNESS_CONTROLLERS =

Priority 4: High Freshness (5 minutes)

%w[
  TripsController
  TripSearchController
].freeze

Instance Method Summary collapse

Instance Method Details

#client_max_ageObject

Override This Method based on your UseCase Or let it auto-detect based on controller name



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'app/controllers/concerns/spree_cm_commissioner/content_cachable.rb', line 55

def client_max_age
  controller_name = self.class.name.demodulize

  if STATIC_CONTENT_CONTROLLERS.include?(controller_name)
    ENV.fetch('CACHE_STATIC_MAX_AGE', 1.day.to_i).to_i
  elsif SEMI_STATIC_CONTROLLERS.include?(controller_name)
    ENV.fetch('CACHE_SEMI_STATIC_MAX_AGE', 1.hour.to_i).to_i
  elsif MODERATE_FRESHNESS_CONTROLLERS.include?(controller_name)
    ENV.fetch('CACHE_MODERATE_MAX_AGE', 30.minutes.to_i).to_i
  elsif HIGH_FRESHNESS_CONTROLLERS.include?(controller_name)
    ENV.fetch('CACHE_REALTIME_MAX_AGE', 5.minutes.to_i).to_i
  else
    ENV.fetch('CACHE_DEFAULT_MAX_AGE', 0.minutes.to_i).to_i
  end
end

#set_cache_control_for_cdnObject



71
72
73
74
75
76
77
78
79
80
81
# File 'app/controllers/concerns/spree_cm_commissioner/content_cachable.rb', line 71

def set_cache_control_for_cdn
  return if response.committed?
  return if response.status != 200

  # max-age: browser/client cache, s-maxage: CDN/server cache
  # Allow client caching for mobile apps while keeping CDN cache longer
  response.headers['Cache-Control'] = "public, max-age=#{client_max_age}, s-maxage=#{shared_max_age}"

  # Expires: Absolute timestamp when cache becomes stale (HTTP/1.0 fallback)
  response.headers['Expires'] = (Time.zone.now + client_max_age).httpdate
end

#shared_max_ageObject



49
50
51
# File 'app/controllers/concerns/spree_cm_commissioner/content_cachable.rb', line 49

def shared_max_age
  ENV.fetch('CACHE_CDN_MAX_AGE', 1.day.to_i).to_i
end