sendgrid-ruby 1.1.6 → 6.0.4

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.
Files changed (136) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +21 -0
  3. data/.env_sample +1 -3
  4. data/.gitignore +1 -0
  5. data/.travis.yml +28 -17
  6. data/CHANGELOG.md +231 -1
  7. data/CODE_OF_CONDUCT.md +73 -0
  8. data/CONTRIBUTING.md +214 -0
  9. data/Gemfile +5 -4
  10. data/ISSUE_TEMPLATE.md +26 -0
  11. data/LICENSE.md +21 -0
  12. data/Makefile +7 -0
  13. data/PULL_REQUEST_TEMPLATE.md +31 -0
  14. data/README.md +161 -225
  15. data/Rakefile +9 -2
  16. data/TROUBLESHOOTING.md +137 -0
  17. data/UPGRADE.md +5 -0
  18. data/USAGE.md +5037 -0
  19. data/USE_CASES.md +377 -0
  20. data/config.ru +4 -0
  21. data/docker/Dockerfile +12 -0
  22. data/docker/README.md +30 -0
  23. data/examples/accesssettings/accesssettings.rb +83 -0
  24. data/examples/alerts/alerts.rb +62 -0
  25. data/examples/apikeys/apikeys.rb +84 -0
  26. data/examples/asm/asm.rb +173 -0
  27. data/examples/browsers/browsers.rb +16 -0
  28. data/examples/campaigns/campaigns.rb +153 -0
  29. data/examples/categories/categories.rb +36 -0
  30. data/examples/clients/clients.rb +27 -0
  31. data/examples/contactdb/contactdb.rb +395 -0
  32. data/examples/devices/devices.rb +16 -0
  33. data/examples/geo/geo.rb +16 -0
  34. data/examples/helpers/mail/example.rb +147 -0
  35. data/examples/helpers/settings/example.rb +23 -0
  36. data/examples/helpers/stats/example.rb +42 -0
  37. data/examples/ips/ips.rb +167 -0
  38. data/examples/mail/mail.rb +173 -0
  39. data/examples/mailboxproviders/mailboxproviders.rb +16 -0
  40. data/examples/mailsettings/mailsettings.rb +219 -0
  41. data/examples/partnersettings/partnersettings.rb +39 -0
  42. data/examples/scopes/scopes.rb +61 -0
  43. data/examples/senderauthentication/senderauthentication.rb +310 -0
  44. data/examples/senders/senders.rb +98 -0
  45. data/examples/stats/stats.rb +16 -0
  46. data/examples/subusers/subusers.rb +169 -0
  47. data/examples/suppression/suppression.rb +201 -0
  48. data/examples/templates/templates.rb +129 -0
  49. data/examples/trackingsettings/trackingsettings.rb +110 -0
  50. data/examples/user/user.rb +293 -0
  51. data/gemfiles/Sinatra_1.gemfile +6 -0
  52. data/gemfiles/Sinatra_2.gemfile +6 -0
  53. data/lib/sendgrid/client.rb +33 -57
  54. data/lib/sendgrid/helpers/inbound/README.md +98 -0
  55. data/lib/sendgrid/helpers/inbound/app.rb +32 -0
  56. data/lib/sendgrid/helpers/inbound/config.yml +26 -0
  57. data/lib/sendgrid/helpers/inbound/public/index.html +10 -0
  58. data/lib/sendgrid/helpers/inbound/sample_data/default_data.txt +58 -0
  59. data/lib/sendgrid/helpers/inbound/sample_data/raw_data.txt +57 -0
  60. data/lib/sendgrid/helpers/inbound/sample_data/raw_data_with_attachments.txt +298 -0
  61. data/lib/sendgrid/helpers/inbound/send.rb +26 -0
  62. data/lib/sendgrid/helpers/ip_management/ip_management.rb +17 -0
  63. data/lib/sendgrid/helpers/mail/README.md +14 -0
  64. data/lib/sendgrid/helpers/mail/asm.rb +33 -0
  65. data/lib/sendgrid/helpers/mail/attachment.rb +86 -0
  66. data/lib/sendgrid/helpers/mail/bcc_settings.rb +33 -0
  67. data/lib/sendgrid/helpers/mail/bypass_list_management.rb +43 -0
  68. data/lib/sendgrid/helpers/mail/category.rb +20 -0
  69. data/lib/sendgrid/helpers/mail/click_tracking.rb +33 -0
  70. data/lib/sendgrid/helpers/mail/content.rb +20 -0
  71. data/lib/sendgrid/helpers/mail/custom_arg.rb +24 -0
  72. data/lib/sendgrid/helpers/mail/email.rb +29 -0
  73. data/lib/sendgrid/helpers/mail/footer.rb +43 -0
  74. data/lib/sendgrid/helpers/mail/ganalytics.rb +74 -0
  75. data/lib/sendgrid/helpers/mail/header.rb +24 -0
  76. data/lib/sendgrid/helpers/mail/mail.rb +140 -0
  77. data/lib/sendgrid/helpers/mail/mail_settings.rb +63 -0
  78. data/lib/sendgrid/helpers/mail/open_tracking.rb +33 -0
  79. data/lib/sendgrid/helpers/mail/personalization.rb +82 -0
  80. data/lib/sendgrid/helpers/mail/section.rb +24 -0
  81. data/lib/sendgrid/helpers/mail/spam_check.rb +43 -0
  82. data/lib/sendgrid/helpers/mail/subscription_tracking.rb +53 -0
  83. data/lib/sendgrid/helpers/mail/substitution.rb +24 -0
  84. data/lib/sendgrid/helpers/mail/tracking_settings.rb +53 -0
  85. data/lib/sendgrid/helpers/permissions/scope.rb +28 -0
  86. data/lib/sendgrid/helpers/permissions/scopes.yml +309 -0
  87. data/lib/sendgrid/helpers/settings/README.md +14 -0
  88. data/lib/sendgrid/helpers/settings/mail_settings_dto.rb +13 -0
  89. data/lib/sendgrid/helpers/settings/partner_settings_dto.rb +13 -0
  90. data/lib/sendgrid/helpers/settings/settings.rb +28 -0
  91. data/lib/sendgrid/helpers/settings/tracking_settings_dto.rb +24 -0
  92. data/lib/sendgrid/helpers/settings/user_settings_dto.rb +13 -0
  93. data/lib/sendgrid/helpers/stats/email_stats.rb +46 -0
  94. data/lib/sendgrid/helpers/stats/metrics.rb +35 -0
  95. data/lib/sendgrid/helpers/stats/stats_response.rb +31 -0
  96. data/lib/sendgrid/version.rb +1 -1
  97. data/lib/sendgrid-ruby.rb +27 -6
  98. data/mail_helper_v3.md +390 -0
  99. data/sendgrid-ruby.gemspec +13 -17
  100. data/spec/sendgrid/helpers/ip_management/ip_management_spec.rb +12 -0
  101. data/spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb +32 -0
  102. data/spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb +24 -0
  103. data/spec/sendgrid/helpers/settings/settings_spec.rb +25 -0
  104. data/spec/sendgrid/helpers/settings/tracking_settings_dto_spec.rb +27 -0
  105. data/spec/sendgrid/helpers/settings/user_settings_dto_spec.rb +24 -0
  106. data/spec/sendgrid/helpers/stats/email_stats_spec.rb +112 -0
  107. data/spec/sendgrid/helpers/stats/metrics_spec.rb +46 -0
  108. data/spec/sendgrid/helpers/stats/stats_response_spec.rb +76 -0
  109. data/spec/spec_helper.rb +10 -1
  110. data/test/prism.sh +42 -0
  111. data/test/sendgrid/helpers/mail/test_attachment.rb +35 -0
  112. data/test/sendgrid/helpers/mail/test_category.rb +27 -0
  113. data/test/sendgrid/helpers/mail/test_email.rb +34 -0
  114. data/test/sendgrid/helpers/mail/test_mail.rb +261 -0
  115. data/test/sendgrid/helpers/mail/test_personalizations.rb +161 -0
  116. data/test/sendgrid/permissions/test_scopes.rb +38 -0
  117. data/test/sendgrid/test_sendgrid-ruby.rb +2751 -0
  118. metadata +149 -115
  119. data/.rspec +0 -2
  120. data/.rubocop.yml +0 -30
  121. data/FETCH_HEAD +0 -0
  122. data/Guardfile +0 -10
  123. data/LICENSE.txt +0 -22
  124. data/example.rb +0 -41
  125. data/lib/sendgrid/exceptions.rb +0 -7
  126. data/lib/sendgrid/mail.rb +0 -182
  127. data/lib/sendgrid/recipient.rb +0 -29
  128. data/lib/sendgrid/response.rb +0 -14
  129. data/lib/sendgrid/template.rb +0 -26
  130. data/lib/sendgrid/template_mailer.rb +0 -59
  131. data/spec/lib/sendgrid/client_spec.rb +0 -87
  132. data/spec/lib/sendgrid/mail_spec.rb +0 -151
  133. data/spec/lib/sendgrid/recipient_spec.rb +0 -91
  134. data/spec/lib/sendgrid/template_mailer_spec.rb +0 -86
  135. data/spec/lib/sendgrid/template_spec.rb +0 -61
  136. data/spec/lib/sendgrid_spec.rb +0 -7
