module Mailtime::ActionMailer::Metadata

Public Class Methods

included(base) click to toggle source
# File lib/mailtime/action_mailer/base.rb, line 5
def self.included(base)
  base.include AbstractController::Callbacks
  base.after_action :inject_metadata
end

Protected Instance Methods

instance_variables_map() click to toggle source
# File lib/mailtime/action_mailer/base.rb, line 12
def instance_variables_map
  self.instance_variables.select { |variable| !variable.to_s.start_with?("@_") }.each_with_object({}) do |v, h|
    h[v.to_s.gsub('@', '')] = instance_variable_get(v)
  end
end

Private Instance Methods

find_mailtime_templates() click to toggle source
# File lib/mailtime/action_mailer/base.rb, line 46
def find_mailtime_templates
  Mailtime::MailTemplateCollection.new(self)
end
inject_metadata() click to toggle source

inject some stuff. to avoid a mostly useless service object, add the mailtime_template and mailtime_layout

# File lib/mailtime/action_mailer/base.rb, line 22
def inject_metadata
  mailer_klass = self.class.to_s
  mailer_action = self.action_name
  action_variables  = self.instance_variables_map

  self.message.instance_variable_set(:@mailer_klass, mailer_klass)
  self.message.class.send(:attr_reader, :mailer_klass)

  self.message.instance_variable_set(:@mailer_action, mailer_action)
  self.message.class.send(:attr_reader, :mailer_action)

  self.message.instance_variable_set(:@action_variables, action_variables)
  self.message.class.send(:attr_reader, :action_variables)

  self.message.instance_variable_set(:@template_path, self.headers[:template_path] || mailer_klass)
  self.message.class.send(:attr_reader, :template_path)

  self.message.instance_variable_set(:@template_name, self.headers[:template_name] || mailer_action)
  self.message.class.send(:attr_reader, :template_name)

  self.message.instance_variable_set(:@mailtime_templates, find_mailtime_templates)
  self.message.class.send(:attr_accessor, :mailtime_templates)
end