Skip to content

Instantly share code, notes, and snippets.

@supairish
Forked from parndt/gist:1011435
Created December 26, 2011 17:25
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save supairish/1521680 to your computer and use it in GitHub Desktop.
Save supairish/1521680 to your computer and use it in GitHub Desktop.
How to cache pages and clear them in Refinery CMS
# put in config/application.rb
config.to_prepare do
::PagesController.module_eval do
caches_page :show, :unless => proc {|c| c.user_signed_in? || c.flash.any? }
caches_page :home, :unless => proc {|c| c.user_signed_in? || c.flash.any? }
end
::Page.module_eval do
after_save :clear_static_caching!
after_destroy :clear_static_caching!
def clear_static_caching!
Page.all.map(&:url).map{|u|
[(u if u.is_a?(String)), (u[:path] if u.respond_to?(:keys))].compact.flatten
}.map{ |u| (u.join('/') || 'index') + '.html' }.each do |page|
static_file = Rails.root.join(ActionController::Base.page_cache_directory, page)
if static_file.file?
Rails.logger.warn "Clearing cached page #{static_file.split.last}"
static_file.delete
else
Rails.logger.warn "Couldn't find cache file #{static_file}"
end
end
end
protected :clear_static_caching!
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment