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