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