module MethodCache
Public Class Methods
default_cache()
click to toggle source
# File lib/method_cache.rb, line 73 def self.default_cache @default_cache ||= LocalCache.new end
disable(value = true) { || ... }
click to toggle source
# File lib/method_cache.rb, line 113 def self.disable(value = true, &block) @disabled, old = true, @disabled yield ensure @disabled = old end
disabled?()
click to toggle source
# File lib/method_cache.rb, line 120 def self.disabled? @disabled end
Public Instance Methods
cache_class_method(method_name, opts = {})
click to toggle source
# File lib/method_cache.rb, line 38 def cache_class_method(method_name, opts = {}) method_name = method_name.to_sym proxy = opts.kind_of?(Proxy) ? opts : Proxy.new(method_name, opts) return if methods.include?(proxy.method_name_without_caching) if cached_class_methods.empty? extend(HelperMethods) extend(SingletonMethodAdded) end method_name = method_name.to_sym cached_class_methods[method_name] = nil if class_method_defined?(method_name) (class << self; self; end).module_eval do if proxy.opts[:counter] define_method "increment_#{method_name}", proxy.counter_method(:increment) define_method "decrement_#{method_name}", proxy.counter_method(:decrement) end # Replace class method. alias_method proxy.method_name_without_caching, method_name define_method method_name, proxy.method_with_caching end end cached_class_methods[method_name] = proxy end
cache_method(method_name, opts = {})
click to toggle source
# File lib/method_cache.rb, line 6 def cache_method(method_name, opts = {}) method_name = method_name.to_sym proxy = opts.kind_of?(Proxy) ? opts : Proxy.new(method_name, opts) if self.class == Class return if instance_methods.include?(proxy.method_name_without_caching) if cached_instance_methods.empty? include(HelperMethods) extend(MethodAdded) end cached_instance_methods[method_name] = nil if method_defined?(method_name) or private_method_defined?(method_name) if proxy.opts[:counter] define_method "increment_#{method_name}", proxy.counter_method(:increment) define_method "decrement_#{method_name}", proxy.counter_method(:decrement) end # Replace instance method. alias_method proxy.method_name_without_caching, method_name define_method method_name, proxy.method_with_caching end cached_instance_methods[method_name] = proxy elsif self.class == Module # We will alias all methods when the module is mixed-in. extend(ModuleAdded) if cached_module_methods.empty? cached_module_methods[method_name.to_sym] = proxy end end
cached_class_methods(method_name = nil)
click to toggle source
# File lib/method_cache.rb, line 91 def cached_class_methods(method_name = nil) if method_name method_name = method_name.to_sym ancestors.each do |klass| next unless klass.kind_of?(MethodCache) proxy = klass.cached_class_methods[method_name] return proxy if proxy end nil else @cached_class_methods ||= {} end end
cached_instance_methods(method_name = nil)
click to toggle source
# File lib/method_cache.rb, line 77 def cached_instance_methods(method_name = nil) if method_name method_name = method_name.to_sym ancestors.each do |klass| next unless klass.kind_of?(MethodCache) proxy = klass.cached_instance_methods[method_name] return proxy if proxy end nil else @cached_instance_methods ||= {} end end
cached_module_methods(method_name = nil)
click to toggle source
# File lib/method_cache.rb, line 105 def cached_module_methods(method_name = nil) if method_name cached_module_methods[method_name.to_sym] else @cached_module_methods ||= {} end end
class_method_defined?(method_name)
click to toggle source
# File lib/method_cache.rb, line 66 def class_method_defined?(method_name) method(method_name) true rescue NameError false end