module RailsEmailPreview::Integrations::ComfortableMexicanSofa

Public Class Methods

rep_email_params_from_snippet(snippet) click to toggle source
# File lib/rails_email_preview/integrations/comfortable_mexica_sofa.rb, line 108
def self.rep_email_params_from_snippet(snippet)
  id_prefix = 'email-'
  return unless snippet && snippet.identifier && snippet.identifier.starts_with?(id_prefix)
  mailer_cl, act = snippet.identifier[id_prefix.length..-1].split('-')
  {preview_id:   "#{mailer_cl}_preview-#{act}",
   email_locale: snippet.site.locale}
end

Public Instance Methods

cms_email_id() click to toggle source

@return [String] CMS identifier for the current email ModerationMailer#approve -> “moderation_mailer-approve”

# File lib/rails_email_preview/integrations/comfortable_mexica_sofa.rb, line 10
def cms_email_id
  mailer = respond_to?(:controller) ? controller : self
  "#{mailer.class.name.underscore.gsub('/', '__')}-#{action_name}"
end
cms_email_snippet(snippet_id = self.cms_email_id) click to toggle source

@return [String] Snippet content, passed through Kramdown. Also renders an “✎ Edit” link inside the email when called from preview

# File lib/rails_email_preview/integrations/comfortable_mexica_sofa.rb, line 84
def cms_email_snippet(snippet_id = self.cms_email_id)
  snippet_id   = "email-#{snippet_id}"
  site         = cms_site_class.find_by_locale(I18n.locale.to_s)
  default_site = cms_site_class.find_by_locale(I18n.default_locale.to_s)

  if cms_snippet_class.where(identifier: snippet_id).exists?
    # Prefill from default locale if no content
    content = send(cms_snippet_render_method, snippet_id, site)
    result  = (content.presence || send(cms_snippet_render_method, snippet_id, default_site)).to_s
  else
    result = ''
  end

  # If rendering in preview from admin, add edit/create link
  if cms_email_edit_link?
    result = safe_join [cms_email_edit_link(site, default_site, snippet_id), result], "\n\n"
  end
  result
end
cms_email_subject(interpolation = {}) click to toggle source

@param [Hash] interpolation subject interpolation values @return [String] Snippet title interpolated with passed variables

For a snippet with title “Welcome, %{name}!”

cms_email_subject(name: "Alice") #=> "Welcome, Alice!"
# File lib/rails_email_preview/integrations/comfortable_mexica_sofa.rb, line 20
def cms_email_subject(interpolation = {})
  snippet_id = "email-#{cms_email_id}"
  return '(no subject)' unless cms_snippet_class.where(identifier: snippet_id).exists?
  [I18n.locale, I18n.default_locale].compact.each do |locale|
    site = cms_site_class.find_by_locale(locale.to_s)
    unless site
      raise "rails_email_preview: #{t 'integrations.cms.errors.site_missing', locale: locale}"
    end
    snippet = site.snippets.find_by_identifier(snippet_id)
    next unless snippet.try(:content).present?

    # interpolate even if keys/values are missing
    title         = snippet.label.to_s
    interpolation = interpolation.stringify_keys
    # set all missing values to ''
    title.scan(/%{([^}]+)}/) { |m| interpolation[m[0]] ||= '' }
    # remove all missing keys
    subject = title % interpolation.symbolize_keys.delete_if { |k, v| title !~ /%{#{k}}/ }

    return subject if subject.present?
  end
  '(no subject)'
end