File: overwrites_methods.rb

package info (click to toggle)
ruby-bogus 0.1.6-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 860 kB
  • sloc: ruby: 4,219; makefile: 8; sh: 2
file content (47 lines) | stat: -rw-r--r-- 1,112 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
module Bogus
  class OverwritesMethods
    extend Takes

    takes :makes_substitute_methods

    def overwrite(object, name)
      raise "wut?" if name == :__shadow__
      return if already_delegates_to_shadow?(object, name)

      object.extend RecordInteractions
      object.extend HasOverwritenMethods

      method = method_by_name(object, name)
      copy = copy(object, name)

      object.__overwrite__(name, method, copy)
    end

    def reset(object)
      return if object.is_a?(FakeObject)

      object.__reset__
    end

    private

    def already_delegates_to_shadow?(object, name)
      return false unless object.is_a?(FakeObject)
      !Fake.instance_methods.include?(name)
    end

    def method_by_name(object, name)
      object.method(name) if object.methods.include?(name)
    end

    def copy(object, name)
      method = method_by_name(object, name)
      return default_method(name) unless method
      makes_substitute_methods.stringify(method)
    end

    def default_method(name)
      "def #{name}(*args, &block); __record__(:#{name}, *args, &block); end"
    end
  end
end