lib/method_watcher.rb in method_watcher-0.0.1 vs lib/method_watcher.rb in method_watcher-0.0.2
- old
+ new
@@ -1,37 +1,54 @@
require "method_watcher/version"
module MethodWatcher
class << self
+ def init_method_watcher mod
+ super_watch_methods = (mod.respond_to?(:superclass) && mod.superclass && mod.superclass.instance_variable_get("@_watch_methods")) || {}
+ mod.instance_variable_set "@_watch_methods", super_watch_methods.merge({})
+ mod.instance_variable_set "@_watch_method", false
+ end
+
def included mod
- mod.instance_variable_set "@_watch_methods", {}
+ MethodWatcher.init_method_watcher mod
mod.singleton_class.class_eval do
def watch_methods *methods
- methods.each do |method|
- watch_method method
+ if methods.empty?
+ @_watch_method = true
+ else
+ methods.each do |method|
+ @_watch_methods[method.to_sym] = self
+ end
end
end
- def watch_method method
- @_watch_methods[method.to_sym] = self
+ def unwatch_methods *methods
+ if methods.empty?
+ @_watch_method = false
+ else
+ methods.each do |method|
+ @_watch_methods.delete method.to_sym
+ end
+ end
end
def method_added method
super
if @_watch_methods.has_key?(method.to_sym)
@_watch_methods[method].method_overriding method
end
+
+ watch_methods method if @_watch_method
end
def method_overriding method
warn "method #{self}##{method} is overridden"
end
def inherited mod
super
- super_watch_methods = (mod.respond_to?(:superclass) && mod.superclass && mod.superclass.instance_variable_get("@_watch_methods")) || {}
- mod.instance_variable_set "@_watch_methods", super_watch_methods.merge({})
+ MethodWatcher.init_method_watcher mod
end
end
end
end
end