Module: MPatch::Include::Class
- Defined in:
- lib/mpatch/class.rb
Instance Method Summary collapse
-
#class_attr_accessor(name) ⇒ Object
create singleton attribute.
-
#class_methods ⇒ Object
get singleton methods to target class without super class methods.
-
#create_class_method(method, &block) ⇒ Object
bind a singleton method to a class object.
-
#create_instance_method(method, &block) ⇒ Object
create an instance method.
-
#each_subclass ⇒ Object
Iterates over all subclasses (direct and indirect).
-
#instance_attr_accessor(name) ⇒ Object
create class instance attribute.
-
#subclasses ⇒ Object
(also: #subclass)
Returns an Array of direct subclasses.
-
#subclasses_all ⇒ Object
(also: #all_subclasses)
Returns an Array of subclasses (direct and indirect).
Instance Method Details
#class_attr_accessor(name) ⇒ Object
create singleton attribute
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# 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 ⇒ Object
get singleton methods to target class without super class methods
8 9 10 |
# File 'lib/mpatch/class.rb', line 8 def class_methods self.methods - ::Object.methods end |
#create_class_method(method, &block) ⇒ Object
bind a singleton method to a class object
13 14 15 16 17 18 19 |
# 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) ⇒ Object
create an instance method
22 23 24 25 26 27 28 |
# 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 ⇒ Object
Iterates over all subclasses (direct and indirect)
31 32 33 34 35 36 37 38 39 |
# 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) ⇒ Object
create class instance attribute
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# 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 ⇒ Object Also known as: subclass
Returns an Array of direct subclasses
51 52 53 54 55 |
# File 'lib/mpatch/class.rb', line 51 def subclasses ret = [] each_subclass {|c| ret.push(c) if c.superclass == self } ret end |
#subclasses_all ⇒ Object Also known as: all_subclasses
Returns an Array of subclasses (direct and indirect)
42 43 44 45 46 |
# File 'lib/mpatch/class.rb', line 42 def subclasses_all ret = [] each_subclass {|c| ret.push c} ret end |