class Amply::Helpers::Email

Public Class Methods

new(data) click to toggle source
# File lib/amply/helpers/email.rb, line 8
def initialize(data)
  @data = data
  @request_data = {}
end

Public Instance Methods

parsed_data() click to toggle source
# File lib/amply/helpers/email.rb, line 13
def parsed_data
  unless @data.is_a?(Hash)
    raise 'Expecting hash for email data'
  end

  data_sym = JSON.parse(JSON.dump(@data), symbolize_names: true)

  set_from(data_sym[:from])
  set_subject(data_sym[:subject])
  set_text(data_sym[:text])
  set_html(data_sym[:html])
  set_content(data_sym[:content])
  set_reply_to(data_sym[:reply_to])
  set_template(data_sym[:template])
  set_dynamic_template_data(data_sym[:dynamic_template_data])
  set_unsubscribe_group_uuid(data_sym[:unsubscribe_group_uuid])
  set_ip_or_pool_uuid(data_sym[:ip_or_pool_uuid])
  set_attachments(data_sym[:attachments])
  set_headers(data_sym[:headers])
  set_categories(data_sym[:categories])
  set_clicktracking(data_sym[:clicktracking])
  set_substitutions(data_sym[:substitutions])

  if data_sym[:personalizations].nil?
    set_personalizations_from_to(data_sym[:to], data_sym[:cc], data_sym[:bcc])
  else
    set_personalizations(data_sym[:personalizations])
  end

  @request_data
end

Private Instance Methods

format_emails(emails) click to toggle source
# File lib/amply/helpers/email.rb, line 238
def format_emails(emails)
  if emails.is_a?(Array)
    return emails.map { |email| EmailAddress.new(email).to_json }
  end

  [EmailAddress.new(emails).to_json]
end
set_attachments(attachments) click to toggle source
# File lib/amply/helpers/email.rb, line 137
def set_attachments(attachments)
  return if attachments.nil?

  unless attachments.is_a?(Array)
    raise 'Array expected for `attachments`'
  end

  @request_data[:attachments] ||= []

  attachments.each_with_index do |attachment, i|
    unless attachment.is_a?(Hash)
      raise "Hash expected for `attachments[#{i}]`"
    end

    content     = attachment[:content] || attachment['content']
    filename    = attachment[:filename] || attachment['filename']
    type        = attachment[:type] || attachment['type']
    disposition = attachment[:disposition] || attachment['disposition']

    if content.nil?
      raise "`content` must be defined for `attachments[#{i}][content]`"
    end

    if filename.nil?
      raise "`filename` must be defined for `attachments[#{i}][filename]`"
    end

    data = { content: content, filename: filename }
    data.merge!(type: type) unless type.nil?
    data.merge!(disposition: disposition) unless disposition.nil?

    @request_data[:attachments].push(data)
  end
end
set_categories(categories) click to toggle source
# File lib/amply/helpers/email.rb, line 186
def set_categories(categories)
  return if categories.nil?

  unless categories.is_a?(Array)
    raise 'Array expected for `categories`'
  end

  @request_data[:analytics] ||= {}
  @request_data[:analytics][:categories] = categories.map { |category| category.to_s }
end
set_clicktracking(clicktracking) click to toggle source
# File lib/amply/helpers/email.rb, line 197
def set_clicktracking(clicktracking)
  return if clicktracking.nil?

  unless [TrueClass, FalseClass].include?(clicktracking.class)
    raise 'Expecting TrueClass or FalseClass for `clicktracking`'
  end

  @request_data[:analytics] ||= {}
  @request_data[:analytics][:clicktracking] = clicktracking
end
set_content(content) click to toggle source
# File lib/amply/helpers/email.rb, line 74
def set_content(content)
  return if content.nil?

  unless content.is_a?(Array)
    raise 'Array expected for `content`'
  end

  @request_data[:content] ||= []

  content.each_with_index do |part, i|
    unless part.is_a?(Hash)
      raise "Hash expected for `content[#{i}]`"
    end

    type = part[:type] || part['type']
    value = part[:value] || part['value']

    if type.nil?
      raise "`type` must be defined for `content[#{i}][type]`"
    end

    if value.nil?
      raise "`value` must be defined for `content[#{i}][type]`"
    end

    @request_data[:content].push(type: type, value: value)
  end
