lib/method_cache.rb in method_cache-0.6.3 vs lib/method_cache.rb in method_cache-0.6.4
- old
+ new
@@ -15,17 +15,19 @@
include(InvalidationMethods)
extend(MethodAdded)
end
cached_instance_methods[method_name] = nil
- begin
+ 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
- rescue NameError => e
- # The method has not been defined yet. We will alias it in method_added.
- # pp e, e.backtrace
end
cached_instance_methods[method_name] = proxy
elsif self.class == Module
# We will alias all methods when the module is mixed-in.
@@ -45,20 +47,29 @@
extend(SingletonMethodAdded)
end
method_name = method_name.to_sym
cached_class_methods[method_name] = nil
- begin
- # Replace class method.
+ 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
- rescue NameError => e
- # The method has not been defined yet. We will alias it in singleton_method_added.
- # pp e, e.backtrace
end
cached_class_methods[method_name] = proxy
+ end
+
+ def class_method_defined?(method_name)
+ method(method_name)
+ true
+ rescue NameError
+ false
end
def self.default_cache
@default_cache ||= {}
end