Module: MPatch::Class

Defined in:
lib/mpatch/class.rb

Instance Method Summary collapse

Instance Method Details

#class_attr_accessor(name) ⇒ Object

create singleton attribute



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/mpatch/class.rb', line 56

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



5
6
7
# File 'lib/mpatch/class.rb', line 5

def class_methods
  self.methods - ::Object.methods
end

#create_class_method(method, &block) ⇒ Object

bind a singleton method to a class object



10
11
12
13
14
15
16
# File 'lib/mpatch/class.rb', line 10

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



19
20
21
22
23
24
25
# File 'lib/mpatch/class.rb', line 19

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)



28
29
30
31
32
33
34
35
36
# File 'lib/mpatch/class.rb', line 28

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



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/mpatch/class.rb', line 75

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



48
49
50
51
52
# File 'lib/mpatch/class.rb', line 48

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)



39
40
41
42
43
# File 'lib/mpatch/class.rb', line 39

def subclasses_all
  ret = []
  each_subclass {|c| ret.push c}
  ret
end