Module: Bogus::HasOverwritenMethods

Defined in:
lib/bogus/stubbing/has_overwritten_methods.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.alias(object, new_name, name) ⇒ Object



9
10
11
# 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) ⇒ Object



5
6
7
# File 'lib/bogus/stubbing/has_overwritten_methods.rb', line 5

def self.aliased_name(name)
  :"__bogus__alias__#{name}"
end

Instance Method Details

#__overwrite__(name, method, body) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# 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__Object



13
14
15
# File 'lib/bogus/stubbing/has_overwritten_methods.rb', line 13

def __overwritten_methods__
  @__overwritten_methods__ ||= Set.new
end

#__reset__Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 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