Jak aliasować metodę klas w module?
Używam klejnotów Ruby v1.9.2 i Ruby on Rails v3.2.2. Miałem następujący moduł
module MyModule
extend ActiveSupport::Concern
included do
def self.my_method(arg1, arg2)
...
end
end
end
i chciałem aliasowaćmetoda klasy my_method
. Tak więc stwierdziłem, co następuje (nie działa) kod:
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
Innymi słowy, myślałem, aby przedłużyćModule
w jakiś sposób, aby dodaćalias_class_method
metoda dostępna w całym tekścieMyModule
. Chciałbym jednak to zrobićpracować ibyć dostępnym we wszystkich moich aplikacjach Ruby on Rails.
Module
klasa? Może w Ruby on Railslib
informator?Jak powinienem właściwie „rozszerzyć”Module
klasa w pliku rozszerzenia podstawowego?Czy to właściwy sposób postępowania? To znaczy, na przykład, czy powinienem „rozszerzyć” inną klasę (Object
, BasicObject
, Kernel
, ...) zamiastModule
? czy powinienem w ogóle unikać wdrażania wspomnianego rozszerzenia podstawowego?Ale,ważniejsze, czy istnieje funkcja Ruby, która czyni to, co próbuję osiągnąć, aby nie musieć rozszerzać jej klas?