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[#{self.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