Sha256: 4dbc87448dec2465eeb80d7ff37ff7b8639d53af9d5b4e752926dd5c162ebcd2
Contents?: true
Size: 1.38 KB
Versions: 1
Compression:
Stored size: 1.38 KB
Contents
module ModelCache DO_CACHE = Rails.configuration.action_controller.perform_caching NIL_OBJECT = :this_is_my_nil_and_not_a_bill DEFAULT_TIME = 12.hours def self.included(klass) klass.extend ClassMethods end def cache(key, time = DEFAULT_TIME, &block) ModelCache::cache([self.cache_key, key], time, &block) end def self.cache(ckey, time = DEFAULT_TIME, &block) if DO_CACHE && (result = CACHE.get(ckey)) if result == NIL_OBJECT nil else result end else result = block.call if DO_CACHE if result CACHE.set(ckey, result, time) else CACHE.set(ckey, NIL_OBJECT, time) end end result end end module ClassMethods def cache_method(*args) args.each do |sym| cache_method_for_time(sym, DEFAULT_TIME) end end def cache_method_for_time(sym, time) alias_method :"__noncached_#{sym}", sym define_method sym do |*args| ckey = [self.cache_key, sym, *args] ModelCache.cache(ckey, time) do self.send(:"__noncached_#{sym}", *args) end end define_method :"__is_cached_#{sym}?" do |*args| ckey = [self.cache_key, sym, *args] !!( DO_CACHE && CACHE.get(ckey) ) end define_method :"__uncache_#{sym}" do |*args| ckey = [self.cache_key, sym, *args] CACHE.delete(ckey) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
model-cache-0.1.1 | lib/model_cache.rb |