Module: EffectiveEmailTemplatesMailer

Extended by:
ActiveSupport::Concern
Included in:
Effective::EmailTemplatesMailer
Defined in:
app/mailers/concerns/effective_email_templates_mailer.rb

Overview

Added to effective email templates mailers

Instance Method Summary collapse

Instance Method Details

#mail(headers = {}, &block) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'app/mailers/concerns/effective_email_templates_mailer.rb', line 6

def mail(headers = {}, &block)
  email_template = Effective::EmailTemplate.where(template_name: action_name).first
  return super if email_template.blank?

  assigns = (@assigns || {})

  # Parse body content if given
  body = assigns.delete(:body) || headers[:body] || headers['body']
  email_template.body = body if body.present?

  # Parse subject content if explicitly given
  # Otherwise the :subject key is a default and should be ignored in favor of the email template subject instead
  subject = assigns.delete(:subject) || headers[:subject] || headers['subject']
  email_template.subject = subject if subject.present?

  # If the body or subject are nil, they will be populated from the email_template

  # Add any _url helpers
  assigns = route_url_assigns(email_template, assigns).merge(assigns)

  # Render from the template, possibly with updated body and subject
  rendered = email_template.render(assigns)

  # Merge any other passed values
  merged = rendered.merge(headers.except(:body, :subject, 'body', 'subject'))

  # Finalize the subject_for Proc
  if respond_to?(:subject_for) # EffectiveResourcesMailer
    if (prefix = EffectiveResources.mailer_subject_prefix_hint).present?
      subject = subject_for(action_name, merged[:subject], email_template, merged)

      if subject.start_with?("#{prefix}#{prefix}") || subject.start_with?("#{prefix} #{prefix}")
        subject = subject.sub(prefix, '')
      end

      merged[:subject] = subject
    end
  end

  super(merged)
end