Переопределение метода экземпляра в библиотеке 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
Другие вопросы по тегам