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