end
set_dynamic_template_data(dynamic_template_data) click to toggle source
# File lib/amply/helpers/email.rb, line 113
def set_dynamic_template_data(dynamic_template_data)
  return if dynamic_template_data.nil?

  unless dynamic_template_data.is_a?(Hash)
    raise 'Hash expected for `dynamic_template_data`'
  end

  @request_data[:substitutions] ||= {}

  dynamic_template_data.each do |sub_from, sub_to|
    @request_data[:substitutions]["${#{sub_from}}"] = sub_to.to_s
  end
end
set_from(from) click to toggle source
# File lib/amply/helpers/email.rb, line 47
def set_from(from)
  return if from.nil?
  @request_data[:from] = format_emails(from)[0]
end
set_headers(headers) click to toggle source
# File lib/amply/helpers/email.rb, line 172
def set_headers(headers)
  return if headers.nil?

  unless headers.is_a?(Hash)
    raise 'Hash expected for `headers`'
  end

  @request_data[:headers] ||= {}

  headers.each do |name, value|
    @request_data[:headers][name] = value.to_s
  end
end
set_html(html) click to toggle source
# File lib/amply/helpers/email.rb, line 67
def set_html(html)
  return if html.nil?

  @request_data[:content] ||= []
  @request_data[:content].push(type: 'text/html', value: html)
end
set_ip_or_pool_uuid(ip_or_pool_uuid) click to toggle source
# File lib/amply/helpers/email.rb, line 132
def set_ip_or_pool_uuid(ip_or_pool_uuid)
  return if ip_or_pool_uuid.nil?
  @request_data[:ip_or_pool_uuid] = ip_or_pool_uuid
end
set_personalizations(personalizations) click to toggle source
# File lib/amply/helpers/email.rb, line 234
def set_personalizations(personalizations)
  @request_data[:personalizations] = personalizations
end
set_personalizations_from_to(to, cc, bcc) click to toggle source
# File lib/amply/helpers/email.rb, line 222
def set_personalizations_from_to(to, cc, bcc)
  @request_data[:personalizations] = [{}]

  if to.nil? && cc.nil? && bcc.nil?
    raise 'Provide at least one of `to`, `cc` or `bcc`'
  end

  @request_data[:personalizations][0][:to] = format_emails(to) unless to.nil?
  @request_data[:personalizations][0][:cc] = format_emails(cc) unless cc.nil?
  @request_data[:personalizations][0][:bcc] = format_emails(bcc) unless bcc.nil?
end
set_reply_to(reply_to) click to toggle source
# File lib/amply/helpers/email.rb, line 103
def set_reply_to(reply_to)
  return if reply_to.nil?
  @request_data[:reply_to] = format_emails(reply_to)[0]
end
set_subject(subject) click to toggle source
# File lib/amply/helpers/email.rb, line 52
def set_subject(subject)
  unless subject.is_a?(String)
    raise 'String expected for `subject`'
  end

  @request_data[:subject] = subject
end
set_substitutions(substitutions) click to toggle source
# File lib/amply/helpers/email.rb, line 208
def set_substitutions(substitutions)
  return if substitutions.nil?

  unless substitutions.is_a?(Hash)
    raise 'Hash expected for `substitutions`'
  end

  @request_data[:substitutions] ||= {}

  substitutions.each do |sub_from, sub_to|
    @request_data[:substitutions][sub_from] = sub_to.to_s
  end
end
set_template(template) click to toggle source
# File lib/amply/helpers/email.rb, line 108
def set_template(template)
  return if template.nil?
  @request_data[:template] = template
end
set_text(text) click to toggle source
# File lib/amply/helpers/email.rb, line 60
def set_text(text)
  return if text.nil?

  @request_data[:content] ||= []
  @request_data[:content].push(type: 'text/plain', value: text)
end
set_unsubscribe_group_uuid(unsubscribe_group_uuid) click to toggle source
# File lib/amply/helpers/email.rb, line 127
def set_unsubscribe_group_uuid(unsubscribe_group_uuid)
  return if unsubscribe_group_uuid.nil?
  @request_data[:unsubscribe_group_uuid] = unsubscribe_group_uuid
end