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