module MailCannon::Adapter::SendgridWeb

Provides the Sendgrid Web API Adapter, refer to sendgrid.com/docs/API_Reference/Web_API/mail.html

Public Class Methods

included(receiver) click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 36
def self.included(receiver)
  receiver.send :include, InstanceMethods
end

Private Instance Methods

api_client() click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 41
def api_client
  SendGridWebApi::Client.new(self.auth_pair['username'],self.auth_pair['password'])
end
build_email_subs() click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 69
def build_email_subs
  placeholder = MailCannon.config['default_email_placeholder'] || '%email%'
  build_to_subs(placeholder, 'email')
end
build_name_subs() click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 64
def build_name_subs
  placeholder = MailCannon.config['default_name_placeholder'] || '%name%'
  build_to_subs(placeholder, 'name')
end
build_to_subs(placeholder, to_key) click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 58
def build_to_subs(placeholder, to_key)
  selected_hash_array = []
  self.to.map {|h| selected_hash_array.push h[to_key]||h[to_key.to_sym]||''}
  {'sub'=>{"#{placeholder}"=>selected_hash_array}}
end
build_unique_args() click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 75
def build_unique_args
  unique_args = {}
  if MailCannon.config['add_envelope_id_to_unique_args']
    unique_args.merge!({'envelope_id'=>self.id})
  end
  if MailCannon.config['add_envelope_bag_id_to_unique_args'] && self.envelope_bag
    unique_args.merge!({'envelope_bag_id'=>self.envelope_bag.id})
  end
  unique_args
end
build_xsmtpapi(recipients,subs) click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 86
def build_xsmtpapi(recipients,subs)
  xsmtpapi = self.xsmtpapi || {}
  recipients.symbolize_keys!
  to = extract_values(recipients[:to],:email)
  xsmtpapi.merge!({'to' => to}) if to
  xsmtpapi = merge_subs_hash(xsmtpapi,subs)
  xsmtpapi = merge_subs_hash(xsmtpapi,build_name_subs)
  xsmtpapi = merge_subs_hash(xsmtpapi,build_email_subs)
  xsmtpapi.merge!({'unique_args' => build_unique_args })
  return xsmtpapi
end
extract_values(values,key) click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 98
def extract_values(values,key)
  extract=[]
  values.each do |h|
    h.symbolize_keys!
    extract.push h[key]
  end
  extract
end
merge_subs_hash(xsmtpapi,subs) click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 107
def merge_subs_hash(xsmtpapi,subs)
  if subs!=nil && subs.is_a?(Hash)
    xsmtpapi.deep_merge(subs)
  else
    xsmtpapi
  end
end
prepare_xsmtpapi!() click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 49
def prepare_xsmtpapi!
  validate_envelope!
  self.xsmtpapi = {} if self.xsmtpapi.nil?
  self.xsmtpapi['sub']={} unless self.xsmtpapi['sub']
  self.xsmtpapi = self.xsmtpapi.deep_merge(build_xsmtpapi({'to'=>self.to},{'sub'=>self.substitutions}))
  validate_xsmtpapi!
  self.save!
end
send_multiple_emails() click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 136
def send_multiple_emails
  prepare_xsmtpapi!
  api_client.mail.send(
            :to => self.from,
            :subject => self.subject,
            :text => self.mail.text,
            :html => self.mail.html,
            :from => self.from,
            :fromname => self.from_name,
            :bcc => self.bcc,
            :replyto => self.reply_to,
            :"x-smtpapi" => self.xsmtpapi.to_json
          )
end
successfully_sent?(response) click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 151
def successfully_sent?(response)
  if response['message']=='success'
    true
  else
    false
  end
end
validate_envelope!() click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 45
def validate_envelope!
  raise "Invalid Document! #{self.errors.messages}" unless self.valid?
end
validate_xsmtpapi!() click to toggle source
# File lib/mailcannon/adapters/sendgrid_web.rb, line 115
  def validate_xsmtpapi!
    return true
    if self.to.size>1
      if xsmtpapi['sub']
        xsmtpapi['sub'].each do |sub|
          raise 'sub[Array] must match to[Array] size!' unless sub.size==xsmtpapi['to'].size
        end
      end
    end
=begin
    schema = {
      "type" => "object",
      "required" => ["to"],
      "properties" => {
        "to" => {"type" => "array", "default" => [self.to.first]}
      }
    }
    JSON::Validator.validate!(schema, self.xsmtpapi)
=end
  end