sendgrid-ruby 5.3.0 → 6.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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.github/PULL_REQUEST_TEMPLATE +3 -1
  3. data/CHANGELOG.md +25 -0
  4. data/CODE_OF_CONDUCT.md +11 -11
  5. data/CONTRIBUTING.md +17 -22
  6. data/LICENSE.txt +1 -1
  7. data/README.md +25 -12
  8. data/Rakefile +1 -1
  9. data/TROUBLESHOOTING.md +21 -15
  10. data/UPGRADE.md +5 -0
  11. data/USAGE.md +1103 -1101
  12. data/USE_CASES.md +248 -18
  13. data/examples/helpers/mail/example.rb +7 -7
  14. data/examples/ips/ips.rb +13 -0
  15. data/examples/mail/mail.rb +2 -2
  16. data/examples/scopes/scopes.rb +49 -3
  17. data/examples/{whitelabel/whitelabel.rb → senderauthentication/senderauthentication.rb} +27 -27
  18. data/examples/suppression/suppression.rb +10 -10
  19. data/lib/sendgrid-ruby.rb +2 -0
  20. data/lib/sendgrid/client.rb +12 -9
  21. data/lib/sendgrid/helpers/inbound/README.md +22 -5
  22. data/lib/sendgrid/helpers/inbound/app.rb +13 -1
  23. data/lib/sendgrid/helpers/inbound/public/index.html +1 -1
  24. data/lib/sendgrid/helpers/inbound/sample_data/default_data.txt +2 -2
  25. data/lib/sendgrid/helpers/inbound/sample_data/raw_data.txt +2 -2
  26. data/lib/sendgrid/helpers/inbound/sample_data/raw_data_with_attachments.txt +2 -2
  27. data/lib/sendgrid/helpers/inbound/send.rb +2 -2
  28. data/lib/sendgrid/helpers/ip_management/ip_management.rb +17 -0
  29. data/lib/sendgrid/helpers/mail/README.md +1 -1
  30. data/lib/sendgrid/helpers/mail/attachment.rb +24 -1
  31. data/lib/sendgrid/helpers/mail/category.rb +0 -8
  32. data/lib/sendgrid/helpers/mail/content.rb +3 -16
  33. data/lib/sendgrid/helpers/mail/email.rb +3 -16
  34. data/lib/sendgrid/helpers/mail/mail.rb +8 -40
  35. data/lib/sendgrid/helpers/permissions/scope.rb +28 -0
  36. data/lib/sendgrid/helpers/permissions/scopes.yml +309 -0
  37. data/lib/sendgrid/helpers/settings/README.md +1 -1
  38. data/lib/sendgrid/helpers/stats/stats_response.rb +1 -1
  39. data/lib/sendgrid/version.rb +1 -1
  40. data/mail_helper_v3.md +9 -9
  41. data/sendgrid-ruby.gemspec +3 -3
  42. data/spec/sendgrid/helpers/ip_management/ip_management_spec.rb +12 -0
  43. data/test/sendgrid/helpers/mail/test_attachment.rb +35 -0
  44. data/test/sendgrid/helpers/mail/test_mail.rb +29 -21
  45. data/test/sendgrid/permissions/test_scopes.rb +38 -0
  46. data/test/sendgrid/test_sendgrid-ruby.rb +15 -7
  47. metadata +17 -6
@@ -1,4 +1,4 @@
1
- **This module allows you to quickly and easily build a Settings object for retrieving or updating you SendGrid Settings.**
1
+ **This module allows you to quickly and easily build a Settings object for retrieving or updating your Twilio SendGrid Settings.**
2
2
 
3
3
  # Quick Start
4
4
 
@@ -22,7 +22,7 @@ module SendGrid
22
22
  starting_date = stat['date']
23
23
  all_stats_for_date = stat['stats']
24
24
 
25
- metrics = all_stats_for_date.map do |metric|
25
+ all_stats_for_date.map do |metric|
26
26
  Metrics.new(metric['metrics'].merge('date' => starting_date))
27
27
  end
28
28
  end
@@ -1,3 +1,3 @@
1
1
  module SendGrid
2
- VERSION = '5.3.0'
2
+ VERSION = '6.0.0'
3
3
  end
@@ -13,7 +13,7 @@ require 'sendgrid-ruby'
13
13
 
14
14
  from = SendGrid::Email.new('test@example.com', 'Example User')
15
15
  to = SendGrid::Email.new('test@example.com', 'Example User')
16
- subject = 'Sending with SendGrid is Fun'
16
+ subject = 'Sending with Twilio SendGrid is Fun'
17
17
  plain_text_content = 'and easy to do anywhere, even with Ruby'
18
18
  html_content = '<strong>and easy to do anywhere, even with Ruby</strong>'
