class Sendcloud::Deliverer

Attributes

settings[RW]

Public Class Methods

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

Public Instance Methods

api_key() click to toggle source
# File lib/sendcloud/deliverer.rb, line 14
def api_key
  self.settings[:api_key]
end
api_url() click to toggle source
# File lib/sendcloud/deliverer.rb, line 18
def api_url
  self.settings[:api_url]
end
api_user() click to toggle source
# File lib/sendcloud/deliverer.rb, line 10
def api_user
  self.settings[:api_user]
end
deliver!(rails_message) click to toggle source
# File lib/sendcloud/deliverer.rb, line 22
def deliver!(rails_message)
  options = build_sendcloud_message_for(rails_message)
  response = sendcloud_client.send_message options
  Rails.logger.info("from:#{options[:from]} to:#{options[:to]} res:#{response}")
  if response.code == 200
    sendcloud_message_id = JSON.parse(response.to_str)["id"]
    rails_message.message_id = sendcloud_message_id
  end
  response
end

Private Instance Methods

build_basic_sendcloud_message_for(rails_message) click to toggle source
# File lib/sendcloud/deliverer.rb, line 43
def build_basic_sendcloud_message_for(rails_message)
  sendcloud_message = {
    apiUser: api_user,
    apiKey: api_key,
    from: rails_message[:from].formatted.join(";"),
    to: rails_message[:to].formatted.join(";"),
    subject: rails_message.subject,
    html: extract_html(rails_message),
    plain: extract_text(rails_message)
  }

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

  return sendcloud_message
end
build_sendcloud_message_for(rails_message) click to toggle source
# File lib/sendcloud/deliverer.rb, line 35
def build_sendcloud_message_for(rails_message)
  sendcloud_message = build_basic_sendcloud_message_for rails_message
  transform_sendcloud_attributes_from_rails rails_message, sendcloud_message
  remove_empty_values sendcloud_message

  sendcloud_message
end
extract_html(rails_message) click to toggle source
# File lib/sendcloud/deliverer.rb, line 76
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/sendcloud/deliverer.rb, line 84
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
label_id(rails_message) click to toggle source
# File lib/sendcloud/deliverer.rb, line 106
def label_id rails_message
  rails_message.header.fields.find { |f| f.name == 'label-id' }.try :value
end
remove_empty_values(sendcloud_message) click to toggle source
# File lib/sendcloud/deliverer.rb, line 98
def remove_empty_values(sendcloud_message)
  sendcloud_message.delete_if { |key, value| value.nil? }
end
sendcloud_client() click to toggle source
# File lib/sendcloud/deliverer.rb, line 102
def sendcloud_client
  @sendcloud_client ||= Client.new(api_url)
end
transform_custom_headers(rails_message, sendcloud_message) click to toggle source
# File lib/sendcloud/deliverer.rb, line 92
def transform_custom_headers(rails_message, sendcloud_message)
  rails_message.sendcloud_headers.try(:each) do |name, value|
    sendcloud_message["h:#{name}"] = value
  end
end
transform_label_id(rails_message, sendcloud_message) click to toggle source
# File lib/sendcloud/deliverer.rb, line 71
def transform_label_id(rails_message, sendcloud_message)
  id = label_id(rails_message)
  sendcloud_message['labelId'] = id if id
end
transform_reply_to(rails_message, sendcloud_message) click to toggle source
# File lib/sendcloud/deliverer.rb, line 67
def transform_reply_to(rails_message, sendcloud_message)
  sendcloud_message['h:Reply-To'] = rails_message[:reply_to].formatted.first
end
transform_sendcloud_attributes_from_rails(rails_message, sendcloud_message) click to toggle source
# File lib/sendcloud/deliverer.rb, line 61
def transform_sendcloud_attributes_from_rails(rails_message, sendcloud_message)
  transform_reply_to rails_message, sendcloud_message if rails_message.reply_to
  transform_label_id rails_message, sendcloud_message
  transform_custom_headers rails_message, sendcloud_message
end