Class: Module

Inherits:
Object
  • Object
show all
Defined in:
lib/dbus/core_ext/module/redefine_method.rb

Overview

Instance Method Summary collapse

Instance Method Details

#method_visibility(method) ⇒ Object

:nodoc:



41
42
43
44
45
46
47
48
49
50
# File 'lib/dbus/core_ext/module/redefine_method.rb', line 41

def method_visibility(method) # :nodoc:
  case
  when private_method_defined?(method)
    :private
  when protected_method_defined?(method)
    :protected
  else
    :public
  end
end

#redefine_method(method, &block) ⇒ Object

Replaces the existing method definition, if there is one, with the passed block as its body.



28
29
30
31
32
33
# File 'lib/dbus/core_ext/module/redefine_method.rb', line 28

def redefine_method(method, &block)
  visibility = method_visibility(method)
  silence_redefinition_of_method(method)
  define_method(method, &block)
  send(visibility, method)
end

#redefine_singleton_method(method, &block) ⇒ Object

Replaces the existing singleton method definition, if there is one, with the passed block as its body.



37
38
39
# File 'lib/dbus/core_ext/module/redefine_method.rb', line 37

def redefine_singleton_method(method, &block)
  singleton_class.redefine_method(method, &block)
end

#silence_redefinition_of_method(method) ⇒ Object

Marks the named method as intended to be redefined, if it exists. Suppresses the Ruby method redefinition warning. Prefer #redefine_method where possible.



10
11
12
13
14
15
16
# File 'lib/dbus/core_ext/module/redefine_method.rb', line 10

def silence_redefinition_of_method(method)
  if method_defined?(method) || private_method_defined?(method)
    # This suppresses the "method redefined" warning; the self-alias
    # looks odd, but means we don't need to generate a unique name
    alias_method method, method
  end
end