Sha256: 1181bb90aaed87e324eab13b2e7bacd8b2e05eb73c51a67a2d6793deccd5ee01

Contents?: true

Size: 604 Bytes

Versions: 6

Compression:

Stored size: 604 Bytes

Contents

 class Module
   def child this = self
     @child ||= self.class.new
     @child.module_eval{ include this}
     @child
   end

   def has_child
     defined? @child and @child
   end

   def override m, &b
     this = self

     m = Module.new{
       @m = this.instance_method m
       this.module_eval{ remove_method m rescue nil }

       module_eval <<-code
         def #{ m }(*a, &b)
           um = ObjectSpace._id2ref #{ @m.object_id }
           um.bind(self).call *a, &b
         end
       code

       child.module_eval &b if b
     }

     include(m.has_child ? m.child : m)
   end
end 

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
facets-1.8.0 demo/cuts/override.rb
facets-1.8.20 demo/cuts/override.rb
facets-1.8.49 demo/cuts/override.rb
facets-1.8.51 demo/cuts/override.rb
facets-1.8.8 demo/cuts/override.rb
facets-1.8.54 demo/cuts/override.rb