Sha256: 7d0cee47621c52bad289623c7c709d7d54300ed4571fe79d66bd2e75cd6afbc6

Contents?: true

Size: 1.66 KB

Versions: 2

Compression:

Stored size: 1.66 KB

Contents

# sugessted usage
# Mailer.deliver(:confirm_email, 'rejotl@gmailcom')
# Mailer.render(:confirm_email, 'rejotl@gmailcom')

# natively works like
# Mailer.prepare(:confirm_email, 'rejotl@gmailcom').deliver
# Mailer.prepare(:confirm_email, 'rejotl@gmailcom').body

# Rails mode via method missing is suported
# Mailer.confirm_email('rejotl@gmailcom').deliver
# Mailer.confirm_email('rejotl@gmailcom').body

class Lux::Mailer

  BeforeAndAfter.define self, :before, :after

  attr_reader :subject, :to, :from

  # Mailer.prepare(:confirm_email, 'rejotl@gmailcom')
  def self.prepare(template, *args)
    obj = new
    obj.instance_variable_set :@_template, template

    BeforeAndAfter.execute(obj, :before)
    obj.send(template, *args)
    BeforeAndAfter.execute(obj, :after)

    obj
  end

  def self.render(method_name, *args)
    send(method_name, *args).body
  end

  def deliver
    raise "From in mailer not defined" unless @from
    raise "To in mailer not defined" unless @to
    raise "Subject in mailer not defined" unless @subject

    require 'mail'

    Mail.defaults { delivery_method Lux.config(:mail).delivery, Lux.config(:mail).opts }

    m = Mail.new
    m[:from]         = @from
    m[:to]           = @to
    m[:subject]      = @subject
    m[:body]         = body
    m[:content_type] = 'text/html; charset=UTF-8'
    m.deliver!
  end

  def deliver_later
     Lux.delay(self, :deliver)
  end

  def self.deliver
    send(method_name, *args).deliver
  end

  def body
    Lux::Template.render_with_layout("mailer/#{@_template}", instance_variables_hash)
  end

  def subject
    @subject
  end

  def self.method_missing(method_sym, *args)
    prepare(method_sym, *args)
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
lux-fw-0.1.35 ./lib/lux/mailer/mailer.rb
lux-fw-0.1.17 ./lib/lux/mailer/mailer.rb