Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 22 additions & 3 deletions lib/sendgrid.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ module SendGrid
def self.included(base)
base.class_eval do
class << self
attr_accessor :default_sg_category, :default_sg_options, :default_subscriptiontrack_text,
attr_accessor :default_sg_category, :default_sg_options, :default_sg_disabled_options,
:default_subscriptiontrack_text,
:default_footer_text, :default_spamcheck_score, :default_sg_unique_args
end
attr_accessor :sg_category, :sg_options, :sg_disabled_options, :sg_recipients, :sg_substitutions,
Expand Down Expand Up @@ -67,7 +68,13 @@ def sendgrid_enable(*options)
self.default_sg_options = Array.new unless self.default_sg_options
options.each { |option| self.default_sg_options << option if VALID_OPTIONS.include?(option) }
end


# Disables a default option for all emails.
def sendgrid_disable(*options)
self.default_sg_disabled_options = Array.new unless self.default_sg_disabled_options
options.each { |option| self.default_sg_disabled_options << option if VALID_OPTIONS.include?(option) }
end

# Sets the default text for subscription tracking (must be enabled).
# There are two options:
# 1. Add an unsubscribe link at the bottom of the email
Expand Down Expand Up @@ -241,11 +248,23 @@ def sendgrid_json_headers(mail)
elsif self.class.default_sg_options
enabled_opts = self.class.default_sg_options
end

default_disabled = []
if self.class.default_sg_disabled_options && !self.class.default_sg_disabled_options.empty?
# We have to ignore global disabled options which are enabled in local email
default_disabled = self.class.default_sg_disabled_options - enabled_opts
end

if !enabled_opts.empty? || (@sg_disabled_options && !@sg_disabled_options.empty?)
filters = filters_hash_from_options(enabled_opts, @sg_disabled_options)
filters = filters_hash_from_options(enabled_opts, (@sg_disabled_options || []) + default_disabled)
header_opts[:filters] = filters if filters && !filters.empty?
end

# Set unique_args
if @sg_unique_args && !@sg_unique_args.empty?
header_opts[:unique_args] = @sg_unique_args
end

header_opts.to_json.gsub(/(["\]}])([,:])(["\[{])/, '\\1\\2 \\3')
end

Expand Down