Sha256: 3637172ec5da2d27a73d9a2e9b901fb90e3beb15e2267965d734b1c263f5329e

Contents?: true

Size: 1.34 KB

Versions: 6

Compression:

Stored size: 1.34 KB

Contents

module Refinery
  module Pages
    class Caching

      attr_reader :cache_dir

      def initialize(cache_dir = nil)
        @cache_dir = cache_dir
      end

      def expire!
        clear_caching!
        delete_static_files!
      end

      private
      delegate :cache, :to => Rails

      def cache_dir_valid?
        cache_dir.present? && cache_dir_path.directory?
      end

      def cache_dir_path
        Pathname.new cache_dir.to_s
      end

      def clear_caching!
        begin
          cache.delete_matched(/.*pages.*/)
        rescue NoMethodError, NotImplementedError
          warn "**** [REFINERY] The cache store you are using is not compatible with Rails.cache#delete_matched - clearing entire cache instead ***"
          cache.clear
        end
      end

      def delete_static_files!
        return unless cache_dir_valid?

        delete_page_cache_directory!
        delete_page_cache_index_file!
      end

      def delete_page_cache_directory!
        page_cache_root.rmtree if page_cache_root.directory?
      end

      def delete_page_cache_index_file!
        page_cache_index_file.delete if page_cache_index_file.file?
      end

      def page_cache_index_file
        Pathname.new "#{page_cache_root}.html"
      end

      def page_cache_root
        cache_dir_path.join 'refinery', 'cache', 'pages'
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
refinerycms-pages-2.1.5 lib/refinery/pages/caching.rb
refinerycms-pages-2.1.4 lib/refinery/pages/caching.rb
refinerycms-pages-2.1.3 lib/refinery/pages/caching.rb
refinerycms-pages-2.1.2 lib/refinery/pages/caching.rb
refinerycms-pages-2.1.1 lib/refinery/pages/caching.rb
refinerycms-pages-2.1.0 lib/refinery/pages/caching.rb