module RSpec::Mocks::VerifyingDouble

def __send__(name, *args, &block)

def __send__(name, *args, &block)
  @__sending_message = name
  super
ensure
  @__sending_message = nil
end

def initialize(doubled_module, *args)

def initialize(doubled_module, *args)
  @doubled_module = doubled_module
  possible_name = args.first
  name = if String === possible_name || Symbol === possible_name
           args.shift
         end
  super(name, *args)
  @__sending_message = nil
end

def method_missing(message, *args, &block)

def method_missing(message, *args, &block)
  # Null object conditional is an optimization. If not a null object,
  # validity of method expectations will have been checked at definition
  # time.
  if null_object?
    if @__sending_message == message
      __mock_proxy.ensure_implemented(message)
    else
      __mock_proxy.ensure_publicly_implemented(message, self)
    end
    __mock_proxy.validate_arguments!(message, args)
  end
  super
end

def respond_to?(message, include_private=false)

def respond_to?(message, include_private=false)
  return super unless null_object?
  method_ref = __mock_proxy.method_reference[message]
  case method_ref.visibility
  when :public    then true
  when :private   then include_private
  when :protected then include_private || RUBY_VERSION.to_f < 2.0
  else !method_ref.unimplemented?
  end
end

def send(name, *args, &block)

def send(name, *args, &block)
  __send__(name, *args, &block)
end