class MethodObserver
def make_observable(target)
def make_observable(target) methods_to_observe.each do |method| target.instance_eval %{ def #{method}(*args, &block) observer = #{self.class}.instances[#{object_id}] observer.send(:before_#{method}, *args, &block) if observer.respond_to? :before_#{method} observer.result = super observer.send(:after_#{method}, *args, &block) if observer.respond_to? :after_#{method} observer.result end } end end