Sha256: 3cf01043583974cd97cdc4ac07aa597a0c9780a35004e1048192880b0605b645

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 KB

Contents

module WillCache
  module Cacheable

    def expire_cache(method_name = nil, args = {})
      with = args[:with]
      Rails.cache.delete(method_cache_key(method_name, with))
      true
    end
    alias :clear_cache :expire_cache
    
    def cached(method_name, args = {})
      with = args[:with]

      # Rails.fetch is broken
      # http://developingsimplicity.com/posts/rails-cache-fetch
      key = method_cache_key(method_name, with)
      if Rails.cache.exist?(key)
        Rails.cache.read(key)
      else
        Rails.cache.write(key, do_send(method_name, with))
      end
    end
    alias :caches :cached

    def fetch_cache(method_name, args = {})
      with = args[:with]
      Rails.cache.read(method_cache_key(method_name, with))
    end

    def write_cache(key, value, ttl = nil)
      Rails.cache.write(key, value, :expires_in => ttl)
    end

    def read_cache(key)
      Rails.cache.read(key)
    end

    def do_send(method_name, with)
      if with.blank?
        send(method_name)
      else
        send(method_name, with)
      end
    end

    def method_cache_key(method_name, with)
      if self.is_a?(ActiveRecord::Base)
        base = [self.class, id, method_name].compact.join(':').gsub(' ', '_')
      else
        base = "#{self}:#{method_name}"
      end
      if with.blank?
        base
      else
        "#{base}:#{with}"
      end
    end
  end
end



Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
will_cache-0.0.5 lib/will_cache/cacheable.rb