Class: RSpec::Mocks::InstanceMethodStasher

### Home Classes Methods

### In Files

- lib/rspec/mocks/instance_method_stasher.rb

### Parent

Object

### Methods

- ::new
- #handle_restoration_failures
- #method_is_stashed?
- #restore
- #stash
- #stashed_method_name

### Class/Module Index

Quicksearch

- RSpec
- RSpec::Mocks
- RSpec::Mocks::AllowanceTarget
- RSpec::Mocks::AndReturnImplementation
- RSpec::Mocks::AndWrapOriginalImplementation
- RSpec::Mocks::AndYieldImplementation
- RSpec::Mocks::AnyInstance
- RSpec::Mocks::AnyInstance::Chain
- RSpec::Mocks::AnyInstance::Chain::Customizations
- RSpec::Mocks::AnyInstance::ExpectChainChain
- RSpec::Mocks::AnyInstance::ExpectationChain
- RSpec::Mocks::AnyInstance::FluentInterfaceProxy
- RSpec::Mocks::AnyInstance::MessageChains
- RSpec::Mocks::AnyInstance::PositiveExpectationChain
- RSpec::Mocks::AnyInstance::Proxy
- RSpec::Mocks::AnyInstance::Recorder
- RSpec::Mocks::AnyInstance::StubChain
- RSpec::Mocks::AnyInstance::StubChainChain
- RSpec::Mocks::AnyInstanceAllowanceTarget
- RSpec::Mocks::AnyInstanceExpectationTarget
- RSpec::Mocks::ArgumentListMatcher
- RSpec::Mocks::ArgumentMatchers
- RSpec::Mocks::ArgumentMatchers::AnyArgMatcher
- RSpec::Mocks::ArgumentMatchers::AnyArgsMatcher
- RSpec::Mocks::ArgumentMatchers::ArrayIncludingMatcher
- RSpec::Mocks::ArgumentMatchers::BaseHashMatcher
- RSpec::Mocks::ArgumentMatchers::BooleanMatcher
- RSpec::Mocks::ArgumentMatchers::DuckTypeMatcher
- RSpec::Mocks::ArgumentMatchers::HashExcludingMatcher
- RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher
- RSpec::Mocks::ArgumentMatchers::InstanceOf
- RSpec::Mocks::ArgumentMatchers::KindOf
- RSpec::Mocks::ArgumentMatchers::NoArgsMatcher
- RSpec::Mocks::ArgumentMatchers::SingletonMatcher
- RSpec::Mocks::ClassVerifyingDouble
- RSpec::Mocks::Configuration
- RSpec::Mocks::Constant
- RSpec::Mocks::ConstantMutator
- RSpec::Mocks::ConstantMutator::BaseMutator
- RSpec::Mocks::ConstantMutator::ConstantHider
- RSpec::Mocks::ConstantMutator::DefinedConstantReplacer
- RSpec::Mocks::ConstantMutator::UndefinedConstantSetter
- RSpec::Mocks::DirectObjectReference
- RSpec::Mocks::Double
- RSpec::Mocks::ErrorGenerator
- RSpec::Mocks::ExampleMethods
- RSpec::Mocks::ExampleMethods::ExpectHost
- RSpec::Mocks::ExpectChain
- RSpec::Mocks::ExpectationTarget
- RSpec::Mocks::Implementation
- RSpec::Mocks::InsertOntoBacktrace
- RSpec::Mocks::InstanceMethodReference
- RSpec::Mocks::InstanceMethodStasher
- RSpec::Mocks::InstanceVerifyingDouble
- RSpec::Mocks::MarshalExtension
- RSpec::Mocks::Matchers
- RSpec::Mocks::Matchers::ExpectationCustomization
- RSpec::Mocks::Matchers::HaveReceived
- RSpec::Mocks::Matchers::Receive
- RSpec::Mocks::Matchers::Receive::DefaultDescribable
- RSpec::Mocks::Matchers::ReceiveMessageChain
- RSpec::Mocks::Matchers::ReceiveMessages
- RSpec::Mocks::MessageChain
- RSpec::Mocks::MessageExpectation
- RSpec::Mocks::MessageExpectation::ImplementationDetails
- RSpec::Mocks::MethodDouble
- RSpec::Mocks::MethodReference
- RSpec::Mocks::NamedObjectReference
- RSpec::Mocks::NestedSpace
- RSpec::Mocks::ObjectMethodReference
- RSpec::Mocks::ObjectReference
- RSpec::Mocks::ObjectVerifyingDouble
- RSpec::Mocks::ObjectVerifyingDoubleMethods
- RSpec::Mocks::OrderGroup
- RSpec::Mocks::PartialClassDoubleProxy
- RSpec::Mocks::PartialClassDoubleProxyMethods
- RSpec::Mocks::PartialDoubleProxy
- RSpec::Mocks::Proxy
- RSpec::Mocks::ProxyForNil
- RSpec::Mocks::RootSpace
- RSpec::Mocks::SimpleMessageExpectation
- RSpec::Mocks::Space
- RSpec::Mocks::Space::FakeMutex
- RSpec::Mocks::StubChain
- RSpec::Mocks::Syntax
- RSpec::Mocks::TargetBase
- RSpec::Mocks::TestDouble
- RSpec::Mocks::TestDoubleProxy
- RSpec::Mocks::VerifyingDouble
- RSpec::Mocks::VerifyingExistingMethodDouble
- RSpec::Mocks::VerifyingMessageExpectation
- RSpec::Mocks::VerifyingMethodDouble
- RSpec::Mocks::VerifyingPartialClassDoubleProxy
- RSpec::Mocks::VerifyingPartialDoubleProxy
- RSpec::Mocks::VerifyingProxy
- RSpec::Mocks::VerifyingProxyMethods
- RSpec::Mocks::Version
- BasicObject
- Class