@@ -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
@@ -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
@@ -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
@@ -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
@@ -1,91 +0,0 @@
1
- require_relative '../../../lib/sendgrid/recipient'
2
-
3
- module SendGrid
4
- describe Recipient do
5
- subject { described_class.new(anything) }
6
-
7
- describe '#initialize' do
8
- it 'sets the address instance var' do
9
- expect(subject.instance_variable_get(:@address)).to_not be_nil
10
- end
11
-
12
- it 'sets substitutions to an empty hash' do
13
- expect(subject.instance_variable_get(:@substitutions)).to eq({})
14
- end
15
-
16
- context 'initialized with nil' do
17
- it 'raises an error' do
18
- expect do
19
- described_class.new(nil)
20
- end.to raise_error(Recipient::NoAddress, 'Recipient address cannot be nil')
21
- end
22
- end
23
- end
24
-
25
- describe '#add_substitution' do
26
- it 'adds the key and value to the substitutions hash' do
27
- subject.add_substitution(:foo, :bar)
28
- expect(subject.substitutions).to have_key(:foo)
29
- expect(subject.substitutions[:foo]).to eq(:bar)
30
- end
31
-
32
- context 'the same substiution key already exists' do
33
- before do
34
- subject.add_substitution(:foo, :bar)
35
- end
36
-
37
- it 'replaces the value' do
38
- subject.add_substitution(:foo, :baz)
39
- expect(subject.substitutions).to have_key(:foo)
40
- expect(subject.substitutions[:foo]).to eq(:baz)
41
- end
42
- end
43
- end
44
-
45
- describe '#add_to_smtpapi' do
46
- let(:substitutions) { { foo: :bar, baz: :qux } }
47
- let(:smtp_api) { Smtpapi::Header.new }
48
- before do
49
- substitutions.each do |key, value|
50
- subject.add_substitution(key, value)
51
- end
52
- end
53
-
54
- it 'adds the address' do
55
- expect(smtp_api).to receive(:add_to)
56
- subject.add_to_smtpapi(smtp_api)
57
- end
58
-
59
- it 'calls add_substitution as many times as there are substitution keys' do
60
- substitutions.each do |key, value|
61
- expect(smtp_api).to receive(:add_substitution).with(key, [value])
62
- end
63
-
64
- subject.add_to_smtpapi(smtp_api)
65
- end
66
-
67
- context 'a substitution for the same key already exists' do
68
- let(:substitutions) { { foo: :bar } }
69
- let(:added_value) { [:bar, :rab] }
70
-
71
- before do
72
- smtp_api.add_substitution(:foo, [:rab])
73
- end
74
-
75
- it 'adds to it' do
76
- expect(smtp_api).to receive(:add_substitution).with(:foo, array_including(added_value))
77
- subject.add_to_smtpapi(smtp_api)
78
- end
79
- end
80
-
81
- context 'substitutions is empty' do
82
- let(:substitutions) { {} }
83
-
84
- it 'does nothing' do
85
- expect(smtp_api).to_not receive(:add_substitution)
86
- subject.add_to_smtpapi(smtp_api)
87
- end
88
- end
89
- end
90
- end
91
- end
@@ -1,86 +0,0 @@
1
- require_relative '../../../lib/sendgrid/template_mailer'
2
-
3
- module SendGrid
4
- describe TemplateMailer do
5
- let(:client) { anything }
6
- let(:template) { Template.new(anything) }
7
- let(:recipients) { [Recipient.new(anything)] }
8
-
9
- describe '#initialize' do
10
- let(:client) { anything }
11
- let(:template) { Template.new(anything) }
12
- let(:recipients) { [anything] }
13
-
14
- subject { described_class.new(client, template, recipients) }
15
-
16
- it 'sets the instance variables' do
17
- expect(subject.instance_variable_get(:@client)).to_not be_nil
18
- expect(subject.instance_variable_get(:@template)).to_not be_nil
19
- expect(subject.instance_variable_get(:@recipients)).to_not be_nil
20
- end
21
-
22
- context 'nil variables' do
23
- context 'template is nil' do
24
- let(:template) { nil }
25
-
26
- it 'raises error' do
27
- expect do
28
- subject
29
- end.to raise_error(InvalidTemplate, 'Template must be present')
30
- end
31
- end
32
-
33
- context 'client is nil' do
34
- let(:client) { nil }
35
-
36
- it 'raises error' do
37
- expect do
38
- subject
39
- end.to raise_error(InvalidClient, 'Client must be present')
40
- end
41
- end
42
- end
43
-
44
- context 'recipients' do
45
- let(:first_recipient) { Recipient.new('someone@anything.com') }
46
- let(:second_recipient) { Recipient.new('test@test.com') }
47
- let(:recipients) { [first_recipient, second_recipient] }
48
-
49
- it 'adds them to the template' do
50
- expect(template).to receive(:add_recipient).with(first_recipient)
51
- expect(template).to receive(:add_recipient).with(second_recipient)
52
-
53
- subject
54
- end
55
- end
56
- end
57
-
58
- describe '#mail' do
59
- subject { described_class.new(client, template, recipients) }
60
-
61
- let(:mail_params) { {} }
62
- let(:mail_to_h) { '' }
63
-
64
- before do
65
- allow(subject).to receive(:mail_params) { mail_params }
66
- allow_any_instance_of(Mail).to receive(:to_h) { mail_to_h }
67
- allow(client).to receive(:send)
68
- end
69
-
70
- it 'creates a new mail object' do
71
- expect(Mail).to receive(:new).with(mail_params).and_call_original
72
- subject.mail
73
- end
74
-
75
- it 'adds the template to the mail object' do
76
- expect_any_instance_of(Mail).to receive(:template=).with(template)
77
- subject.mail
78
- end
79
-
80
- it 'calls send on the client with the mail object' do
81
- expect(client).to receive(:send).with(mail_to_h)
82
- subject.mail
83
- end
84
- end
85
- end
86
- end
@@ -1,61 +0,0 @@
1
- require_relative '../../../lib/sendgrid/template'
2
-
3
- module SendGrid
4
- describe Template do
5
- let(:id) { anything }
6
- subject { described_class.new(id) }
7
-
8
- describe '#initialize' do
9
- it 'sets the id instance var' do
10
- expect(subject.instance_variable_get(:@id)).to_not be_nil
11
- end
12
- end
13
-
14
- describe '#add_to_smtpapi' do
15
- let(:id) { rand(8999) }
16
- let(:smtpapi) { Smtpapi::Header.new }
17
-
18
- it 'adds enabled and the templates id' do
19
- expect(smtpapi).to receive(:add_filter).with(:templates, :enable, 1)
20
- expect(smtpapi).to receive(:add_filter).with(:templates, :template_id, id)
21
- subject.add_to_smtpapi(smtpapi)
22
- end
23
-
24
- context 'smtpapi is nil' do
25
- it 'does not error' do
26
- expect do
27
- subject.add_to_smtpapi(nil)
28
- end.to_not raise_error
29
- end
30
- end
31
-
32
- context 'with recipients' do
33
- let(:substitution_key) { :foo }
34
- let(:substitution_value) { :bar }
35
- let(:recipients) do
36
- [].tap do |recipients|
37
- 3.times.each do
38
- r = Recipient.new("test+#{ rand(100) }@example.com")
39
- r.add_substitution(substitution_key, substitution_value)
40
- recipients << r
41
- end
42
- end
43
- end
44
-
45
- before do
46
- recipients.each do |r|
47
- subject.add_recipient(r)
48
- end
49
- end
50
-
51
- it 'calls the recipients call to add to smtpapi' do
52
- recipients.each do |recipient|
53
- expect(recipient).to receive(:add_to_smtpapi).with(smtpapi)
54
- end
55
-
56
- subject.add_to_smtpapi(smtpapi)
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'SendGrid' do
4
- it 'should have a version' do
5
- expect(SendGrid::VERSION).to eq('1.1.6')
6
- end
7
- end