class RSpec::Mocks::InstanceMethodStasher

@private

Attributes

Public Class Methods

# File rspec-mocks/lib/rspec/mocks/instance_method_stasher.rb, line 5
def initialize(object, method)
  @object = object
  @method = method
  # We don't want to create singleton class if it doesn't exist,
  # so we don't use `object.singleton_class`.
  @klass = (class << object; self; end)

  @original_method = nil
end

Public Instance Methods

@private

# File rspec-mocks/lib/rspec/mocks/instance_method_stasher.rb, line 18
def method_is_stashed?
  !!@original_method
end

@private

# File rspec-mocks/lib/rspec/mocks/instance_method_stasher.rb, line 30
def restore
  return unless @original_method

  @klass.undef_method(@method) if @klass.method_defined?(@method)

  @klass.define_method(@method, @original_method)

  @original_method = nil
end

@private

# File rspec-mocks/lib/rspec/mocks/instance_method_stasher.rb, line 23
def stash
  return unless method_defined_directly_on_klass?
  @original_method ||= ::RSpec::Support.method_handle_for(@object, @method)
  @klass.undef_method(@method)
end