No matching classes.

# RSpec::Mocks::InstanceMethodStasher

@private

### Attributes

original_method[R]

### Public Class Methods

new(object, method) click to toggle source

    # File lib/rspec/mocks/instance_method_stasher.rb, line 5
    def initialize(object, method)
      @object = object
      @method = method
      @klass = (class << object; self; end)

      @original_method = nil
      @method_is_stashed = false
    end

### Public Instance Methods

handle_restoration_failures() click to toggle source

ruby 2.0.0-p247 and 2.0.0-p195 both have a bug that we can't work around :(. bugs.ruby-lang.org/issues/8686

    # File lib/rspec/mocks/instance_method_stasher.rb, line 79
    def handle_restoration_failures
      yield
    rescue TypeError
      RSpec.warn_with(
        "RSpec failed to properly restore a partial double (#{@object.inspect}) "              "to its original state due to a known bug in MRI 2.0.0-p195 & p247 "              "(https://bugs.ruby-lang.org/issues/8686). This object may remain "              "screwed up for the rest of this process. Please upgrade to 2.0.0-p353 or above.",
        :call_site => nil, :use_spec_location_as_call_site => true
      )
    end

method_is_stashed?() click to toggle source

@private

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

restore() click to toggle source

@private

    # File lib/rspec/mocks/instance_method_stasher.rb, line 37
    def restore
      return unless @method_is_stashed

      if @klass.__send__(:method_defined?, @method)
        @klass.__send__(:undef_method, @method)
      end
      @klass.__send__(:alias_method, @method, stashed_method_name)
      @klass.__send__(:remove_method, stashed_method_name)
      @method_is_stashed = false
    end

stash() click to toggle source

@private

    # File lib/rspec/mocks/instance_method_stasher.rb, line 23
    def stash
      return if !method_defined_directly_on_klass? || @method_is_stashed

      @klass.__send__(:alias_method, stashed_method_name, @method)
      @method_is_stashed = true
    end

stashed_method_name() click to toggle source

@private

    # File lib/rspec/mocks/instance_method_stasher.rb, line 31
    def stashed_method_name
      "obfuscated_by_rspec_mocks__#{@method}"
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.