Module: MuffDaddy
- Included in:
- CheapoTracer
- Defined in:
- lib/muffdaddy.rb
Overview
the ultimate “rapper”
Class Method Summary collapse
- .__rap_class__(c) ⇒ Object
- .__rap_method__(c, m) ⇒ Object
- .__rap_object__(o) ⇒ Object
- .extend_object(o) ⇒ Object
- .included(c) ⇒ Object
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 |