module MPatch::Include::Class
Public Instance Methods
class_attr_accessor(name)
click to toggle source
create singleton attribute
# File lib/mpatch/class.rb, line 59 def class_attr_accessor(name) ### GET begin define_method name do class_variable_get "@@#{name}" end end ### SET begin define_method "#{name}=" do |new_val| class_variable_set "@@#{name}", new_val end end end
class_methods()
click to toggle source
get singleton methods to target class without super class methods
# File lib/mpatch/class.rb, line 8 def class_methods self.methods - ::Object.methods end
create_class_method(method,&block)
click to toggle source
bind a singleton method to a class object
# File lib/mpatch/class.rb, line 13 def create_class_method(method,&block) self.class_eval do define_singleton_method method do |*args| block.call *args end end end
create_instance_method(method,&block)
click to toggle source
create an instance method
# File lib/mpatch/class.rb, line 22 def create_instance_method(method,&block) self.class_eval do define_method method do |*args| block.call *args end end end
each_subclass() { |candidate| ... }
click to toggle source
Iterates over all subclasses (direct and indirect)
# File lib/mpatch/class.rb, line 31 def each_subclass ::ObjectSpace.each_object(::Class) { | candidate | begin yield candidate if candidate < self rescue ::ArgumentError # comparison of Class with Class failed (ArgumentError) end } end
instance_attr_accessor(name)
click to toggle source
create class instance attribute
# File lib/mpatch/class.rb, line 78 def instance_attr_accessor(name) ### GET begin define_method name do instance_variable_get "@#{name}" end end ### SET begin define_method "#{name}=" do |new_val| instance_variable_set "@#{name}", new_val end end end
subclasses()
click to toggle source
Returns an Array
of direct subclasses
# File lib/mpatch/class.rb, line 51 def subclasses ret = [] each_subclass {|c| ret.push(c) if c.superclass == self } ret end
Also aliased as: subclass
subclasses_all()
click to toggle source
Returns an Array
of subclasses (direct and indirect)
# File lib/mpatch/class.rb, line 42 def subclasses_all ret = [] each_subclass {|c| ret.push c} ret end
Also aliased as: all_subclasses