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