module Bogus::HasOverwritenMethods

Public Class Methods

alias(object, new_name, name) click to toggle source
# File lib/bogus/stubbing/has_overwritten_methods.rb, line 9
def self.alias(object, new_name, name)
  object.singleton_class.send(:alias_method, new_name, name)
end
aliased_name(name) click to toggle source
# File lib/bogus/stubbing/has_overwritten_methods.rb, line 5
def self.aliased_name(name)
  :"__bogus__alias__#{name}"
end

Public Instance Methods

__overwrite__(name, method, body) click to toggle source
# File lib/bogus/stubbing/has_overwritten_methods.rb, line 17
def __overwrite__(name, method, body)
  return if __overwritten_methods__.include?(name)

  new_name = HasOverwritenMethods.aliased_name(name)
  HasOverwritenMethods.alias(self, new_name, name) if method

  __overwritten_methods__ << name

  instance_eval(body)
end
__overwritten_methods__() click to toggle source
# File lib/bogus/stubbing/has_overwritten_methods.rb, line 13
def __overwritten_methods__
  @__overwritten_methods__ ||= Set.new
end
__reset__() click to toggle source
# File lib/bogus/stubbing/has_overwritten_methods.rb, line 28
def __reset__
  __overwritten_methods__.each do |name|
    new_name = HasOverwritenMethods.aliased_name(name)

    if respond_to?(new_name)
      HasOverwritenMethods.alias(self, name, new_name)
      instance_eval "undef #{new_name}"
    else
      instance_eval "undef #{name}"
    end
  end
  @__overwritten_methods__ = nil
  @__shadow__ = nil
end