sendgrid 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +5 -1
- data/Gemfile.lock +49 -0
- data/README.md +1 -1
- data/Rakefile +13 -13
- data/VERSION +1 -1
- data/lib/sendgrid.rb +15 -18
- data/sendgrid.gemspec +5 -2
- data/test/sendgrid_test.rb +20 -2
- data/test/test_helper.rb +13 -11
- metadata +18 -2
data/Gemfile
CHANGED
@@ -9,8 +9,12 @@ gem "json"
|
|
9
9
|
# Add dependencies to develop your gem here.
|
10
10
|
# Include everything needed to run rake, tests, features, etc.
|
11
11
|
group :development do
|
12
|
-
|
12
|
+
gem "shoulda", ">= 0"
|
13
13
|
gem "bundler", "~> 1.0.0"
|
14
14
|
gem "jeweler", "~> 1.5.1"
|
15
15
|
# gem "rcov", ">= 0"
|
16
16
|
end
|
17
|
+
|
18
|
+
group :test do
|
19
|
+
gem "actionmailer", ">= 2.3.2"
|
20
|
+
end
|
data/Gemfile.lock
CHANGED
@@ -1,18 +1,67 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
actionmailer (3.1.5)
|
5
|
+
actionpack (= 3.1.5)
|
6
|
+
mail (~> 2.3.3)
|
7
|
+
actionpack (3.1.5)
|
8
|
+
activemodel (= 3.1.5)
|
9
|
+
activesupport (= 3.1.5)
|
10
|
+
builder (~> 3.0.0)
|
11
|
+
erubis (~> 2.7.0)
|
12
|
+
i18n (~> 0.6)
|
13
|
+
rack (~> 1.3.6)
|
14
|
+
rack-cache (~> 1.2)
|
15
|
+
rack-mount (~> 0.8.2)
|
16
|
+
rack-test (~> 0.6.1)
|
17
|
+
sprockets (~> 2.0.4)
|
18
|
+
activemodel (3.1.5)
|
19
|
+
activesupport (= 3.1.5)
|
20
|
+
builder (~> 3.0.0)
|
21
|
+
i18n (~> 0.6)
|
22
|
+
activesupport (3.1.5)
|
23
|
+
multi_json (>= 1.0, < 1.3)
|
24
|
+
builder (3.0.0)
|
25
|
+
erubis (2.7.0)
|
4
26
|
git (1.2.5)
|
27
|
+
hike (1.2.1)
|
28
|
+
i18n (0.6.0)
|
5
29
|
jeweler (1.5.2)
|
6
30
|
bundler (~> 1.0.0)
|
7
31
|
git (>= 1.2.5)
|
8
32
|
rake
|
9
33
|
json (1.5.1)
|
34
|
+
mail (2.3.3)
|
35
|
+
i18n (>= 0.4.0)
|
36
|
+
mime-types (~> 1.16)
|
37
|
+
treetop (~> 1.4.8)
|
38
|
+
mime-types (1.18)
|
39
|
+
multi_json (1.2.0)
|
40
|
+
polyglot (0.3.3)
|
41
|
+
rack (1.3.6)
|
42
|
+
rack-cache (1.2)
|
43
|
+
rack (>= 0.4)
|
44
|
+
rack-mount (0.8.3)
|
45
|
+
rack (>= 1.0.0)
|
46
|
+
rack-test (0.6.1)
|
47
|
+
rack (>= 1.0)
|
10
48
|
rake (0.8.7)
|
49
|
+
shoulda (2.10.3)
|
50
|
+
sprockets (2.0.4)
|
51
|
+
hike (~> 1.2)
|
52
|
+
rack (~> 1.0)
|
53
|
+
tilt (~> 1.1, != 1.3.0)
|
54
|
+
tilt (1.3.3)
|
55
|
+
treetop (1.4.10)
|
56
|
+
polyglot
|
57
|
+
polyglot (>= 0.3.1)
|
11
58
|
|
12
59
|
PLATFORMS
|
13
60
|
ruby
|
14
61
|
|
15
62
|
DEPENDENCIES
|
63
|
+
actionmailer (>= 2.3.2)
|
16
64
|
bundler (~> 1.0.0)
|
17
65
|
jeweler (~> 1.5.1)
|
18
66
|
json
|
67
|
+
shoulda
|
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -39,20 +39,20 @@ rescue LoadError
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
task :test
|
42
|
+
task :test
|
43
43
|
|
44
44
|
task :default => :test
|
45
45
|
|
46
|
-
require 'rake/rdoctask'
|
47
|
-
Rake::RDocTask.new do |rdoc|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
46
|
+
# require 'rake/rdoctask'
|
47
|
+
# Rake::RDocTask.new do |rdoc|
|
48
|
+
# if File.exist?('VERSION')
|
49
|
+
# version = File.read('VERSION')
|
50
|
+
# else
|
51
|
+
# version = ""
|
52
|
+
# end
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
end
|
54
|
+
# rdoc.rdoc_dir = 'rdoc'
|
55
|
+
# rdoc.title = "sendgrid #{version}"
|
56
|
+
# rdoc.rdoc_files.include('README*')
|
57
|
+
# rdoc.rdoc_files.include('lib/**/*.rb')
|
58
|
+
# end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/lib/sendgrid.rb
CHANGED
@@ -67,7 +67,7 @@ module SendGrid
|
|
67
67
|
self.default_sg_options = Array.new unless self.default_sg_options
|
68
68
|
options.each { |option| self.default_sg_options << option if VALID_OPTIONS.include?(option) }
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
# Sets the default text for subscription tracking (must be enabled).
|
72
72
|
# There are two options:
|
73
73
|
# 1. Add an unsubscribe link at the bottom of the email
|
@@ -90,7 +90,9 @@ module SendGrid
|
|
90
90
|
self.default_spamcheck_score = score
|
91
91
|
end
|
92
92
|
|
93
|
-
# Sets the
|
93
|
+
# Sets unique args at the class level. Should be a hash
|
94
|
+
# of name, value pairs.
|
95
|
+
# { :some_unique_arg => "some_value"}
|
94
96
|
def sendgrid_unique_args(unique_args = {})
|
95
97
|
self.default_sg_unique_args = unique_args
|
96
98
|
end
|
@@ -101,7 +103,8 @@ module SendGrid
|
|
101
103
|
@sg_category = category
|
102
104
|
end
|
103
105
|
|
104
|
-
# Call within mailer method to
|
106
|
+
# Call within mailer method to set unique args for this email.
|
107
|
+
# Merged with class-level unique args, if any exist.
|
105
108
|
def sendgrid_unique_args(unique_args = {})
|
106
109
|
@sg_unique_args = unique_args
|
107
110
|
end
|
@@ -153,12 +156,7 @@ module SendGrid
|
|
153
156
|
@ganalytics_options = []
|
154
157
|
options.each { |option| @ganalytics_options << option if VALID_GANALYTICS_OPTIONS.include?(option[0].to_sym) }
|
155
158
|
end
|
156
|
-
|
157
|
-
# Call within mailer method to set unique args for this email.
|
158
|
-
def sendgrid_unique_args(args)
|
159
|
-
@sg_unique_args = args
|
160
|
-
end
|
161
|
-
|
159
|
+
|
162
160
|
# only override the appropriate methods for the current ActionMailer version
|
163
161
|
if ActionMailer::Base.respond_to?(:mail)
|
164
162
|
|
@@ -167,7 +165,7 @@ module SendGrid
|
|
167
165
|
# Sets the custom X-SMTPAPI header after creating the email but before delivery
|
168
166
|
# NOTE: This override is used for Rails 3 ActionMailer classes.
|
169
167
|
def mail(headers={}, &block)
|
170
|
-
super
|
168
|
+
m = super
|
171
169
|
if @sg_substitutions && !@sg_substitutions.empty?
|
172
170
|
@sg_substitutions.each do |find, replace|
|
173
171
|
raise ArgumentError.new("Array for #{find} is not the same size as the recipient array") if replace.size != @sg_recipients.size
|
@@ -175,6 +173,7 @@ module SendGrid
|
|
175
173
|
end
|
176
174
|
puts "SendGrid X-SMTPAPI: #{sendgrid_json_headers(message)}" if Object.const_defined?("SENDGRID_DEBUG_OUTPUT") && SENDGRID_DEBUG_OUTPUT
|
177
175
|
self.headers['X-SMTPAPI'] = sendgrid_json_headers(message)
|
176
|
+
m
|
178
177
|
end
|
179
178
|
|
180
179
|
else
|
@@ -200,12 +199,15 @@ module SendGrid
|
|
200
199
|
def sendgrid_json_headers(mail)
|
201
200
|
header_opts = {}
|
202
201
|
|
202
|
+
#if not called within the mailer method, this will be nil so we default to empty hash
|
203
|
+
@sg_unique_args = @sg_unique_args || {}
|
204
|
+
|
203
205
|
# set the unique arguments
|
204
206
|
if @sg_unique_args || self.class.default_sg_unique_args
|
205
207
|
unique_args = self.class.default_sg_unique_args || {}
|
206
208
|
unique_args = unique_args.merge(@sg_unique_args)
|
207
209
|
|
208
|
-
header_opts[:unique_args] = unique_args
|
210
|
+
header_opts[:unique_args] = unique_args unless unique_args.empty?
|
209
211
|
end
|
210
212
|
|
211
213
|
# Set category
|
@@ -230,7 +232,6 @@ module SendGrid
|
|
230
232
|
end
|
231
233
|
|
232
234
|
# Set enables/disables
|
233
|
-
header_opts[:filters] = {} unless header_opts.has_key?(:filters)
|
234
235
|
enabled_opts = []
|
235
236
|
if @sg_options && !@sg_options.empty?
|
236
237
|
# merge the options so that the instance-level "overrides"
|
@@ -241,12 +242,8 @@ module SendGrid
|
|
241
242
|
enabled_opts = self.class.default_sg_options
|
242
243
|
end
|
243
244
|
if !enabled_opts.empty? || (@sg_disabled_options && !@sg_disabled_options.empty?)
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
# Set unique_args
|
248
|
-
if @sg_unique_args && !@sg_unique_args.empty?
|
249
|
-
header_opts[:unique_args] = @sg_unique_args
|
245
|
+
filters = filters_hash_from_options(enabled_opts, @sg_disabled_options)
|
246
|
+
header_opts[:filters] = filters if filters && !filters.empty?
|
250
247
|
end
|
251
248
|
|
252
249
|
header_opts.to_json.gsub(/(["\]}])([,:])(["\[{])/, '\\1\\2 \\3')
|
data/sendgrid.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "sendgrid"
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Stephen Blankenship", "Marc Tremblay", "Bob Burbach"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2013-05-15"
|
13
13
|
s.description = "This gem allows simple integration between ActionMailer and SendGrid. \n SendGrid is an email deliverability API that is affordable and has lots of bells and whistles."
|
14
14
|
s.email = "stephenrb@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -39,17 +39,20 @@ Gem::Specification.new do |s|
|
|
39
39
|
|
40
40
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
41
41
|
s.add_runtime_dependency(%q<json>, [">= 0"])
|
42
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
42
43
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
43
44
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
|
44
45
|
s.add_runtime_dependency(%q<json>, [">= 0"])
|
45
46
|
else
|
46
47
|
s.add_dependency(%q<json>, [">= 0"])
|
48
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
47
49
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
48
50
|
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
49
51
|
s.add_dependency(%q<json>, [">= 0"])
|
50
52
|
end
|
51
53
|
else
|
52
54
|
s.add_dependency(%q<json>, [">= 0"])
|
55
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
53
56
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
54
57
|
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
55
58
|
s.add_dependency(%q<json>, [">= 0"])
|
data/test/sendgrid_test.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class SendgridTest < Test::Unit::TestCase
|
4
|
-
def setup
|
4
|
+
def setup
|
5
|
+
ActionMailer::Base.delivery_method = :test
|
6
|
+
ActionMailer::Base.perform_deliveries = true
|
7
|
+
ActionMailer::Base.deliveries = []
|
8
|
+
|
5
9
|
@options = {
|
6
10
|
:to => ['test@example.com'],
|
7
11
|
:from => 'test@example.com',
|
@@ -18,7 +22,21 @@ class SendgridTest < Test::Unit::TestCase
|
|
18
22
|
|
19
23
|
should "require the same number of items in a substitution array as is in the recipient array" do
|
20
24
|
assert_raise ArgumentError do
|
21
|
-
test_email = SendgridCampaignTestMailer.create_test(@options)
|
25
|
+
test_email = SendgridCampaignTestMailer.create_test(@options).deliver
|
22
26
|
end
|
23
27
|
end
|
28
|
+
|
29
|
+
should "accept a hash of unique args at the class level" do
|
30
|
+
assert_equal ({ :test_arg => "test value" }), SendgridUniqueArgsMailer.default_sg_unique_args
|
31
|
+
end
|
32
|
+
|
33
|
+
should "pass unique args from both the mailer class and the mailer method through custom headers" do
|
34
|
+
@options.delete(:substitutions)
|
35
|
+
SendgridUniqueArgsMailer.unique_args_test_email(@options).deliver
|
36
|
+
mail = ActionMailer::Base.deliveries.last
|
37
|
+
# assert({ :unique_args => {:mailer_method_unique_arg => "some value", :test_arg => "test value"} }.to_json == mail.header['X-SMTPAPI'].value)
|
38
|
+
expected = { 'unique_args' => {'mailer_method_unique_arg' => "some value", 'test_arg' => "test value"} }
|
39
|
+
actual = JSON.parse(mail.header['X-SMTPAPI'].value)
|
40
|
+
assert_equal(expected, actual)
|
41
|
+
end
|
24
42
|
end
|
data/test/test_helper.rb
CHANGED
@@ -4,11 +4,8 @@ require 'shoulda'
|
|
4
4
|
|
5
5
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
6
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
|
-
require 'sendgrid'
|
8
7
|
require 'action_mailer'
|
9
|
-
|
10
|
-
class Test::Unit::TestCase
|
11
|
-
end
|
8
|
+
require 'sendgrid'
|
12
9
|
|
13
10
|
class SendgridCampaignTestMailer < ActionMailer::Base
|
14
11
|
include SendGrid
|
@@ -26,13 +23,9 @@ class SendgridCampaignTestMailer < ActionMailer::Base
|
|
26
23
|
# array must match the :to array
|
27
24
|
# :category the sendgrid category used for tracking
|
28
25
|
# :html_content, :text_content, :subject
|
29
|
-
def
|
26
|
+
def create_test(options)
|
30
27
|
handle_sendgrid_options(options)
|
31
|
-
|
32
|
-
from(options[:from])
|
33
|
-
reply_to(options[:reply_to])
|
34
|
-
subject(options[:subject])
|
35
|
-
body(options[:html_content])
|
28
|
+
mail(options)
|
36
29
|
end
|
37
30
|
|
38
31
|
protected
|
@@ -49,7 +42,16 @@ class SendgridCampaignTestMailer < ActionMailer::Base
|
|
49
42
|
end
|
50
43
|
end
|
51
44
|
|
52
|
-
|
53
45
|
sendgrid_category(options[:category])
|
54
46
|
end
|
55
47
|
end
|
48
|
+
|
49
|
+
class SendgridUniqueArgsMailer < ActionMailer::Base
|
50
|
+
include SendGrid
|
51
|
+
sendgrid_unique_args({ :test_arg => "test value" })
|
52
|
+
|
53
|
+
def unique_args_test_email(options)
|
54
|
+
sendgrid_unique_args({ :mailer_method_unique_arg => "some value" })
|
55
|
+
mail(options)
|
56
|
+
end
|
57
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sendgrid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2013-05-15 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: json
|
@@ -29,6 +29,22 @@ dependencies:
|
|
29
29
|
- - ! '>='
|
30
30
|
- !ruby/object:Gem::Version
|
31
31
|
version: '0'
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: shoulda
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
36
|
+
requirements:
|
37
|
+
- - ! '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
32
48
|
- !ruby/object:Gem::Dependency
|
33
49
|
name: bundler
|
34
50
|
requirement: !ruby/object:Gem::Requirement
|