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
-
#client_max_age ⇒ Object
Override This Method based on your UseCase Or let it auto-detect based on controller name.
- #set_cache_control_for_cdn ⇒ Object
- #shared_max_age ⇒ Object
Instance Method Details
#client_max_age ⇒ Object
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_cdn ⇒ Object
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_age ⇒ Object
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 |