19
19
  msg = SendGrid::Mail.create(from: from,
@@ -48,7 +48,7 @@ tos = [
48
48
  SendGrid::Email.new('test2@example.com', 'Example User2'),
49
49
  SendGrid::Email.new('test3@example.com', 'Example User3')
50
50
  ];
51
- subject = 'Sending with SendGrid is Fun'
51
+ subject = 'Sending with Twilio SendGrid is Fun'
52
52
  plain_text_content = 'and easy to do anywhere, even with Ruby'
53
53
  html_content = '<strong>and easy to do anywhere, even with Ruby</strong>'
54
54
  msg = SendGrid::Mail.create(from: from,
@@ -84,9 +84,9 @@ tos = [
84
84
  SendGrid::Email.new('test3@example.com', 'Example User3')
85
85
  ];
86
86
  subjects = [
87
- 'Sending with SendGrid is Fun',
88
- 'Sending with SendGrid is Super Fun',
89
- 'Sending with SendGrid is Super Duper Fun'
87
+ 'Sending with Twilio SendGrid is Fun',
88
+ 'Sending with Twilio SendGrid is Super Fun',
89
+ 'Sending with Twilio SendGrid is Super Duper Fun'
90
90
  ];
91
91
  plain_text_content = 'and easy to do anywhere, even with Ruby'
92
92
  html_content = '<strong>and easy to do anywhere, even with Ruby</strong>'
@@ -126,7 +126,7 @@ client = SendGrid::Client.new(api_key: ENV['SENDGRID_API_KEY'])
126
126
 
127
127
  from = SendGrid::Email.new('test@example.com', 'Example User')
128
128
  to = SendGrid::Email.new('test@example.com', 'Example User')
129
- subject = 'Sending with SendGrid is Fun'
129
+ subject = 'Sending with Twilio SendGrid is Fun'
130
130
  plain_text_content = 'and easy to do anywhere, even with Ruby'
131
131
  html_content = '<strong>and easy to do anywhere, even with Ruby</strong>'
132
132
  msg = SendGrid::Message.new(from, to, subject, plain_text_content, html_content)
@@ -237,7 +237,7 @@ msg.set_subject('this subject overrides the Global Subject on the second Persona
237
237
 
238
238
  msg.set_from(SendGrid::Email.new('test0@example.com', 'Example User0'))
239
239
 
240
- msg.set_global_subject('Sending with SendGrid is Fun');
240
+ msg.set_global_subject('Sending with Twilio SendGrid is Fun');
241
241
 
242
242
  msg.add_content(MimeType::Text, 'and easy to do anywhere, even with Ruby')
243
243
  msg.add_content(MimeType::Html, '<strong>and easy to do anywhere, even with Ruby</strong>')
@@ -302,7 +302,7 @@ client = SendGrid::Client.new(api_key: ENV['SENDGRID_API_KEY'])
302
302
 
303
303
  from = SendGrid::Email.new('test@example.com', 'Example User')
304
304
  to = SendGrid::Email.new('test@example.com', 'Example User')
305
- subject = 'Sending with SendGrid is Fun'
305
+ subject = 'Sending with Twilio SendGrid is Fun'
306
306
  plain_text_content = 'and easy to do anywhere, even with Ruby'
307
307
  html_content = '<strong>and easy to do anywhere, even with Ruby</strong>'
308
308
  msg = SendGrid::Message.new(from, to, subject, plain_text_content, html_content)
@@ -367,7 +367,7 @@ client = SendGrid::Client.new(api_key: ENV['SENDGRID_API_KEY'])
367
367
 
368
368
  from = SendGrid::Email.new('test@example.com', 'Example User')
369
369
  to = SendGrid::Email.new('test@example.com', 'Example User')
370
- subject = 'Sending with SendGrid is Fun'
370
+ subject = 'Sending with Twilio SendGrid is Fun'
371
371
  plain_text_content = 'and easy to do anywhere, even with Ruby'
372
372
  html_content = '<strong>and easy to do anywhere, even with Ruby</strong>'
373
373
  msg = SendGrid::Message.new(from, to, subject, plain_text_content, html_content)
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = SendGrid::VERSION
9
9
  spec.authors = ['Elmer Thomas', 'Robin Johnson', 'Eddie Zaneski']
10
10
  spec.email = 'dx@sendgrid.com'
11
- spec.summary = 'Official SendGrid Gem'
12
- spec.description = 'Official SendGrid Gem to Interact with SendGrids API in native Ruby'
11
+ spec.summary = 'Official Twilio SendGrid Gem'
12
+ spec.description = 'Official Twilio SendGrid Gem to Interact with Twilio SendGrids API in native Ruby'
13
13
  spec.homepage = 'http://github.com/sendgrid/sendgrid-ruby'
14
14
 
15
15
  spec.required_ruby_version = '>= 2.2'
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.test_files = spec.files.grep(/^(test|spec|features)/)
21
21
  spec.require_paths = ['lib']
22
22
  spec.add_dependency 'ruby_http_client', '~> 3.3.0'
23
- spec.add_dependency 'sinatra', '>= 1.4.7', '< 3'
23
+ spec.add_development_dependency 'sinatra', '>= 1.4.7', '< 3'
24
24
  spec.add_development_dependency 'rake', '~> 0'
25
25
  spec.add_development_dependency 'rspec'
26
26
  spec.add_development_dependency 'pry'
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe SendGrid::IpManagement do
4
+ let(:sendgrid_client) { SendGrid::API.new(api_key: 'fake_key').client }
5
+ let(:ip_management) { SendGrid::IpManagement.new(sendgrid_client: sendgrid_client) }
6
+
7
+ describe '.new' do
8
+ it 'initializes correctly' do
9
+ expect(ip_management).to be_a SendGrid::IpManagement
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ require_relative "../../../../lib/sendgrid/helpers/mail/attachment"
3
+ include SendGrid
4
+ require "json"
5
+ require "minitest/autorun"
6
+
7
+ class TestAttachment < Minitest::Test
8
+ SAMPLE_INPUT = """Es blüht so grün wie Blüten blüh'n im Frühling
9
+ Es blüht so grün wie Blüten blüh'n im Frühling
10
+ Es blüht so grün wie Blüten blüh'n im Frühling
11
+ Es blüht so grün wie Blüten blüh'n im Frühling
12
+ Es blüht so grün wie Blüten blüh'n im Frühling
13
+ """.force_encoding('UTF-8').encode
14
+
15
+ def setup
16
+ end
17
+
18
+ def test_io_enocding
19
+ attachment = Attachment.new
20
+ attachment.content = StringIO.new(SAMPLE_INPUT)
21
+
22
+ expected = {
23
+ "content" => "RXMgYmzDvGh0IHNvIGdyw7xuIHdpZSBCbMO8dGVuIGJsw7xoJ24gaW0gRnLD\nvGhsaW5nCkVzIGJsw7xodCBzbyBncsO8biB3aWUgQmzDvHRlbiBibMO8aCdu\nIGltIEZyw7xobGluZwpFcyBibMO8aHQgc28gZ3LDvG4gd2llIEJsw7x0ZW4g\nYmzDvGgnbiBpbSBGcsO8aGxpbmcKRXMgYmzDvGh0IHNvIGdyw7xuIHdpZSBC\nbMO8dGVuIGJsw7xoJ24gaW0gRnLDvGhsaW5nCkVzIGJsw7xodCBzbyBncsO8\nbiB3aWUgQmzDvHRlbiBibMO8aCduIGltIEZyw7xobGluZwo=\n"
24
+ }
25
+
26
+ json = attachment.to_json
27
+
28
+ # Double check that the decoded json matches original input.
29
+ decoded = Base64.decode64(json["content"]).force_encoding('UTF-8').encode
30
+
31
+ assert_equal(decoded, SAMPLE_INPUT)
32
+
33
+ assert_equal(json, expected)
34
+ end
35
+ end
@@ -11,17 +11,17 @@ class TestMail < Minitest::Test
11
11
  def test_hello_world
12
12
  from = Email.new(email: 'test@example.com')
13
13
  to = Email.new(email: 'test@example.com')
14
- subject = 'Sending with SendGrid is Fun'
14
+ subject = 'Sending with Twilio SendGrid is Fun'
15
15
  content = Content.new(type: 'text/plain', value: 'and easy to do anywhere, even with Ruby')
16
- mail = Mail.new(from, subject, to, content)
16
+ mail = SendGrid::Mail.new(from, subject, to, content)
17
17
 
18
- assert_equal(mail.to_json, JSON.parse('{"from":{"email":"test@example.com"}, "subject":"Sending with SendGrid is Fun", "personalizations":[{"to":[{"email":"test@example.com"}]}], "content":[{"type":"text/plain", "value":"and easy to do anywhere, even with Ruby"}]}'))
18
+ assert_equal(mail.to_json, JSON.parse('{"from":{"email":"test@example.com"}, "subject":"Sending with Twilio SendGrid is Fun", "personalizations":[{"to":[{"email":"test@example.com"}]}], "content":[{"type":"text/plain", "value":"and easy to do anywhere, even with Ruby"}]}'))
19
19
  end
20
20
 
21
21
  def test_kitchen_sink
22
- mail = Mail.new
22
+ mail = SendGrid::Mail.new
23
23
  mail.from = Email.new(email: "test@example.com")
24
- mail.subject = "Hello World from the SendGrid Ruby Library"
24
+ mail.subject = "Hello World from the Twilio SendGrid Ruby Library"
25
25
  personalization = Personalization.new
26
26
  personalization.add_to(Email.new(email: "test@example.com", name: "Example User"))
27
27
  personalization.add_to(Email.new(email: "test@example.com", name: "Example User"))
@@ -29,7 +29,7 @@ class TestMail < Minitest::Test
29
29
  personalization.add_cc(Email.new(email: "test@example.com", name: "Example User"))
30
30
  personalization.add_bcc(Email.new(email: "test@example.com", name: "Example User"))
31
31
  personalization.add_bcc(Email.new(email: "test@example.com", name: "Example User"))
32
- personalization.subject = "Hello World from the Personalized SendGrid Python Library"
32
+ personalization.subject = "Hello World from the Personalized Twilio SendGrid Ruby Library"
33
33
  personalization.add_header(Header.new(key: "X-Test", value: "True"))
34
34
  personalization.add_header(Header.new(key: "X-Mock", value: "False"))
35
35
  personalization.add_substitution(Substitution.new(key: "%name%", value: "Example User"))
@@ -46,7 +46,7 @@ class TestMail < Minitest::Test
46
46
  personalization2.add_cc(Email.new(email: "test@example.com", name: "Example User"))
47
47
  personalization2.add_bcc(Email.new(email: "test@example.com", name: "Example User"))
48
48
  personalization2.add_bcc(Email.new(email: "test@example.com", name: "Example User"))
49
- personalization2.subject = "Hello World from the Personalized SendGrid Python Library"
49
+ personalization2.subject = "Hello World from the Personalized Twilio SendGrid Ruby Library"
50
50
  personalization2.add_header(Header.new(key: "X-Test", value: "True"))
51
51
  personalization2.add_header(Header.new(key: "X-Mock", value: "False"))
52
52
  personalization2.add_substitution(Substitution.new(key: "%name%", value: "Example User"))
@@ -115,43 +115,43 @@ class TestMail < Minitest::Test
115
115
 
116
116
  mail.reply_to = Email.new(email: "test@example.com")
117
117
 
118
- assert_equal(mail.to_json, JSON.parse('{"asm":{"group_id":99,"groups_to_display":[4,5,6,7,8]},"attachments":[{"content":"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12","content_id":"Balance Sheet","disposition":"attachment","filename":"balance_001.pdf","type":"application/pdf"},{"content":"BwdW","content_id":"Banner","disposition":"inline","filename":"banner.png","type":"image/png"}],"batch_id":"sendgrid_batch_id","categories":["May","2016"],"content":[{"type":"text/plain","value":"some text here"},{"type":"text/html","value":"<html><body>some text here</body></html>"}],"custom_args":{"campaign":"welcome","weekday":"morning"},"from":{"email":"test@example.com"},"headers":{"X-Test3":"test3","X-Test4":"test4"},"ip_pool_name":"23","mail_settings":{"bcc":{"email":"test@example.com","enable":true},"bypass_list_management":{"enable":true},"footer":{"enable":true,"html":"<html><body>Footer Text</body></html>","text":"Footer Text"},"sandbox_mode":{"enable":true},"spam_check":{"enable":true,"post_to_url":"https://spamcatcher.sendgrid.com","threshold":1}},"personalizations":[{"bcc":[{"email":"test@example.com","name":"Example User"},{"email":"test@example.com","name":"Example User"}],"cc":[{"email":"test@example.com","name":"Example User"},{"email":"test@example.com","name":"Example User"}],"custom_args":{"type":"marketing","user_id":"343"},"headers":{"X-Mock":"False","X-Test":"True"},"send_at":1443636843,"subject":"Hello World from the Personalized SendGrid Python Library","substitutions":{"%city%":"Denver","%name%":"Example User"},"to":[{"email":"test@example.com","name":"Example User"},{"email":"test@example.com","name":"Example User"}]},{"bcc":[{"email":"test@example.com","name":"Example User"},{"email":"test@example.com","name":"Example User"}],"cc":[{"email":"test@example.com","name":"Example User"},{"email":"test@example.com","name":"Example User"}],"custom_args":{"type":"marketing","user_id":"343"},"headers":{"X-Mock":"False","X-Test":"True"},"send_at":1443636843,"subject":"Hello World from the Personalized SendGrid Python Library","substitutions":{"%city%":"Denver","%name%":"Example User"},"to":[{"email":"test@example.com","name":"Example User"},{"email":"test@example.com","name":"Example User"}]}],"reply_to":{"email":"test@example.com"},"sections":{"%section1%":"Substitution Text for Section 1","%section2%":"Substitution Text for Section 2"},"send_at":1443636842,"subject":"Hello World from the SendGrid Ruby Library","template_id":"13b8f94f-bcae-4ec6-b752-70d6cb59f932","tracking_settings":{"click_tracking":{"enable":false,"enable_text":false},"ganalytics":{"enable":true,"utm_campaign":"some campaign","utm_content":"some content","utm_medium":"some medium","utm_source":"some source","utm_term":"some term"},"open_tracking":{"enable":true,"substitution_tag":"Optional tag to replace with the open image in the body of the message"},"subscription_tracking":{"enable":true,"html":"html to insert into the text/html portion of the message","substitution_tag":"Optional tag to replace with the open image in the body of the message","text":"text to insert into the text/plain portion of the message"}}}'))
118
+ assert_equal(mail.to_json, JSON.parse('{"asm":{"group_id":99,"groups_to_display":[4,5,6,7,8]},"attachments":[{"content":"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12","content_id":"Balance Sheet","disposition":"attachment","filename":"balance_001.pdf","type":"application/pdf"},{"content":"BwdW","content_id":"Banner","disposition":"inline","filename":"banner.png","type":"image/png"}],"batch_id":"sendgrid_batch_id","categories":["May","2016"],"content":[{"type":"text/plain","value":"some text here"},{"type":"text/html","value":"<html><body>some text here</body></html>"}],"custom_args":{"campaign":"welcome","weekday":"morning"},"from":{"email":"test@example.com"},"headers":{"X-Test3":"test3","X-Test4":"test4"},"ip_pool_name":"23","mail_settings":{"bcc":{"email":"test@example.com","enable":true},"bypass_list_management":{"enable":true},"footer":{"enable":true,"html":"<html><body>Footer Text</body></html>","text":"Footer Text"},"sandbox_mode":{"enable":true},"spam_check":{"enable":true,"post_to_url":"https://spamcatcher.sendgrid.com","threshold":1}},"personalizations":[{"bcc":[{"email":"test@example.com","name":"Example User"},{"email":"test@example.com","name":"Example User"}],"cc":[{"email":"test@example.com","name":"Example User"},{"email":"test@example.com","name":"Example User"}],"custom_args":{"type":"marketing","user_id":"343"},"headers":{"X-Mock":"False","X-Test":"True"},"send_at":1443636843,"subject":"Hello World from the Personalized Twilio SendGrid Ruby Library","substitutions":{"%city%":"Denver","%name%":"Example User"},"to":[{"email":"test@example.com","name":"Example User"},{"email":"test@example.com","name":"Example User"}]},{"bcc":[{"email":"test@example.com","name":"Example User"},{"email":"test@example.com","name":"Example User"}],"cc":[{"email":"test@example.com","name":"Example User"},{"email":"test@example.com","name":"Example User"}],"custom_args":{"type":"marketing","user_id":"343"},"headers":{"X-Mock":"False","X-Test":"True"},"send_at":1443636843,"subject":"Hello World from the Personalized Twilio SendGrid Ruby Library","substitutions":{"%city%":"Denver","%name%":"Example User"},"to":[{"email":"test@example.com","name":"Example User"},{"email":"test@example.com","name":"Example User"}]}],"reply_to":{"email":"test@example.com"},"sections":{"%section1%":"Substitution Text for Section 1","%section2%":"Substitution Text for Section 2"},"send_at":1443636842,"subject":"Hello World from the Twilio SendGrid Ruby Library","template_id":"13b8f94f-bcae-4ec6-b752-70d6cb59f932","tracking_settings":{"click_tracking":{"enable":false,"enable_text":false},"ganalytics":{"enable":true,"utm_campaign":"some campaign","utm_content":"some content","utm_medium":"some medium","utm_source":"some source","utm_term":"some term"},"open_tracking":{"enable":true,"substitution_tag":"Optional tag to replace with the open image in the body of the message"},"subscription_tracking":{"enable":true,"html":"html to insert into the text/html portion of the message","substitution_tag":"Optional tag to replace with the open image in the body of the message","text":"text to insert into the text/plain portion of the message"}}}'))
119
119
  end
120
120
 
121
121
  def test_that_personalizations_is_empty_initially
122
- mail = Mail.new
122
+ mail = SendGrid::Mail.new
123
123
  assert_equal([], mail.personalizations)
124
124
  end
125
125
 
126
126
  def test_that_contents_is_empty_initially
127
- mail = Mail.new
127
+ mail = SendGrid::Mail.new
128
128
  assert_equal([], mail.contents)
129
129
  end
130
130
 
131
131
  def test_that_attachments_is_empty_initially
132
- mail = Mail.new
132
+ mail = SendGrid::Mail.new
133
133
  assert_equal([], mail.attachments)
134
134
  end
135
135
 
136
136
  def test_that_categories_is_empty_initially
137
- mail = Mail.new
137
+ mail = SendGrid::Mail.new
138
138
  assert_equal([], mail.categories)
139
139
  end
140
140
 
141
141
  def test_add_personalization
142
- mail = Mail.new
142
+ mail = SendGrid::Mail.new
143
143
  mail.add_personalization('foo')
144
144
  assert_equal(['foo'.to_json], mail.personalizations)
145
145
  end
146
146
 
147
147
  def test_add_content
148
- mail = Mail.new
148
+ mail = SendGrid::Mail.new
149
149
  mail.add_content('foo')
150
150
  assert_equal(['foo'.to_json], mail.contents)
151
151
  end
152
152
 
153
153
  def test_add_section
154
- mail = Mail.new
154
+ mail = SendGrid::Mail.new
155
155
  mail.add_section(Section.new(key: '%section1%', value: 'Substitution Text for Section 1'))
156
156
  expected_json = {
157
157
  "sections"=>{
@@ -170,7 +170,7 @@ class TestMail < Minitest::Test
170
170
  end
171
171
 
172
172
  def test_add_header
173
- mail = Mail.new
173
+ mail = SendGrid::Mail.new
174
174
  mail.add_header(Header.new(key: 'X-Test3', value: 'test3'))
175
175
  expected_json = {
176
176
  "headers"=>{
@@ -189,7 +189,7 @@ class TestMail < Minitest::Test
189
189
  end
190
190
 
191
191
  def test_add_custom_arg
192
- mail = Mail.new
192
+ mail = SendGrid::Mail.new
193
193
  mail.add_custom_arg(CustomArg.new(key: 'campaign 1', value: 'welcome 1'))
194
194
  expected_json = {
195
195
  "custom_args"=>{
@@ -223,20 +223,20 @@ class TestMail < Minitest::Test
223
223
  end
224
224
 
225
225
  def test_add_attachment
226
- mail = Mail.new
226
+ mail = SendGrid::Mail.new
227
227
  mail.add_attachment('foo')
228
228
  assert_equal(['foo'.to_json], mail.attachments)
229
229
  end
230
230
 
231
231
  def test_add_valid_category
232
- mail = Mail.new
232
+ mail = SendGrid::Mail.new
233
233
  category = Category.new(name: 'foo')
234
234
  mail.add_category(category)
235
235
  assert_equal(['foo'], mail.categories)
236
236
  end
237
237
 
238
238
  def test_add_more_than_1_valid_category
239
- mail = Mail.new
239
+ mail = SendGrid::Mail.new
240
240
  category_1 = Category.new(name: 'foo')
241
241
  category_2 = Category.new(name: 'bar')
242
242
  mail.add_category(category_1)
@@ -245,9 +245,17 @@ class TestMail < Minitest::Test
245
245
  end
246
246
 
247
247
  def test_add_invalid_category
248
- mail = Mail.new
248
+ mail = SendGrid::Mail.new
249
249
  assert_raises(NoMethodError) do
250
250
  mail.add_category('foo')
251
251
  end
252
252
  end
253
+
254
+ def test_check_for_secrets
255
+ mail = Mail.new
256
+ mail.add_content(Content.new(type: 'text/plain', value: 'Sensitive information: SG.a123b456'))
257
+ assert_raises(SecurityError) do
258
+ mail.check_for_secrets([/SG.[a-zA-Z0-9_-]*/])
259
+ end
260
+ end
253
261
  end
@@ -0,0 +1,38 @@
1
+ require_relative '../../../lib/sendgrid/helpers/permissions/scope'
2
+ require 'minitest/autorun'
3
+
4
+ class TestCategory < Minitest::Test
5
+
6
+ include SendGrid
7
+
8
+ # usecases
9
+ # 1. test admin scopes
10
+ # 2. test read only scopes
11
+ # 3. test read only and full access scopes for a method by hardcoding
12
+ # 4. test read only and full access scopes by loading scopes.yaml
13
+
14
+ def setup
15
+ @scopes_from_yaml = YAML.load_file(File.dirname(__FILE__) + '/../../../lib/sendgrid/helpers/permissions/scopes.yml').freeze
16
+ end
17
+
18
+ def test_admin_scopes
19
+ assert_equal Scope.admin_permissions, @scopes_from_yaml.values.map(&:values).flatten
20
+ end
21
+
22
+ def test_read_only_scopes
23
+ assert_equal Scope.read_only_permissions, @scopes_from_yaml.map { |_, v| v[:read] }.flatten
24
+ end
25
+
26
+ def test_read_only_and_full_access_for_mail_hardcoded
27
+ assert_equal Scope.mail_read_only_permissions, ["mail.batch.read"]
28
+ assert_equal Scope.mail_full_access_permissions, ["mail.send", "mail.batch.create", "mail.batch.delete", "mail.batch.read", "mail.batch.update"]
29
+ end
30
+
31
+ def test_read_only_and_full_access_from_file
32
+ @scopes_from_yaml.each_key do |endpoint|
33
+ assert_equal Scope.send("#{endpoint}_read_only_permissions"), @scopes_from_yaml[endpoint][:read]
34
+ assert_equal Scope.send("#{endpoint}_full_access_permissions"), @scopes_from_yaml[endpoint].values.flatten
35
+ end
36
+ end
37
+
38
+ end
@@ -41,7 +41,8 @@ class TestAPI < MiniTest::Test
41
41
  "X-Test": "test"
42
42
  }
43
43
  ')
44
- sg = SendGrid::API.new(api_key: "SENDGRID_API_KEY", host: "https://api.test.com", request_headers: headers, version: "v3")
44
+ subuser = 'test_user'
45
+ sg = SendGrid::API.new(api_key: "SENDGRID_API_KEY", host: "https://api.test.com", request_headers: headers, version: "v3", impersonate_subuser: subuser)
45
46
 
46
47
  assert_equal("https://api.test.com", sg.host)
47
48
  user_agent = "sendgrid/#{SendGrid::VERSION};ruby"
@@ -50,15 +51,22 @@ class TestAPI < MiniTest::Test
50
51
  "Authorization": "Bearer SENDGRID_API_KEY",
51
52
  "Accept": "application/json",
52
53
  "X-Test": "test",
53
- "User-agent": "' + user_agent + '"
54
+ "User-agent": "' + user_agent + '",
55
+ "On-Behalf-Of": "' + subuser + '"
54
56
  }
55
57
  ')
56
58
  assert_equal(test_headers, sg.request_headers)
57
59
  assert_equal("v3", sg.version)
58
- assert_equal("5.3.0", SendGrid::VERSION)
60
+ assert_equal(subuser, sg.impersonate_subuser)
61
+ assert_equal("6.0.0", SendGrid::VERSION)
59
62
  assert_instance_of(SendGrid::Client, sg.client)
60
63
  end
61
64
 
65
+ def test_init_when_impersonate_subuser_is_not_given
66
+ sg = SendGrid::API.new(api_key: "SENDGRID_API_KEY", host: "https://api.test.com", version: "v3")
67
+ refute_includes(sg.request_headers, 'On-Behalf-Of')
68
+ end
69
+
62
70
  def test_access_settings_activity_get
63
71
  params = JSON.parse('{"limit": 1}')
64
72
  headers = JSON.parse('{"X-Mock": 200}')
@@ -1176,8 +1184,8 @@ class TestAPI < MiniTest::Test
1176
1184
  },
1177
1185
  "footer": {
1178
1186
  "enable": true,
1179
- "html": "<p>Thanks</br>The SendGrid Team</p>",
1180
- "text": "Thanks,/n The SendGrid Team"
1187
+ "html": "<p>Thanks</br>The Twilio SendGrid Team</p>",
1188
+ "text": "Thanks,/n The Twilio SendGrid Team"
1181
1189
  },
1182
1190
  "sandbox_mode": {
1183
1191
  "enable": false
@@ -1883,7 +1891,7 @@ class TestAPI < MiniTest::Test
1883
1891
  email = "test_url_param"
1884
1892
  headers = JSON.parse('{"X-Mock": 204}')
1885
1893
 
1886
- response = @sg.client.suppression.spam_report._(email).delete(request_headers: headers)
1894
+ response = @sg.client.suppression.spam_reports._(email).delete(request_headers: headers)
1887
1895
 
1888
1896
  self.assert_equal('204', response.status_code)
1889
1897
  end
@@ -2678,7 +2686,7 @@ class TestAPI < MiniTest::Test
2678
2686
  end
2679
2687
 
2680
2688
  def test_docker_exists
2681
- assert(File.file?('./Dockerfile') || File.file?('./docker/Dockerfile'))
2689
+ assert(File.file?('./Docker') || File.file?('./docker/Dockerfile'))
2682
2690
  end
2683
2691
 
2684
2692
  # def test_docker_compose_exists
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sendgrid-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.0
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elmer Thomas
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-10-12 00:00:00.000000000 Z
13
+ date: 2019-06-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: ruby_http_client
@@ -36,7 +36,7 @@ dependencies:
36
36
  - - "<"
37
37
  - !ruby/object:Gem::Version
38
38
  version: '3'
39
- type: :runtime
39
+ type: :development
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
42
42
  requirements:
@@ -130,7 +130,8 @@ dependencies:
130
130
  - - "~>"
131
131
  - !ruby/object:Gem::Version
132
132
  version: '5.9'
133
- description: Official SendGrid Gem to Interact with SendGrids API in native Ruby
133
+ description: Official Twilio SendGrid Gem to Interact with Twilio SendGrids API in
134
+ native Ruby
134
135
  email: dx@sendgrid.com
135
136
  executables: []
136
137
  extensions: []
@@ -150,6 +151,7 @@ files:
150
151
  - README.md
151
152
  - Rakefile
152
153
  - TROUBLESHOOTING.md
154
+ - UPGRADE.md
153
155
  - USAGE.md
154
156
  - USE_CASES.md
155
157
  - config.ru
@@ -175,6 +177,7 @@ files:
175
177
  - examples/mailsettings/mailsettings.rb
176
178
  - examples/partnersettings/partnersettings.rb
177
179
  - examples/scopes/scopes.rb
180
+ - examples/senderauthentication/senderauthentication.rb
178
181
  - examples/senders/senders.rb
179
182
  - examples/stats/stats.rb
180
183
  - examples/subusers/subusers.rb
@@ -182,7 +185,6 @@ files:
182
185
  - examples/templates/templates.rb
183
186
  - examples/trackingsettings/trackingsettings.rb
184
187
  - examples/user/user.rb
185
- - examples/whitelabel/whitelabel.rb
186
188
  - gemfiles/Sinatra_1.gemfile
187
189
  - gemfiles/Sinatra_2.gemfile
188
190
  - lib/sendgrid-ruby.rb
@@ -195,6 +197,7 @@ files:
195
197
  - lib/sendgrid/helpers/inbound/sample_data/raw_data.txt
196
198
  - lib/sendgrid/helpers/inbound/sample_data/raw_data_with_attachments.txt
197
199
  - lib/sendgrid/helpers/inbound/send.rb
200
+ - lib/sendgrid/helpers/ip_management/ip_management.rb
198
201
  - lib/sendgrid/helpers/mail/README.md
199
202
  - lib/sendgrid/helpers/mail/asm.rb
200
203
  - lib/sendgrid/helpers/mail/attachment.rb
@@ -217,6 +220,8 @@ files:
217
220
  - lib/sendgrid/helpers/mail/subscription_tracking.rb
218
221
  - lib/sendgrid/helpers/mail/substitution.rb
219
222
  - lib/sendgrid/helpers/mail/tracking_settings.rb
223
+ - lib/sendgrid/helpers/permissions/scope.rb
224
+ - lib/sendgrid/helpers/permissions/scopes.yml
220
225
  - lib/sendgrid/helpers/settings/README.md
221
226
  - lib/sendgrid/helpers/settings/mail_settings_dto.rb
222
227
  - lib/sendgrid/helpers/settings/partner_settings_dto.rb
@@ -229,6 +234,7 @@ files:
229
234
  - lib/sendgrid/version.rb
230
235
  - mail_helper_v3.md
231
236
  - sendgrid-ruby.gemspec
237
+ - spec/sendgrid/helpers/ip_management/ip_management_spec.rb
232
238
  - spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb
233
239
  - spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb
234
240
  - spec/sendgrid/helpers/settings/settings_spec.rb
@@ -239,10 +245,12 @@ files:
239
245
  - spec/sendgrid/helpers/stats/stats_response_spec.rb
240
246
  - spec/spec_helper.rb
241
247
  - test/prism.sh
248
+ - test/sendgrid/helpers/mail/test_attachment.rb
242
249
  - test/sendgrid/helpers/mail/test_category.rb
243
250
  - test/sendgrid/helpers/mail/test_email.rb
244
251
  - test/sendgrid/helpers/mail/test_mail.rb
245
252
  - test/sendgrid/helpers/mail/test_personalizations.rb
253
+ - test/sendgrid/permissions/test_scopes.rb
246
254
  - test/sendgrid/test_sendgrid-ruby.rb
247
255
  homepage: http://github.com/sendgrid/sendgrid-ruby
248
256
  licenses:
@@ -267,8 +275,9 @@ rubyforge_project:
267
275
  rubygems_version: 2.6.10
268
276
  signing_key:
269
277
  specification_version: 4
270
- summary: Official SendGrid Gem
278
+ summary: Official Twilio SendGrid Gem
271
279
  test_files:
280
+ - spec/sendgrid/helpers/ip_management/ip_management_spec.rb
272
281
  - spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb
273
282
  - spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb
274
283
  - spec/sendgrid/helpers/settings/settings_spec.rb
@@ -279,8 +288,10 @@ test_files:
279
288
  - spec/sendgrid/helpers/stats/stats_response_spec.rb
280
289
  - spec/spec_helper.rb
281
290
  - test/prism.sh
291
+ - test/sendgrid/helpers/mail/test_attachment.rb
282
292
  - test/sendgrid/helpers/mail/test_category.rb
283
293
  - test/sendgrid/helpers/mail/test_email.rb
284
294
  - test/sendgrid/helpers/mail/test_mail.rb
285
295
  - test/sendgrid/helpers/mail/test_personalizations.rb
296
+ - test/sendgrid/permissions/test_scopes.rb
286
297
  - test/sendgrid/test_sendgrid-ruby.rb