class SurenotifyRails::Deliverer

Attributes

settings[RW]

Public Class Methods

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

Public Instance Methods

api_key() click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 10
def api_key
  self.settings[:api_key]
end
deliver!(rails_message) click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 19
def deliver!(rails_message)
  response = surenotify_client.send_message build_surenotify_message_for(rails_message)
  if response.code == 200
    surenotify_message_id = JSON.parse(response.to_str)["id"]
    rails_message.message_id = surenotify_message_id
  end
  response
end
verify_ssl() click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 14
def verify_ssl
  #default value = true
  self.settings[:verify_ssl] != false
end

Private Instance Methods

build_basic_surenotify_message_for(rails_message) click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 46
def build_basic_surenotify_message_for(rails_message)
  surenotify_message = {
   fromName: rails_message[:from].addrs.first.name,
   fromAddress: rails_message[:from].addrs.first.address,
   recipients: formatted_receivers(rails_message[:to]),
   subject: rails_message.subject,
   content: extract_html(rails_message)
  }

  [:cc, :bcc].each do |key|
    surenotify_message[key] = rails_message[key].formatted if rails_message[key]
  end

  return surenotify_message if rails_message.attachments.empty?

  # RestClient requires attachments to be in file format, use a temp directory and the decoded attachment
  surenotify_message[:attachment] = []
  surenotify_message[:inline] = []
  rails_message.attachments.each do |attachment|
    # then add as a file object
    if attachment.inline?
      surenotify_message[:inline] << surenotifyRails::Attachment.new(attachment, encoding: 'ascii-8bit', inline: true)
    else
      surenotify_message[:attachment] << surenotifyRails::Attachment.new(attachment, encoding: 'ascii-8bit')
    end
  end

  return surenotify_message
end
build_surenotify_message_for(rails_message) click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 30
def build_surenotify_message_for(rails_message)
  surenotify_message = build_basic_surenotify_message_for rails_message
  # transform_surenotify_attributes_from_rails rails_message, surenotify_message
  remove_empty_values surenotify_message

  surenotify_message
end
extract_html(rails_message) click to toggle source

@see stackoverflow.com/questions/4868205/rails-mail-getting-the-body-as-plain-text

# File lib/surenotify_rails/deliverer.rb, line 81
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/surenotify_rails/deliverer.rb, line 89
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
formatted_receivers(receivers) click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 128
def formatted_receivers(receivers)
  receivers.addrs.map { |r| { address: r.address } }
end
remove_empty_values(surenotify_message) click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 119
def remove_empty_values(surenotify_message)
  surenotify_message.delete_if { |key, value| value.nil? or
                                           value.respond_to?(:empty?) && value.empty? }
end
surenotify_client() click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 124
def surenotify_client
  @surenotify_client ||= Client.new(api_key, verify_ssl)
end
transform_custom_headers(rails_message, surenotify_message) click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 109
def transform_custom_headers(rails_message, surenotify_message)
  rails_message.surenotify_headers.try(:each) do |name, value|
    surenotify_message["h:#{name}"] = value
  end
end
transform_reply_to(rails_message, surenotify_message) click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 76
def transform_reply_to(rails_message, surenotify_message)
  surenotify_message['h:Reply-To'] = rails_message[:reply_to].formatted.first
end
transform_surenotify_attributes_from_rails(rails_message, surenotify_message) click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 38
def transform_surenotify_attributes_from_rails(rails_message, surenotify_message)
  transform_reply_to rails_message, surenotify_message if rails_message.reply_to
  transform_surenotify_variables rails_message, surenotify_message
  transform_surenotify_options rails_message, surenotify_message
  transform_surenotify_recipient_variables rails_message, surenotify_message
  transform_custom_headers rails_message, surenotify_message
end
transform_surenotify_options(rails_message, surenotify_message) click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 103
def transform_surenotify_options(rails_message, surenotify_message)
  rails_message.surenotify_options.try(:each) do |name, value|
    surenotify_message["o:#{name}"] = value
  end
end
transform_surenotify_recipient_variables(rails_message, surenotify_message) click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 115
def transform_surenotify_recipient_variables(rails_message, surenotify_message)
  surenotify_message['recipient-variables'] = rails_message.surenotify_recipient_variables.to_json if rails_message.surenotify_recipient_variables
end
transform_surenotify_variables(rails_message, surenotify_message) click to toggle source
# File lib/surenotify_rails/deliverer.rb, line 97
def transform_surenotify_variables(rails_message, surenotify_message)
  rails_message.surenotify_variables.try(:each) do |name, value|
    surenotify_message["v:#{name}"] = value
  end
end