Module: MuffDaddy

Included in:
CheapoTracer
Defined in:
lib/muffdaddy.rb

Overview

the ultimate “rapper”

Class Method Summary collapse

Class Method Details

.__rap_class__(c) ⇒ Object



14
15
16
17
# File 'lib/muffdaddy.rb', line 14

def self.__rap_class__(c)
  c.instance_methods(false).each { |m| __rap_method__(c, m) }
  c.class_eval "def self.method_added(m); MuffDaddy.__rap_method__(self, m.to_s); end"
end

.__rap_method__(c, m) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/muffdaddy.rb', line 5

def self.__rap_method__(c, m)
  return if m =~ /^__/
  c = class << c; self; end unless c.class == Class
  return if c.instance_methods(false).include? "__#{m}"
  rapped_method = c.const_get("RAP_METHOD_NAME")
  c.class_eval "alias __#{m} #{m}"
  c.class_eval "def #{m}(*args); #{rapped_method} { __#{m}(*args) }; end"
end

.__rap_object__(o) ⇒ Object



19
20
21
# File 'lib/muffdaddy.rb', line 19

def self.__rap_object__(o)
  o.public_methods(false).each { |m| __rap_method__(o, m) }
end

.extend_object(o) ⇒ Object



23
24
25
26
# File 'lib/muffdaddy.rb', line 23

def self.extend_object(o)
  super(o)
  MuffDaddy.__rap_object__(o)
end

.included(c) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/muffdaddy.rb', line 28

def self.included(c)
  super(c)
  if c.class == Module then
    c.module_eval "def self.included(c); super(c); MuffDaddy.included(c); end"
    c.module_eval "def self.extend_object(c); super(c); MuffDaddy.extend_object(c); end"
  end
  MuffDaddy.__rap_class__(c)
end