module Aerogel::Mailer

Constants

VERSION

Public Class Methods

registered(app) click to toggle source

Configures module Aerogel::Mailer

# File lib/aerogel/mailer/core.rb, line 7
def self.registered(app)
  aerogel_delivery_method = Aerogel.config.mailer.delivery_method
  aerogel_delivery_options = Aerogel.config.mailer.delivery_options.raw || {}
  Mail.defaults do
    delivery_method aerogel_delivery_method, aerogel_delivery_options
  end

  # load mailers
  Aerogel::get_resource_list( :app, "mailers/**/*.rb" ).each do |filename|
    Aerogel.require_into( Aerogel::Application, filename )
  end

  # register reloader
  setup_reloader(app) if Aerogel.config.aerogel.reloader?

end

Private Class Methods

setup_reloader( app ) click to toggle source

Sets up reloader

# File lib/aerogel/mailer/core.rb, line 71
def self.setup_reloader( app )
  app.use Aerogel::Reloader, ->{ Aerogel.get_resource_list( :app, "mailers/**/*.rb" ) } do |files|
    # reset mailers
    Definition.mailers.clear

    # load mailers
    files.each do |filename|
      Aerogel.require_into( Aerogel::Application, filename )
    end
  end
end

Public Instance Methods

email( name, *args ) click to toggle source

Deliver email using mailer specified by name

# File lib/aerogel/mailer/core.rb, line 32
def email( name, *args )
  email_with_context( self, name, *args )
end
email_with_context( context, name, *args ) click to toggle source

Deliver email using mailer specified by name

# File lib/aerogel/mailer/core.rb, line 38
def email_with_context( context, name, *args )
  mailer = Aerogel::Mailer::Definition.mailers[name.to_sym]
  unless mailer
    raise ArgumentError.new "Mailer '#{name}' is not defined"
  end
  params = mailer.compile( context, *args )
  puts "** sending mail: #{params}"
  begin
    message = Mail.new do
      from params[:from]
      to params[:to]
      subject params[:subject]
      text_part do
        content_type 'text/plain; charset=UTF-8'
        body params[:body][:text]
      end if params[:body][:text]
      html_part do
        content_type 'text/html; charset=UTF-8'
        body params[:body][:html]
      end if params[:body][:html]
    end
    message.charset = "UTF-8"
    message.deliver
  rescue StandardError => e
    raise Aerogel::Mailer::Error.new "Mailer '#{name}' failed to deliver email: #{e}"
  end
  true
end
mailer( name, &block ) click to toggle source

Registers new mailer

# File lib/aerogel/mailer/core.rb, line 26
def mailer( name, &block )
  Definition.new name, block
end