def and_call_through
      if @base_object.is_a? Class
        @plan = Proc.new do |object, *args, &block|
          if original_method
            if original_method.is_a? UnboundMethod
              bound_method = original_method.bind(object)
              bound_method.call(*args, &block)
            else
              original_method.call(*args, &block)
            end
          else
            base_object.send(:method_missing, method_name, *args, &block)
          end
        end
      else
        @plan = Proc.new do |*args, &block|
          if original_method
            original_method.call(*args, &block)
          else
            base_object.send(:method_missing, method_name, *args, &block)
          end
        end
      end

      self
    end
def and_call_through
      if @base_object.is_a? Class
        @plan = Proc.new do |object, *args, &block|
          if original_method
            if original_method.is_a? UnboundMethod
              bound_method = original_method.bind(object)
              bound_method.call(*args, &block)
            else
              original_method.call(*args, &block)
            end
          else
            base_object.send(:method_missing, method_name, *args, &block)
          end
        end
      else
        @plan = Proc.new do |*args, &block|
          if original_method
            original_method.call(*args, &block)
          else
            base_object.send(:method_missing, method_name, *args, &block)
          end
        end
      end

      self
    end
tells the spy to call the original method
 @return [self]