class ElasticEmail::Deliverer

Attributes

settings[RW]

Public Class Methods

new(settings) click to toggle source
# File lib/elastic_email/deliverer.rb, line 6
def initialize(settings)
  self.settings = settings
end

Public Instance Methods

api_key() click to toggle source
# File lib/elastic_email/deliverer.rb, line 14
def api_key
  self.settings[:api_key]
end
deliver!(rails_message) click to toggle source
# File lib/elastic_email/deliverer.rb, line 18
def deliver!(rails_message)
  response = elastic_email_client.send_message build_elastic_email_message_for(rails_message)
  response_body = response.body
  if response.code == '200' and response_body.match('^[0-9|a-f]{8}-[0-9|a-f]{4}-[0-9|a-f]{4}-[0-9|a-f]{4}-[0-9|a-f]{12}$').present?
    rails_message.message_id = response_body
  else
    raise Error.new(response_body)
  end
  response
end
username() click to toggle source
# File lib/elastic_email/deliverer.rb, line 10
def username
  self.settings[:username]
end

Private Instance Methods

build_basic_elastic_email_message_for(rails_message) click to toggle source
# File lib/elastic_email/deliverer.rb, line 38
def build_basic_elastic_email_message_for(rails_message)
  elastic_email_message = {
      username: username,
      api_key: api_key,
      from: rails_message[:from].formatted,
      to: rails_message[:to].formatted,
      subject: rails_message.subject,
      body_text: extract_text(rails_message),
      body_html: extract_html(rails_message)
  }

  elastic_email_message[:reply_to] = rails_message[:reply_to].formatted if rails_message[:reply_to].present?

  return elastic_email_message
end
build_elastic_email_message_for(rails_message) click to toggle source
# File lib/elastic_email/deliverer.rb, line 31
def build_elastic_email_message_for(rails_message)
  elastic_email_message = build_basic_elastic_email_message_for rails_message
  remove_empty_values elastic_email_message

  elastic_email_message
end
elastic_email_client() click to toggle source
# File lib/elastic_email/deliverer.rb, line 74
def elastic_email_client
  @elastic_email_client ||= Client.new
end
extract_html(rails_message) click to toggle source
# File lib/elastic_email/deliverer.rb, line 54
def extract_html(rails_message)
  if rails_message.html_part
    rails_message.html_part.body.decoded
  else
    rails_message.content_type =~ /text\/html/ ? rails_message.body.decoded : nil
  end
end
extract_text(rails_message) click to toggle source
# File lib/elastic_email/deliverer.rb, line 62
def extract_text(rails_message)
  if rails_message.multipart?
    rails_message.text_part ? rails_message.text_part.body.decoded : nil
  else
    rails_message.content_type =~ /text\/plain/ ? rails_message.body.decoded : nil
  end
end
remove_empty_values(elastic_email_message) click to toggle source
# File lib/elastic_email/deliverer.rb, line 70
def remove_empty_values(elastic_email_message)
  elastic_email_message.delete_if { |key, value| value.nil? }
end