lib/multi_mail/mandrill/sender.rb in multi_mail-0.1.3 vs lib/multi_mail/mandrill/sender.rb in multi_mail-0.1.4
- old
+ new
@@ -4,30 +4,37 @@
class Mandrill
include MultiMail::Sender::Base
requires :api_key
- attr_reader :api_key, :async, :ip_pool, :send_at
+ attr_reader :api_key, :async, :ip_pool, :send_at, :template_name, :template_content
# Initializes a Mandrill outgoing email sender.
#
# @param [Hash] options required and optional arguments
# @option options [String] :api_key a Mandrill API key
# @option options [Boolean] :async whether to enable a background sending
# mode optimized for bulk sending
# @option options [String] :ip_pool the name of the dedicated IP pool that
# should be used to send the message
+ # @option options [String] :template_name the slug or name of a template
+ # that exists in the user's Mandrill account
+ # @option options [Array<Hash>] :template_content an array of hashes, each
+ # with a `"name"` key for the editable region to inject into and a
+ # `"content"` key for the content to inject
# @option options [Time,String] :send_at when this message should be sent
# @see https://mandrillapp.com/api/docs/index.ruby.html
# @see https://mandrillapp.com/api/docs/messages.JSON.html#method-send
def initialize(options = {})
super
@api_key = settings.delete(:api_key)
- @async = settings.delete(:async) || false
+ @async = settings.delete(:async) || false
@ip_pool = settings.delete(:ip_pool)
@send_at = settings.delete(:send_at)
- unless @send_at.nil? or String === @send_at
+ @template_name = settings.delete(:template_name)
+ @template_content = settings.delete(:template_content)
+ unless @send_at.nil? || String === @send_at
@send_at = @send_at.utc.strftime('%Y-%m-%d %T')
end
end
# Returns the additional parameters for the API call.
@@ -58,28 +65,43 @@
#
# @param [Mail::Message] mail a message
# @see https://bitbucket.org/mailchimp/mandrill-api-ruby/src/d0950a6f9c4fac1dd2d5198a4f72c12c626ab149/lib/mandrill/api.rb?at=master#cl-738
# @see https://bitbucket.org/mailchimp/mandrill-api-ruby/src/d0950a6f9c4fac1dd2d5198a4f72c12c626ab149/lib/mandrill.rb?at=master#cl-32
def deliver!(mail)
+ @template_name = settings.delete(:template_name)
+ @template_content = settings.delete(:template_content)
+
message = MultiMail::Message::Mandrill.new(mail).to_mandrill_hash.merge(parameters)
- response = Faraday.post('https://mandrillapp.com/api/1.0/messages/send.json', JSON.dump({
+ api_params = {
:key => api_key,
:message => message,
:async => async,
:ip_pool => ip_pool,
:send_at => send_at,
- }))
+ }
+ if template_name
+ api_method = 'send-template'
+ api_params[:template_name] = template_name
+ api_params[:template_content] = template_content
+ else
+ api_method = 'send'
+ end
+
+ response = Faraday.post("https://mandrillapp.com/api/1.0/messages/#{api_method}.json", JSON.dump(api_params))
+
body = JSON.load(response.body)
unless response.status == 200
if body['status'] == 'error'
case body['name']
when 'Invalid_Key'
raise InvalidAPIKey, body['message']
+ when 'Unknown_Template'
+ raise InvalidTemplate, body['message']
else
- raise body['message']
+ raise "#{body['name']}: #{body['message']}"
end
else
raise body['message']
end
end