Переопределение метода экземпляра в библиотеке Rails
Это похоже на обезьяну патч. Как я могу улучшить это?
Попытка переопределить deliver_now
метод экземпляра из класса ActionMailer::MessageDelivery. Код ниже работает.
Тем не менее, есть ли способ, которым я могу добиться этого более элегантно сказать через наследование классов или каким-либо другим способом? Код завершения используется в пользовательской почтовой программе ActionMailer.
module MyModule
class Ses
ActionMailer::MessageDelivery.class_eval do
def deliver_now!
puts self.to
puts self.subject
end
end
...
end
end
Примечание: я видел подобные вопросы один и два, но они не решают эту проблему.
1 ответ
Решение
Вы можете посмотреть на уточнения Руби
Пример уточнения:
module MyMessageRefinement
refine(ActionMailer::MessageDelivery) do
def deliver_now!
puts self.to
puts self.subject
end
end
end
Тогда в вашем классе:
module MyModule
class Ses
using MyMessageRefinement
end
end