Sha256: 6550f812c130de10fa6945f88e5e1ef7364fe6f0f52038031c91a08e31a78bb7
Contents?: true
Size: 1.96 KB
Versions: 3
Compression:
Stored size: 1.96 KB
Contents
module MPatch class Class # get singleton methods to target class without super class methods def class_methods self.methods - ::Object.methods end # bind a singleton method to a class object def create_class_method(method,&block) self.class_eval do define_singleton_method method do |*args| block.call *args end end end # create an instance method def create_instance_method(method,&block) self.class_eval do define_method method do |*args| block.call *args end end end # Iterates over all subclasses (direct and indirect) 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 # Returns an Array of subclasses (direct and indirect) def subclasses_all ret = [] each_subclass {|c| ret.push c} ret end alias :all_subclasses :subclasses_all # Returns an Array of direct subclasses def subclasses ret = [] each_subclass {|c| ret.push(c) if c.superclass == self } ret end alias :subclass :subclasses # create singleton attribute 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 # create class instance attribute 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 end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
mpatch-2.1.0 | lib/mpatch/class.rb |
mpatch-2.0.1 | lib/mpatch/class.rb |
mpatch-2.0.0 | lib/mpatch/class.rb |