Sha256: 98e9858a6be32033ca9bd78de344e7d262352b6d41591b9ebaf65b042658cab7
Contents?: true
Size: 1.4 KB
Versions: 1
Compression:
Stored size: 1.4 KB
Contents
class Module # # Dynamically enables cache in :production and disables in another environments. # If no environment given uses non-cached version. # def cache_method_with_params_in_production method method_with_cache, method_without_cache = "#{method}_with_cache", "#{method}_without_cache" iv = "@#{method}_cache" # raise "Method '#{method}' already defined!" if instance_methods.include?(method) if instance_methods.include?(method_with_cache) or instance_methods.include?(method_without_cache) warn "can't cache the :#{method} twice!" else alias_method method_without_cache, method # create cached method define_method method_with_cache do |*args| unless results = instance_variable_get(iv) results = Hash.new(NotDefined) instance_variable_set iv, results end result = results[args] if result.equal? NotDefined result = send method_without_cache, *args results[args] = result end result end # listen to environment events rad.after :config do |config| if config.production? alias_method method, method_with_cache else alias_method method, method_without_cache end end # by default uses non-cached version # alias_method method, method_without_cache end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rad_core-0.0.13 | lib/rad/support/module.rb |