class ApiMailer::Base

Attributes

action_name[RW]
headers[RW]
responses[RW]

Public Class Methods

default(value = nil) click to toggle source
# File lib/api_mailer/base.rb, line 41
def self.default(value = nil)
  self.default_params = default_params.merge(value).freeze if value
  default_params
end
method_missing(method_name, *args) click to toggle source
Calls superclass method
# File lib/api_mailer/base.rb, line 23
def self.method_missing(method_name, *args)
  if respond_to?(method_name)
    new(method_name, *args)
  else
    super
  end
end
new(action_name, *args) click to toggle source
# File lib/api_mailer/base.rb, line 46
def initialize(action_name, *args)
  self.action_name = action_name
  self.responses = []
  process(action_name, *args)
end
respond_to?(method, include_private = false) click to toggle source
Calls superclass method
# File lib/api_mailer/base.rb, line 35
def self.respond_to?(method, include_private = false)
  super || action_methods.include?(method.to_s)
end
test_deliveries() click to toggle source
# File lib/api_mailer/base.rb, line 31
def self.test_deliveries
  @test_deliveries ||= []
end

Public Instance Methods

collect_responses(headers) { |collector| ... } click to toggle source
# File lib/api_mailer/base.rb, line 73
def collect_responses(headers)
  if block_given?
    collector = ActionMailer::Collector.new(lookup_context) { render(action_name) }
    yield(collector)
    self.responses = collector.responses
  else
    templates_name = headers.delete(:template_name) || action_name

    each_template(templates_path(headers), templates_name) do |template|
      self.formats = template.respond_to?(:formats) ? template.formats : [template.format]

      self.responses << {
        body: render(template: template),
        content_type: (template.respond_to?(:type) ? template.type : template.mime_type).to_s
      }
    end
  end
end
deliver() click to toggle source
# File lib/api_mailer/base.rb, line 65
def deliver
  if Rails.env.test?
    self.class.test_deliveries << build_message
  else
    deliver_message(build_message)
  end
end
each_template(paths, name, &block) click to toggle source
# File lib/api_mailer/base.rb, line 96
def each_template(paths, name, &block)
  templates = lookup_context.find_all(name, paths)
  if templates.empty?
    raise ActionView::MissingTemplate.new(paths, name, paths, false, 'mailer')
  else
    templates.uniq { |t| (t.respond_to?(:formats) ? t.formats : [t.format])}.each(&block)
  end
end
html_part() click to toggle source
# File lib/api_mailer/base.rb, line 109
def html_part
  Hashie::Mash.new(responses.select{|part| part[:content_type] == "text/html"}.first).presence
end
mail(headers={}, &block) click to toggle source
# File lib/api_mailer/base.rb, line 52
def mail(headers={}, &block)
  # Call all the procs (if any)
  default_values = {}
  self.class.default.each do |k,v|
    default_values[k] = v.is_a?(Proc) ? instance_eval(&v) : v
  end

  # Handle defaults
  self.headers = ActiveSupport::HashWithIndifferentAccess.new(default_values.merge(headers)) || {}

  collect_responses(headers, &block)
end
process(method_name, *args) click to toggle source
Calls superclass method
# File lib/api_mailer/base.rb, line 113
def process(method_name, *args)
  payload = {
    :mailer => self.class.name,
    :action => method_name
  }

  ActiveSupport::Notifications.instrument("process.api_mailer", payload) do
    lookup_context.skip_default_locale! if lookup_context.respond_to?(:skip_default_locale!)

    super
  end
end
templates_path(headers) click to toggle source
# File lib/api_mailer/base.rb, line 92
def templates_path(headers)
  [headers.delete(:template_path) || self.class.name.underscore]
end
text_part() click to toggle source
# File lib/api_mailer/base.rb, line 105
def text_part
  Hashie::Mash.new(responses.select{|part| part[:content_type] == "text/plain"}.first).presence
end