Como alias um método de classe dentro de um módulo?
Estou usando o Ruby v1.9.2 e o Ruby on Rails v3.2.2 gem. Eu tive o seguinte módulo
module MyModule
extend ActiveSupport::Concern
included do
def self.my_method(arg1, arg2)
...
end
end
end
e eu queria aliasmétodo de classe my_method
. Então, eu disse o seguinte (não está funcionando) 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
Em outras palavras, pensei em estender oModule
classe de alguma maneira, a fim de adicionar umalias_class_method
método disponível em todoMyModule
. No entanto, eu gostaria de fazer issotrabalhar eestar disponível em toda a minha aplicação Ruby on Rails.
Module
classe? Talvez no Ruby on Railslib
diretório?Como devo "estender" apropriadamenteModule
classe no arquivo de extensão do núcleo?É o caminho certo para prosseguir? Isto é, por exemplo, devo "estender" outra classe (Object
, BasicObject
, Kernel
, ...) ao invés deModule
? ou devo evitar a implementação da extensão central mencionada?Mas,mais importante, existe um recurso Ruby que faz o que eu estou tentando realizar para que eu não precise estender suas classes?