Module | Cachetastic::Cacheable::ClassAndInstanceMethods |
In: |
lib/cachetastic_cacheable.rb
|
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_HERE}Cache
Example:
class Person include Cachetastic::Cacheable attr_accessor :name def cachetastic_key self.name end end Person.cache_class # => Cachetastic::Cacheable::PersonCache
# File lib/cachetastic_cacheable.rb, line 42 42: def cache_class 43: n = self.class.name 44: n = self.name if n == "Class" 45: # puts "n: #{n}" 46: c_name = "Cachetastic::Cacheable::#{n}Cache" 47: unless Cachetastic::Cacheable.const_defined?("#{n}Cache") 48: # puts "we need to create a cache for: #{c_name}" 49: eval %{ 50: class #{c_name} < Cachetastic::Caches::Base 51: end 52: } 53: end 54: c_name.constantize 55: end
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"
# File lib/cachetastic_cacheable.rb, line 87 87: def cacher(key, expiry = 0) 88: cache_class.get(key) do 89: if block_given? 90: res = yield 91: cache_class.set(key, res, expiry) 92: end 93: end 94: end
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 115 115: def expire_all 116: cache_class.expire_all 117: end