メイラーのコード共有

準備する

私たちの設定(lib/bookshelf.rb)には、アプリケーションのすべてのメーラのコードを共有できるコードブロックがあります。メーラーにHanami::Mailerモジュールが含まれている場合、そのブロックコードはそのクラスのコンテキスト内で生成されます。これはRubyモジュールとそのincludedフックに大きく影響されています。

すべてのメーラーにデフォルトの送信者を設定するとします。各メーラーにそれを指定する代わりに、DRYアプローチを使用することができます。

私たちはモジュールを作成します:

# lib/mailers/default_sender.rb
module Mailers::DefaultSender
  def self.included(mailer)
    mailer.class_eval do
      from 'sender@bookshelf.org'
    end
  end
end

次に、私たちのアプリケーションのすべてのメーラーにviaを含めprepareます。

# lib/bookshelf.rb
# ...
Hanami::Mailer.configure do
  # ...
  prepare do
    include Mailers::DefaultSender
  end
end.load!

via prepareに含まれるコードは、アプリケーションのすべてのメーラーで利用できます。