Предшествующий к модулю, который включен / расширен
Я перехожу от использования Module#alias_method_chain
в Module#prepend
,
Но есть одна ситуация, когда я не могу достичь той же функциональности
Предположим, у меня есть код библиотеки (на самом деле две библиотеки, одна из которых расширяет другую)
# Library 1
object = Object.new
# Library 2
module Extender
def random_number
4
end
end
object.extend Extender
object.random_number # => 4
Теперь скажи, что я хочу object#random_number
вернуть 5. Мой старый код был
Extender.class_eval do
def random_number_with_magic
random_number_without_magic + 1
end
alias_method_chain :random_number, :magic
end
object.random_number # => 5
Чтобы имитировать это с помощью Module#prepend
module Prepender
def random_number
super + 1
end
end
Extender.prepend Prepender
object.random_nuber # => still 4!
Желаемых результатов можно достичь двумя подходами
- вызов
Extender.prepend Prepender
доobject.extend Extender
(не вариант, так как я не могу контролировать код во внешних библиотеках) - вызов
object.extend Prepender
вместоExtender.prepend Prepender
(не вариант, так какobject
объект не виден снаружи)
Любой совет?