class RSpec::Mocks::AnyInstance::Proxy

@private The ‘AnyInstance::Recorder` is responsible for redefining the klass’s instance method in order to add any stubs/expectations the first time the method is called. It’s not capable of updating a stub on an instance that’s already been previously stubbed (either directly, or via ‘any_instance`).

This proxy sits in front of the recorder and delegates both to it and to the ‘RSpec::Mocks::Proxy` for each already mocked or stubbed instance of the class, in order to propagates changes to the instances.

Note that unlike ‘RSpec::Mocks::Proxy`, this proxy class is stateless and is not persisted in `RSpec::Mocks.space`.

Proxying for the message expectation fluent interface (typically chained off of the return value of one of these methods) is provided by the ‘FluentInterfaceProxy` class below.

Public Class Methods

# File rspec-mocks/lib/rspec/mocks/any_instance/proxy.rb, line 22
def initialize(recorder, target_proxies)
  @recorder       = recorder
  @target_proxies = target_proxies
end

Public Instance Methods

# File rspec-mocks/lib/rspec/mocks/any_instance/proxy.rb, line 55
def expect_chain(*chain, &block)
  perform_proxying(__method__, chain, block) do |proxy|
    Mocks::ExpectChain.expect_chain_on(proxy.object, *chain, &block)
  end
end
# File rspec-mocks/lib/rspec/mocks/any_instance/proxy.rb, line 27
def klass
  @recorder.klass
end
# File rspec-mocks/lib/rspec/mocks/any_instance/proxy.rb, line 71
def should_not_receive(method_name, &block)
  perform_proxying(__method__, [method_name], block) do |proxy|
    proxy.add_message_expectation(method_name, &block).never
  end
end
# File rspec-mocks/lib/rspec/mocks/any_instance/proxy.rb, line 61
def should_receive(method_name, &block)
  perform_proxying(__method__, [method_name], block) do |proxy|
    # Yeah, this is a bit odd...but if we used `add_message_expectation`
    # then it would act like `expect_every_instance_of(klass).to receive`.
    # The any_instance recorder takes care of validating that an instance
    # received the message.
    proxy.add_stub(method_name, &block)
  end
end
# File rspec-mocks/lib/rspec/mocks/any_instance/proxy.rb, line 31
def stub(method_name_or_method_map, &block)
  if Hash === method_name_or_method_map
    method_name_or_method_map.each do |method_name, return_value|
      stub(method_name).and_return(return_value)
    end
  else
    perform_proxying(__method__, [method_name_or_method_map], block) do |proxy|
      proxy.add_stub(method_name_or_method_map, &block)
    end
  end
end
# File rspec-mocks/lib/rspec/mocks/any_instance/proxy.rb, line 49
def stub_chain(*chain, &block)
  perform_proxying(__method__, chain, block) do |proxy|
    Mocks::StubChain.stub_chain_on(proxy.object, *chain, &block)
  end
end
# File rspec-mocks/lib/rspec/mocks/any_instance/proxy.rb, line 43
def unstub(method_name)
  perform_proxying(__method__, [method_name], nil) do |proxy|
    proxy.remove_stub_if_present(method_name)
  end
end