Sha256: 91a691d5cd084fc94834ff50b1b4b6e5e7711417767d9dc9b86d51e15f71d732
Contents?: true
Size: 1.82 KB
Versions: 4
Compression:
Stored size: 1.82 KB
Contents
module Ziggy @@active = true def self.active=(active) @@active = active end def self.active @@active end def self.included(base) base.extend ClassMethods base.instance_eval do @should_be_cached = [] @cached = [] @keygens = {} @expire_after = {} end end module ClassMethods def cached(*cachable_methods, &block) return unless Ziggy::active opts = (cachable_methods.pop if cachable_methods.last.kind_of? Hash) || {} @should_be_cached += cachable_methods cachable_methods.each do |m| @keygens[m] = block @expire_after[m] = opts[:expire_after] || 2.5.minutes end end def should_be_cached?(method) @should_be_cached.include? method end def cached?(method) @cached.include? method end def method_added(method) return unless should_be_cached?(method) && !cached?(method) @cached << method method_without_cache = "#{method}_without_cache".to_sym class_eval do alias_method method_without_cache, method define_method(method) do |*args| key = self.class.build_key(self, method, args) return Rails.cache.read(key) if Rails.cache.exist?(key) result = send(method_without_cache, *args) Rails.cache.write(key, result, :expires_in => self.class.expire_after(method)) result end end logger.debug "Caching added to #{self}.#{method}" end def expire_after(method) @expire_after[method] end def build_key(instance, method, args) invocation_key = "#{method}#{ args.collect{ |a| a.to_s } }" keygen = @keygens[method] differentiator = (keygen.call(instance) unless keygen.nil?) || "" differentiator + invocation_key end end end
Version data entries
4 entries across 4 versions & 2 rubygems
Version | Path |
---|---|
opsb-ziggy-0.1.5 | lib/ziggy.rb |
opsb-ziggy-0.1.6 | lib/ziggy.rb |
opsb-ziggy-0.1.7 | lib/ziggy.rb |
ziggy-0.1.7 | lib/ziggy.rb |