class PageSweeper < ActionController::Caching::Sweeper observe Page, Version def after_create(record) case record when Page: # TODO: Only expire pages that link to this page expire_pages(record.book) expire_indexes(record.book) when Version: controller.class.expire_page(page_path(record.page)) end end def after_pages_show controller.class.cache_page(controller.response.body, page_path(page)) if page end private def page_path(page) page.title == "Home Page" ? "/#{page.book.url_name}.html" : "/#{page.book.url_name}/pages/#{page.title}.html" end def page controller.instance_variable_get("@page") end def expire_pages(book) logger.info "Expired pages" FileUtils.rm_rf(Dir.glob(RAILS_ROOT + "/public/#{book.url_name}/pages/*.html")) FileUtils.rm_rf(RAILS_ROOT + "/public/#{book.url_name}.html") end def expire_indexes(book) logger.info "Expired indexes" FileUtils.rm_rf(RAILS_ROOT + "/public/#{book.url_name}/pages.html") FileUtils.rm_rf(RAILS_ROOT + "/public/#{book.url_name}/recent.html") end end