Module: Cachetastic::Cacheable::ClassAndInstanceMethods

Defined in:
lib/cachetastic/cacheable.rb

Instance Method Summary collapse

Instance Method Details

#cache_classObject

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_HERECache

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

41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 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) ⇒ Object

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"

89
90
91
92
93
94
95
96
97
# 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_allObject

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

118
119
120
# File 'lib/cachetastic/cacheable.rb', line 118

def expire_all
  cache_class.expire_all
end