class ActionMailer::Base

Monkeypatch to allow mailer to auto generate text/html

If you generate a mailer action, by default it will only render an html email:

def welcome
  mail(
    to:       "foo@example.com",
    reply_to: "noreply@schneems.com",
    subject:  "hello world"
  )
end

You can add a format block to have it produce html and text emails:

def welcome
  mail(
    to:       "foo@example.com",
    reply_to: "noreply@schneems.com",
    subject:  "hello world"
  ) do |format|
   format.text
   format.html
 end
end

For the handler to work correctly and produce both HTML and text emails this would need to be required similar to how github.com/plataformatec/markerb works.

This monkeypatch detects when a markdown email is being used and generates both a markdown and text template

Public Instance Methods

each_template(paths, name, &block) click to toggle source
# File lib/maildown/ext/action_mailer.rb, line 39
def each_template(paths, name, &block)
  templates = original_each_template(paths, name, &block)

  return templates if templates.first.handler != Maildown::Handlers::Markdown

  html_template = templates.first

  # Cached template is already defined
  if html_template.instance_variable_defined?(:"@maildown_text_template")
    text_template = html_template.instance_variable_get(:"@maildown_text_template")
    return [html_template, text_template]
  end

  if Maildown.rails_6?
    text_template = html_template
      .class
      .new(
        html_template.source,
        html_template.identifier,
        html_template.handler,
        format: :text,
        locals: html_template.locals
      )
  else
    text_template = html_template.dup
    formats = html_template.formats.dup.tap { |f| f.delete(:html) }

    text_template.formats = formats
  end

  html_template.instance_variable_set(:"@maildown_text_template", text_template)

  return [html_template, text_template]
end
Also aliased as: original_each_template
original_each_template(paths, name, &block)
Alias for: each_template