For Class, Module#class_extend is similar to class_eval.
The alternative is to "undef_method :class_extend", but this seems uneccessarily limited.
List all descedents of this class.
class A ; end class B < A; end class C < A; end A.descendants #=> [B,C]
You may also limit the generational distance the subclass may be from the parent class.
class X ; end class Y < X; end class Z < Y; end X.descendants #=> [Y,Z] X.descendants(1) #=> [Y]
NOTE: This is a intensive operation. Do not expect it to be very fast.
Translate a class name to a suitable method name.
module ::Example class MethodizeExample end end Example::MethodizeExample.methodize #=> "example__methodize_example"
Converts a class name to a unix path.
module ::Example class PathizeExample end end Example::PathizeExample.pathize #=> "example/pathize_example"
Designate aspect modules to be added to a object at instantiation.
class Firetruck def put_out_fire(option) "Put out #{option}" end end module FastFiretruck def put_out_fire(option) super("very #{option}!") end end Firetruck.preallocate(FastFiretruck) ft = Firetruck.new ft.put_out_fire('fast') #=> "Put out very fast!"
This method is very similar to the idea of prepend, but it has some limitations in that it works by overriding new and allocate and extends an object with the aspect modules on instantiation. A true prepend implementation would not have to do this —but would be a natural part of the class heirarchy instead. For this reason, this method has been named preallocate, rather than prepend.
CREDIT: Trans