module Cachetastic::Cacheable::ClassAndInstanceMethods

Public Instance Methods

cache_class() click to toggle source

Returns the Cachetastic::Cache object associated with the object. If a cache hasn't been defined the one will be created on the fly. The cache for the object is expected to be defined as: Cachetastic::Cacheable::{CLASS_NAME_HERE}Cache

Examples:

 class Person
   include Cachetastic::Cacheable
 end

Person.cache_class # => Cachetastic::Cacheable::PersonCache

 class Admin::Person
   include Cachetastic::Cacheable
 end

Admin::Person.cache_class # => Cachetastic::Cacheable::Admin_PersonCache
# File lib/cachetastic/cacheable.rb, line 41
def cache_class
  n = self.class.name
  n = self.name if n == "Class"
  c_name = "Cachetastic::Cacheable::#{n.gsub('::', '_')}Cache"
  begin
    return c_name.constantize
  rescue NameError => e
    eval %{
      class #{c_name} < Cachetastic::Cache
        
        def cache_klass
          #{n}
        end
        
      end
    }
    return c_name.constantize
  end
  
end
cacher(key, expiry = nil) { || ... } click to toggle source

How much did I want to call this method cache?? It originally was that, but in Rails 2.0 they decided to use that name, so I had to rename this method. This method will attempt to get an object from the cache for a given key. If the object is nil and a block is given the block will be run, and the results of the block will be automatically cached.

Example:

class Person
  include Cachetastic::Cacheable

  def always_the_same(x,y)
    cacher("always_the_same") do
      x + y
    end
  end
end

Person.new.always_the_same(1,2) # => 3
Person.new.always_the_same(2,2) # => 3
Person.new.always_the_same(3,3) # => 3
Person.cacher("always_the_same") # => 3
Person.get_from_cache("always_the_same") # => 3
Cachetastic::Cacheable::PersonCache.get("always_the_same") # => 3

Person.cacher("say_hi") {"Hi There"} # => "Hi There"
Person.get_from_cache("say_hi") # => "Hi There"
Cachetastic::Cacheable::PersonCache.get("say_hi") # => "Hi There"
# File lib/cachetastic/cacheable.rb, line 89
def cacher(key, expiry = nil)
  cache_class.get(key) do
    if block_given?
      res = yield
      cache_class.set(key, res, expiry)
      return res
    end
  end
end
expire_all() click to toggle source

Expires the entire cache associated with this objects's cache.

Example:

class Person
  include Cachetastic::Cacheable
  attr_accessor :name
  def cachetastic_key
    self.name
  end
end

Person.set_into_cache(1, "one")
Person.get_from_cache(1) # => "one"
Person.expire_all
Person.get_from_cache(1) # => nil
Person.set_into_cache(1, "one")
Person.get_from_cache(1) # => "one"
Cachetastic::Cacheable::PersonCache.expire_all
Person.get_from_cache(1) # => nil
# File lib/cachetastic/cacheable.rb, line 118
def expire_all
  cache_class.expire_all
end