¿Cómo alias un método de clase dentro de un módulo?
Estoy usando Ruby v1.9.2 y la gema Ruby on Rails v3.2.2. Tuve el siguiente módulo
module MyModule
extend ActiveSupport::Concern
included do
def self.my_method(arg1, arg2)
...
end
end
end
y queria alias elmétodo de clase my_method
. Entonces, dije lo siguiente (no funciona) código:
module MyModule
extend ActiveSupport::Concern
included do
def self.my_method(arg1, arg2)
...
end
# Note: the following code doesn't work (it raises "NameError: undefined
# local variable or method `new_name' for #<Class:0x00000101412b00>").
def self.alias_class_method(new_name, old_name)
class << self
alias_method new_name, old_name
end
end
alias_class_method :my_new_method, :my_method
end
end
En otras palabras, pensé extender elModule
clase de alguna manera con el fin de agregar unaalias_class_method
método disponible en todoMyModule
. Sin embargo, me gustaría hacerlotrabajar yestar disponible en toda mi aplicación Ruby on Rails.
Module
¿clase? Tal vez en el Ruby on Railslib
¿directorio?¿Cómo debo "extender" adecuadamente laModule
clase en el archivo de extensión de núcleo?¿Es la forma correcta de proceder? Esto es, por ejemplo, si "extiendo" otra clase (Object
, BasicObject
, Kernel
, ...) más bien queModule
? o, ¿debo evitar la implementación de la extensión de núcleo mencionada?Pero,más importante, ¿hay alguna característica de Ruby que haga lo que estoy tratando de lograr para no tener que extender sus clases?