sendgrid-ruby 1.1.6 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE +17 -0
- data/.travis.yml +1 -6
- data/CHANGELOG.md +6 -0
- data/CONTRIBUTING.md +202 -0
- data/Gemfile +3 -5
- data/LICENSE.txt +1 -1
- data/README.md +74 -248
- data/Rakefile +8 -6
- data/USAGE.md +4645 -0
- data/examples/accesssettings/accesssettings.rb +89 -0
- data/examples/apikeys/apikeys.rb +95 -0
- data/examples/asm/asm.rb +169 -0
- data/examples/browsers/browsers.rb +29 -0
- data/examples/campaigns/campaigns.rb +166 -0
- data/examples/categories/categories.rb +49 -0
- data/examples/clients/clients.rb +40 -0
- data/examples/contactdb/contactdb.rb +398 -0
- data/examples/devices/devices.rb +29 -0
- data/examples/geo/geo.rb +29 -0
- data/examples/helpers/mail/example.rb +130 -0
- data/examples/ips/ips.rb +167 -0
- data/examples/mail/mail.rb +191 -0
- data/examples/mailboxproviders/mailboxproviders.rb +29 -0
- data/examples/mailsettings/mailsettings.rb +232 -0
- data/examples/partnersettings/partnersettings.rb +52 -0
- data/examples/scopes/scopes.rb +28 -0
- data/examples/stats/stats.rb +29 -0
- data/examples/subusers/subusers.rb +182 -0
- data/examples/suppression/suppression.rb +186 -0
- data/examples/templates/templates.rb +142 -0
- data/examples/trackingsettings/trackingsettings.rb +123 -0
- data/examples/user/user.rb +256 -0
- data/examples/whitelabel/whitelabel.rb +323 -0
- data/lib/helpers/mail/README.md +14 -0
- data/lib/helpers/mail/mail.rb +999 -0
- data/lib/sendgrid-ruby.rb +33 -8
- data/sendgrid-ruby.gemspec +5 -17
- data/test/helpers/mail/test_mail.rb +122 -0
- data/test/test_sendgrid-ruby.rb +2016 -0
- metadata +42 -190
- data/.env_sample +0 -3
- data/.rspec +0 -2
- data/.rubocop.yml +0 -30
- data/FETCH_HEAD +0 -0
- data/Guardfile +0 -10
- data/example.rb +0 -41
- data/lib/sendgrid/client.rb +0 -62
- data/lib/sendgrid/exceptions.rb +0 -7
- data/lib/sendgrid/mail.rb +0 -182
- data/lib/sendgrid/recipient.rb +0 -29
- data/lib/sendgrid/response.rb +0 -14
- data/lib/sendgrid/template.rb +0 -26
- data/lib/sendgrid/template_mailer.rb +0 -59
- data/lib/sendgrid/version.rb +0 -3
- data/spec/lib/sendgrid/client_spec.rb +0 -87
- data/spec/lib/sendgrid/mail_spec.rb +0 -151
- data/spec/lib/sendgrid/recipient_spec.rb +0 -91
- data/spec/lib/sendgrid/template_mailer_spec.rb +0 -86
- data/spec/lib/sendgrid/template_spec.rb +0 -61
- data/spec/lib/sendgrid_spec.rb +0 -7
- data/spec/spec_helper.rb +0 -1
data/lib/sendgrid/mail.rb
DELETED
@@ -1,182 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'smtpapi'
|
3
|
-
require 'mimemagic'
|
4
|
-
|
5
|
-
module SendGrid
|
6
|
-
class Mail
|
7
|
-
attr_accessor :to, :to_name, :from, :from_name, :subject, :text, :html, :cc, :cc_name,
|
8
|
-
:bcc, :bcc_name, :reply_to, :date, :smtpapi, :attachments, :content, :template
|
9
|
-
|
10
|
-
def initialize(params = {})
|
11
|
-
params.each do |k, v|
|
12
|
-
send(:"#{k}=", v) unless v.nil?
|
13
|
-
end
|
14
|
-
|
15
|
-
yield self if block_given?
|
16
|
-
end
|
17
|
-
|
18
|
-
def add_to(email, name = nil)
|
19
|
-
if email.is_a?(Array)
|
20
|
-
to.concat(email)
|
21
|
-
else
|
22
|
-
to << email
|
23
|
-
end
|
24
|
-
add_to_name(name) if name
|
25
|
-
end
|
26
|
-
|
27
|
-
def to
|
28
|
-
@to ||= []
|
29
|
-
end
|
30
|
-
|
31
|
-
def to_name
|
32
|
-
@to_name ||= []
|
33
|
-
end
|
34
|
-
|
35
|
-
def add_to_name(name)
|
36
|
-
if name.is_a?(Array)
|
37
|
-
to_name.concat(name)
|
38
|
-
else
|
39
|
-
to_name << name
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def cc
|
44
|
-
@cc ||= []
|
45
|
-
end
|
46
|
-
|
47
|
-
def cc_name
|
48
|
-
@cc_name ||= []
|
49
|
-
end
|
50
|
-
|
51
|
-
def add_cc(email, name = nil)
|
52
|
-
if email.is_a?(Array)
|
53
|
-
cc.concat(email)
|
54
|
-
else
|
55
|
-
cc << email
|
56
|
-
end
|
57
|
-
add_cc_name(name) if name
|
58
|
-
end
|
59
|
-
|
60
|
-
def add_cc_name(name)
|
61
|
-
if name.is_a?(Array)
|
62
|
-
cc_name.concat(name)
|
63
|
-
else
|
64
|
-
cc_name << name
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def bcc
|
69
|
-
@bcc ||= []
|
70
|
-
end
|
71
|
-
|
72
|
-
def bcc_name
|
73
|
-
@bcc_name ||= []
|
74
|
-
end
|
75
|
-
|
76
|
-
def add_bcc(email, name = nil)
|
77
|
-
if email.is_a?(Array)
|
78
|
-
bcc.concat(email)
|
79
|
-
else
|
80
|
-
bcc << email
|
81
|
-
end
|
82
|
-
add_bcc_name(name) if name
|
83
|
-
end
|
84
|
-
|
85
|
-
def add_bcc_name(name)
|
86
|
-
if name.is_a?(Array)
|
87
|
-
bcc_name.concat(name)
|
88
|
-
else
|
89
|
-
bcc_name << name
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def add_attachment(path, name = nil)
|
94
|
-
mime_type = MimeMagic.by_path(path)
|
95
|
-
file = Faraday::UploadIO.new(path, mime_type)
|
96
|
-
name ||= File.basename(file)
|
97
|
-
attachments << {file: file, name: name}
|
98
|
-
end
|
99
|
-
|
100
|
-
def headers
|
101
|
-
@headers ||= {}
|
102
|
-
end
|
103
|
-
|
104
|
-
def attachments
|
105
|
-
@attachments ||= []
|
106
|
-
end
|
107
|
-
|
108
|
-
def contents
|
109
|
-
@contents ||= []
|
110
|
-
end
|
111
|
-
|
112
|
-
def add_content(path, cid)
|
113
|
-
mime_type = MimeMagic.by_path(path)
|
114
|
-
file = Faraday::UploadIO.new(path, mime_type)
|
115
|
-
name ||= File.basename(file)
|
116
|
-
contents << {file: file, cid: cid, name: name}
|
117
|
-
end
|
118
|
-
|
119
|
-
def smtpapi
|
120
|
-
@smtpapi ||= Smtpapi::Header.new
|
121
|
-
end
|
122
|
-
|
123
|
-
def smtpapi_json
|
124
|
-
if !template.nil? && template.is_a?(Template)
|
125
|
-
template.add_to_smtpapi(smtpapi)
|
126
|
-
end
|
127
|
-
|
128
|
-
smtpapi.to_json
|
129
|
-
end
|
130
|
-
|
131
|
-
# rubocop:disable Style/HashSyntax
|
132
|
-
def to_h
|
133
|
-
payload = {
|
134
|
-
:from => from,
|
135
|
-
:fromname => from_name,
|
136
|
-
:subject => subject,
|
137
|
-
:to => to,
|
138
|
-
:toname => to_name,
|
139
|
-
:date => date,
|
140
|
-
:replyto => reply_to,
|
141
|
-
:cc => cc,
|
142
|
-
:ccname => cc_name,
|
143
|
-
:bcc => bcc,
|
144
|
-
:bccname => bcc_name,
|
145
|
-
:text => text,
|
146
|
-
:html => html,
|
147
|
-
:'x-smtpapi' => smtpapi_json,
|
148
|
-
:content => ({":default"=>"0"} unless contents.empty?),
|
149
|
-
:files => ({":default"=>"0"} unless attachments.empty? and contents.empty?)
|
150
|
-
# If I don't define a default value, I get a Nil error when
|
151
|
-
# in attachments.each do |file|
|
152
|
-
#:files => ({} unless attachments.empty?)
|
153
|
-
}.reject {|_, v| v.nil? || v.empty?}
|
154
|
-
|
155
|
-
payload.delete(:'x-smtpapi') if payload[:'x-smtpapi'] == '{}'
|
156
|
-
|
157
|
-
payload[:to] = payload[:from] if payload[:to].nil? and not smtpapi.to.empty?
|
158
|
-
|
159
|
-
unless attachments.empty?
|
160
|
-
attachments.each do |file|
|
161
|
-
payload[:files][file[:name]] = file[:file]
|
162
|
-
end
|
163
|
-
if payload[:files].has_key?(":default")
|
164
|
-
payload[:files].delete(":default")
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
unless contents.empty?
|
169
|
-
contents.each do |content|
|
170
|
-
payload[:content][content[:name]] = content[:cid]
|
171
|
-
payload[:files][content[:name]] = content[:file]
|
172
|
-
end
|
173
|
-
if payload[:content].has_key?(":default")
|
174
|
-
payload[:content].delete(":default")
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
payload
|
179
|
-
end
|
180
|
-
# rubocop:enable Style/HashSyntax
|
181
|
-
end
|
182
|
-
end
|
data/lib/sendgrid/recipient.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'smtpapi'
|
2
|
-
|
3
|
-
module SendGrid
|
4
|
-
class Recipient
|
5
|
-
class NoAddress < StandardError; end
|
6
|
-
|
7
|
-
attr_reader :address, :substitutions
|
8
|
-
|
9
|
-
def initialize(address)
|
10
|
-
@address = address
|
11
|
-
@substitutions = {}
|
12
|
-
|
13
|
-
raise NoAddress, 'Recipient address cannot be nil' if @address.nil?
|
14
|
-
end
|
15
|
-
|
16
|
-
def add_substitution(key, value)
|
17
|
-
substitutions[key] = value
|
18
|
-
end
|
19
|
-
|
20
|
-
def add_to_smtpapi(smtpapi)
|
21
|
-
smtpapi.add_to(@address)
|
22
|
-
|
23
|
-
@substitutions.each do |key, value|
|
24
|
-
existing = smtpapi.sub[key] || []
|
25
|
-
smtpapi.add_substitution(key, existing + [value])
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
data/lib/sendgrid/response.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
|
3
|
-
module SendGrid
|
4
|
-
class Response
|
5
|
-
attr_reader :code, :headers, :body, :raw_body
|
6
|
-
|
7
|
-
def initialize(params)
|
8
|
-
@code = params[:code]
|
9
|
-
@headers = params[:headers]
|
10
|
-
@body = JSON.parse(params[:body])
|
11
|
-
@raw_body = params[:body]
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
data/lib/sendgrid/template.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'smtpapi'
|
2
|
-
|
3
|
-
module SendGrid
|
4
|
-
class Template
|
5
|
-
attr_reader :id, :recipients
|
6
|
-
|
7
|
-
def initialize(id)
|
8
|
-
@id = id
|
9
|
-
@recipients = []
|
10
|
-
end
|
11
|
-
|
12
|
-
def add_recipient(recipient)
|
13
|
-
recipients << recipient
|
14
|
-
end
|
15
|
-
|
16
|
-
def add_to_smtpapi(smtpapi)
|
17
|
-
return if smtpapi.nil?
|
18
|
-
|
19
|
-
smtpapi.tap do |api|
|
20
|
-
api.add_filter(:templates, :enable, 1)
|
21
|
-
api.add_filter(:templates, :template_id, id)
|
22
|
-
recipients.each { |r| r.add_to_smtpapi(smtpapi) }
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
module SendGrid
|
2
|
-
class InvalidClient < StandardError; end
|
3
|
-
class InvalidTemplate < StandardError; end
|
4
|
-
class InvalidRecipients < StandardError; end
|
5
|
-
|
6
|
-
class TemplateMailer
|
7
|
-
|
8
|
-
# This class is responsible for coordinating the responsibilities
|
9
|
-
# of various models in the gem.
|
10
|
-
# It makes use of the Recipient, Template and Mail models to create
|
11
|
-
# a single work flow, an example might look like:
|
12
|
-
#
|
13
|
-
# users = User.where(email: ['first@gmail.com', 'second@gmail.com'])
|
14
|
-
#
|
15
|
-
# recipients = []
|
16
|
-
#
|
17
|
-
# users.each do |user|
|
18
|
-
# recipient = SendGrid::Recipient.new(user.email)
|
19
|
-
# recipient.add_substitution('first_name', user.first_name)
|
20
|
-
# recipient.add_substitution('city', user.city)
|
21
|
-
#
|
22
|
-
# recipients << recipient
|
23
|
-
# end
|
24
|
-
#
|
25
|
-
# template = SendGrid::Template.new('MY_TEMPLATE_ID')
|
26
|
-
#
|
27
|
-
# client = SendGrid::Client.new(api_user: my_user, api_key: my_key)
|
28
|
-
#
|
29
|
-
# mail_defaults = {
|
30
|
-
# from: 'admin@email.com',
|
31
|
-
# html: '<h1>I like email</h1>',
|
32
|
-
# text: 'I like email',
|
33
|
-
# subject: 'Email is great',
|
34
|
-
# }
|
35
|
-
#
|
36
|
-
# mailer = SendGrid::TemplateMailer.new(client, template, recipients)
|
37
|
-
# mailer.mail(mail_defaults)
|
38
|
-
def initialize(client, template, recipients = [])
|
39
|
-
@client = client
|
40
|
-
@template = template
|
41
|
-
@recipients = recipients
|
42
|
-
|
43
|
-
raise InvalidClient, 'Client must be present' if @client.nil?
|
44
|
-
raise InvalidTemplate, 'Template must be present' if @template.nil?
|
45
|
-
raise InvalidRecipients, 'Recipients may not be empty' if @recipients.empty?
|
46
|
-
|
47
|
-
@recipients.each do |recipient|
|
48
|
-
@template.add_recipient(recipient)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def mail(params = {})
|
53
|
-
mail = Mail.new(params)
|
54
|
-
|
55
|
-
mail.template = @template
|
56
|
-
@client.send(mail.to_h)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
data/lib/sendgrid/version.rb
DELETED
@@ -1,87 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'spec_helper'
|
3
|
-
require 'webmock/rspec'
|
4
|
-
|
5
|
-
describe 'SendGrid::Client' do
|
6
|
-
it 'should accept a username and password' do
|
7
|
-
expect(SendGrid::Client.new(api_user: 'test', api_key: 'test')).to be_an_instance_of(SendGrid::Client)
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'should accept an api key' do
|
11
|
-
expect(SendGrid::Client.new(api_key: 'sendgrid_123')).to be_an_instance_of(SendGrid::Client)
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'should build the default url' do
|
15
|
-
expect(SendGrid::Client.new.url).to eq('https://api.sendgrid.com')
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'should build a custom url' do
|
19
|
-
expect(SendGrid::Client.new(port: 3000, host: 'foo.sendgrid.com', protocol: 'tacos').url).to eq('tacos://foo.sendgrid.com:3000')
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'should use the default endpoint' do
|
23
|
-
expect(SendGrid::Client.new.endpoint).to eq('/api/mail.send.json')
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'accepts a block' do
|
27
|
-
expect { |b| SendGrid::Client.new(&b) }.to yield_control
|
28
|
-
end
|
29
|
-
|
30
|
-
describe ':send' do
|
31
|
-
it 'should make a request to sendgrid' do
|
32
|
-
stub_request(:any, 'https://api.sendgrid.com/api/mail.send.json')
|
33
|
-
.to_return(body: {message: 'success'}.to_json, status: 200, headers: {'X-TEST' => 'yes'})
|
34
|
-
|
35
|
-
client = SendGrid::Client.new(api_key: 'abc123')
|
36
|
-
mail = SendGrid::Mail.new
|
37
|
-
res = client.send(mail)
|
38
|
-
expect(res.code).to eq(200)
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'should have an auth header when using an api key' do
|
42
|
-
stub_request(:any, 'https://api.sendgrid.com/api/mail.send.json')
|
43
|
-
.to_return(body: {message: 'success'}.to_json, status: 200, headers: {'X-TEST' => 'yes'})
|
44
|
-
|
45
|
-
client = SendGrid::Client.new(api_key: 'abc123')
|
46
|
-
mail = SendGrid::Mail.new
|
47
|
-
|
48
|
-
client.send(mail)
|
49
|
-
|
50
|
-
expect(WebMock).to have_requested(:post, 'https://api.sendgrid.com/api/mail.send.json')
|
51
|
-
.with(headers: {'Authorization' => 'Bearer abc123'})
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'should have a username + password when using them' do
|
55
|
-
stub_request(:any, 'https://api.sendgrid.com/api/mail.send.json')
|
56
|
-
.to_return(body: {message: 'success'}.to_json, status: 200, headers: {'X-TEST' => 'yes'})
|
57
|
-
|
58
|
-
client = SendGrid::Client.new(api_user: 'foobar', api_key: 'abc123')
|
59
|
-
mail = SendGrid::Mail.new
|
60
|
-
|
61
|
-
res = client.send(mail)
|
62
|
-
|
63
|
-
expect(WebMock).to have_requested(:post, 'https://api.sendgrid.com/api/mail.send.json')
|
64
|
-
.with(body: 'api_key=abc123&api_user=foobar')
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'should raise a SendGrid::Exception if status is not 200' do
|
68
|
-
stub_request(:any, 'https://api.sendgrid.com/api/mail.send.json')
|
69
|
-
.to_return(body: {message: 'error', errors: ['Bad username / password']}.to_json, status: 400, headers: {'X-TEST' => 'yes'})
|
70
|
-
|
71
|
-
client = SendGrid::Client.new(api_user: 'foobar', api_key: 'abc123')
|
72
|
-
mail = SendGrid::Mail.new
|
73
|
-
|
74
|
-
expect {client.send(mail)}.to raise_error(SendGrid::Exception)
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'should not raise a SendGrid::Exception if raise_exceptions is disabled' do
|
78
|
-
stub_request(:any, 'https://api.sendgrid.com/api/mail.send.json')
|
79
|
-
.to_return(body: {message: 'error', errors: ['Bad username / password']}.to_json, status: 400, headers: {'X-TEST' => 'yes'})
|
80
|
-
|
81
|
-
client = SendGrid::Client.new(api_user: 'foobar', api_key: 'abc123', raise_exceptions: false)
|
82
|
-
mail = SendGrid::Mail.new
|
83
|
-
|
84
|
-
expect {client.send(mail)}.not_to raise_error
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
@@ -1,151 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'SendGrid::Mail' do
|
4
|
-
before(:each) do
|
5
|
-
@mail = SendGrid::Mail.new
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'should create an instance' do
|
9
|
-
expect(SendGrid::Mail.new).to be_an_instance_of(SendGrid::Mail)
|
10
|
-
end
|
11
|
-
|
12
|
-
describe 'add_to_name' do
|
13
|
-
it 'should accept a name' do
|
14
|
-
@mail.add_to_name('Frank Foo')
|
15
|
-
expect(@mail.to_name).to eq(['Frank Foo'])
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'should accept an array of names' do
|
19
|
-
@mail.add_to_name(['Frank Foo', 'Bob Bar'])
|
20
|
-
expect(@mail.to_name).to eq(['Frank Foo', 'Bob Bar'])
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe 'add_to' do
|
25
|
-
it 'should accept an email' do
|
26
|
-
@mail.add_to('foo@example.com')
|
27
|
-
expect(@mail.to).to eq(['foo@example.com'])
|
28
|
-
|
29
|
-
@mail.add_to('bar@example.com')
|
30
|
-
expect(@mail.to).to eq(['foo@example.com', 'bar@example.com'])
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'should accept an email and name' do
|
34
|
-
@mail.add_to('foo@example.com', 'Frank Foo')
|
35
|
-
expect(@mail.to).to eq(['foo@example.com'])
|
36
|
-
expect(@mail.to_name).to eq(['Frank Foo'])
|
37
|
-
|
38
|
-
@mail.add_to('bar@example.com', 'Bob Bar')
|
39
|
-
expect(@mail.to).to eq(['foo@example.com', 'bar@example.com'])
|
40
|
-
expect(@mail.to_name).to eq(['Frank Foo', 'Bob Bar'])
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'should accept an array of emails' do
|
44
|
-
@mail.add_to(['foo@example.com', 'bar@example.com'])
|
45
|
-
expect(@mail.to).to eq(['foo@example.com', 'bar@example.com'])
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'should accept an array of emails and names' do
|
49
|
-
@mail.add_to(['foo@example.com', 'bar@example.com'], ['Frank Foo', 'Bob Bar'])
|
50
|
-
expect(@mail.to).to eq(['foo@example.com', 'bar@example.com'])
|
51
|
-
expect(@mail.to_name).to eq(['Frank Foo', 'Bob Bar'])
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe 'add_cc' do
|
56
|
-
it 'should accept an email' do
|
57
|
-
@mail.add_cc('foo@example.com')
|
58
|
-
expect(@mail.cc).to eq(['foo@example.com'])
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'should accept an email and a name' do
|
62
|
-
@mail.add_cc('foo@example.com', 'Frank Foo')
|
63
|
-
expect(@mail.cc).to eq(['foo@example.com'])
|
64
|
-
expect(@mail.cc_name).to eq(['Frank Foo'])
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'should accept an array of emails' do
|
68
|
-
@mail.add_cc(['foo@example.com', 'bar@example.com'])
|
69
|
-
expect(@mail.cc).to eq(['foo@example.com', 'bar@example.com'])
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'should accept an array of emails and names' do
|
73
|
-
@mail.add_cc(['foo@example.com', 'bar@example.com'], ['Frank Foo', 'Bob Bar'])
|
74
|
-
expect(@mail.cc).to eq(['foo@example.com', 'bar@example.com'])
|
75
|
-
expect(@mail.cc_name).to eq(['Frank Foo', 'Bob Bar'])
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
describe 'add_bcc' do
|
80
|
-
it 'should accept an email' do
|
81
|
-
@mail.add_bcc('foo@example.com')
|
82
|
-
expect(@mail.bcc).to eq(['foo@example.com'])
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'should accept an email and a name' do
|
86
|
-
@mail.add_bcc('foo@example.com', 'Frank Foo')
|
87
|
-
expect(@mail.bcc).to eq(['foo@example.com'])
|
88
|
-
expect(@mail.bcc_name).to eq(['Frank Foo'])
|
89
|
-
end
|
90
|
-
|
91
|
-
it 'should accept an array of emails' do
|
92
|
-
@mail.add_bcc(['foo@example.com', 'bar@example.com'])
|
93
|
-
expect(@mail.bcc).to eq(['foo@example.com', 'bar@example.com'])
|
94
|
-
end
|
95
|
-
|
96
|
-
it 'should accept an array of emails and names' do
|
97
|
-
@mail.add_bcc(['foo@example.com', 'bar@example.com'], ['Frank Foo', 'Bob Bar'])
|
98
|
-
expect(@mail.bcc).to eq(['foo@example.com', 'bar@example.com'])
|
99
|
-
expect(@mail.bcc_name).to eq(['Frank Foo', 'Bob Bar'])
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
describe 'to' do
|
104
|
-
it 'should be set' do
|
105
|
-
@mail.to = 'foo@example.com'
|
106
|
-
expect(@mail.to).to eq('foo@example.com')
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
describe 'from_name' do
|
111
|
-
it 'should be set' do
|
112
|
-
@mail.from_name = 'Frank Foo'
|
113
|
-
expect(@mail.from_name).to eq('Frank Foo')
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
describe 'reply_to' do
|
118
|
-
it 'should be set' do
|
119
|
-
@mail.reply_to = 'foo@example.com'
|
120
|
-
expect(@mail.reply_to).to eq('foo@example.com')
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
describe 'smtpapi_json' do
|
125
|
-
before do
|
126
|
-
@mail.template = template
|
127
|
-
end
|
128
|
-
|
129
|
-
context 'a template has been set' do
|
130
|
-
let(:template) { SendGrid::Template.new(anything) }
|
131
|
-
|
132
|
-
it 'adds the template to the smtpapi header' do
|
133
|
-
expect(@mail.template).to receive(:add_to_smtpapi).with(@mail.smtpapi)
|
134
|
-
expect(@mail.smtpapi).to receive(:to_json)
|
135
|
-
|
136
|
-
@mail.to_h
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
context 'no template has been set' do
|
141
|
-
let(:template) { nil }
|
142
|
-
|
143
|
-
it 'does not add anything to the smtpapi header' do
|
144
|
-
expect_any_instance_of(SendGrid::Template).to_not receive(:add_to_smtpapi)
|
145
|
-
expect(@mail.smtpapi).to receive(:to_json)
|
146
|
-
|
147
|
-
@mail.to_h
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|