module RSpec::Mocks::AnyInstance

Public Instance Methods

__recorder() click to toggle source

@private

# File lib/rspec/mocks/any_instance.rb, line 51
def __recorder
  @__recorder ||= AnyInstance::Recorder.new(self)
end
any_instance() click to toggle source

Used to set stubs and message expectations on any instance of a given class. Returns a [Recorder](Recorder), which records messages like `stub` and `should_receive` for later playback on instances of the class.

@example

Car.any_instance.should_receive(:go)
race = Race.new
race.cars << Car.new
race.go # assuming this delegates to all of its cars
        # this example would pass

Account.any_instance.stub(:balance) { Money.new(:USD, 25) }
Account.new.balance # => Money.new(:USD, 25))

@return [Recorder]

# File lib/rspec/mocks/any_instance.rb, line 28
def any_instance
  RSpec::Mocks::space.add(self)
  modify_dup_to_remove_mock_proxy_when_invoked
  __recorder
end
rspec_reset() click to toggle source

@private

# File lib/rspec/mocks/any_instance.rb, line 45
def rspec_reset
  restore_dup
  __mock_proxy.reset
end
rspec_verify() click to toggle source

@private

Calls superclass method
# File lib/rspec/mocks/any_instance.rb, line 35
def rspec_verify
  __recorder.verify
  super
ensure
  __recorder.stop_all_observation!
  restore_dup
  @__recorder = nil
end

Private Instance Methods

__rspec_dup() click to toggle source
# File lib/rspec/mocks/any_instance.rb, line 59
def __rspec_dup
  __remove_mock_proxy
  __rspec_original_dup
end
modify_dup_to_remove_mock_proxy_when_invoked() click to toggle source
# File lib/rspec/mocks/any_instance.rb, line 56
def modify_dup_to_remove_mock_proxy_when_invoked
  unless self.method_defined?(:__rspec_original_dup)
    self.class_eval do
      def __rspec_dup
        __remove_mock_proxy
        __rspec_original_dup
      end
      
      alias_method  :__rspec_original_dup, :dup
      alias_method  :dup, :__rspec_dup
    end
  end
end
restore_dup() click to toggle source
# File lib/rspec/mocks/any_instance.rb, line 70
def restore_dup
  if self.method_defined?(:__rspec_original_dup)
    self.class_eval do
      alias_method  :dup, :__rspec_original_dup
      remove_method :__rspec_original_dup
      remove_method :__rspec_dup
    end
  end
end