Module: Cachetastic::Cacheable::ClassAndInstanceMethods

Defined in:
lib/gems/cachetastic-2.1.2/lib/cachetastic/cacheable.rb

Instance Method Summary collapse

Instance Method Details

#cache_classObject

Returns the Cachetastic::Caches::Base 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

Example:

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

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


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/gems/cachetastic-2.1.2/lib/cachetastic/cacheable.rb', line 39

def cache_class
  n = self.class.name
  n = self.name if n == "Class"
  # puts "n: #{n}"
  c_name = "Cachetastic::Cacheable::#{n}Cache"
  begin
    return c_name.constantize
  rescue NameError => e
    eval %{
      class #{c_name} < Cachetastic::Caches::Base
      end
    }
    return c_name.constantize
  end
  
end

#cacher(key, expiry = 0) ⇒ 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
  attr_accessor :name
  def cachetastic_key
    self.name
  end
  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"


86
87
88
89
90
91
92
93
# File 'lib/gems/cachetastic-2.1.2/lib/cachetastic/cacheable.rb', line 86

def cacher(key, expiry = 0)
  cache_class.get(key) do
    if block_given?
      res = yield
      cache_class.set(key, res, expiry)
    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


114
115
116
# File 'lib/gems/cachetastic-2.1.2/lib/cachetastic/cacheable.rb', line 114

def expire_all
  cache_class.expire_all
end