sendgrid-ruby 6.3.1 → 6.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +1 -1
  3. data/.rubocop.yml +8 -0
  4. data/.rubocop_todo.yml +109 -0
  5. data/.travis.yml +2 -3
  6. data/CHANGELOG.md +61 -9
  7. data/CONTRIBUTING.md +10 -20
  8. data/FIRST_TIMERS.md +79 -0
  9. data/ISSUE_TEMPLATE.md +5 -1
  10. data/Makefile +3 -2
  11. data/PULL_REQUEST_TEMPLATE.md +1 -1
  12. data/README.md +22 -27
  13. data/Rakefile +2 -3
  14. data/TROUBLESHOOTING.md +5 -5
  15. data/USAGE.md +145 -38
  16. data/examples/accesssettings/accesssettings.rb +9 -12
  17. data/examples/alerts/alerts.rb +8 -11
  18. data/examples/apikeys/apikeys.rb +12 -15
  19. data/examples/asm/asm.rb +27 -30
  20. data/examples/browsers/browsers.rb +0 -3
  21. data/examples/campaigns/campaigns.rb +29 -32
  22. data/examples/categories/categories.rb +0 -3
  23. data/examples/clients/clients.rb +1 -4
  24. data/examples/contactdb/contactdb.rb +63 -66
  25. data/examples/devices/devices.rb +0 -3
  26. data/examples/emailactivity/emailactivity.rb +52 -0
  27. data/examples/geo/geo.rb +0 -3
  28. data/examples/helpers/eventwebhook/example.rb +4 -4
  29. data/examples/helpers/mail/example.rb +19 -13
  30. data/examples/helpers/settings/example.rb +1 -1
  31. data/examples/helpers/stats/example.rb +4 -4
  32. data/examples/ips/ips.rb +19 -22
  33. data/examples/mail/mail.rb +72 -75
  34. data/examples/mailboxproviders/mailboxproviders.rb +0 -3
  35. data/examples/mailsettings/mailsettings.rb +21 -24
  36. data/examples/partnersettings/partnersettings.rb +3 -6
  37. data/examples/scopes/scopes.rb +7 -9
  38. data/examples/senderauthentication/senderauthentication.rb +41 -44
  39. data/examples/senders/senders.rb +28 -31
  40. data/examples/stats/stats.rb +0 -3
  41. data/examples/subusers/subusers.rb +17 -20
  42. data/examples/suppression/suppression.rb +15 -18
  43. data/examples/templates/templates.rb +29 -31
  44. data/examples/trackingsettings/trackingsettings.rb +14 -17
  45. data/examples/user/user.rb +41 -44
  46. data/lib/rack/sendgrid_webhook_verification.rb +5 -2
  47. data/lib/sendgrid/base_interface.rb +1 -1
  48. data/lib/sendgrid/helpers/eventwebhook/eventwebhook.rb +4 -6
  49. data/lib/sendgrid/helpers/inbound/README.md +5 -5
  50. data/lib/sendgrid/helpers/inbound/app.rb +1 -1
  51. data/lib/sendgrid/helpers/inbound/public/index.html +1 -1
  52. data/lib/sendgrid/helpers/inbound/send.rb +2 -2
  53. data/lib/sendgrid/helpers/ip_management/ip_management.rb +1 -1
  54. data/lib/sendgrid/helpers/mail/README.md +3 -3
  55. data/lib/sendgrid/helpers/mail/asm.rb +6 -18
  56. data/lib/sendgrid/helpers/mail/attachment.rb +12 -42
  57. data/lib/sendgrid/helpers/mail/bcc_settings.rb +6 -18
  58. data/lib/sendgrid/helpers/mail/bypass_list_management.rb +8 -18
  59. data/lib/sendgrid/helpers/mail/category.rb +2 -2
  60. data/lib/sendgrid/helpers/mail/click_tracking.rb +6 -18
  61. data/lib/sendgrid/helpers/mail/content.rb +4 -3
  62. data/lib/sendgrid/helpers/mail/custom_arg.rb +6 -10
  63. data/lib/sendgrid/helpers/mail/email.rb +5 -4
  64. data/lib/sendgrid/helpers/mail/footer.rb +7 -27
  65. data/lib/sendgrid/helpers/mail/ganalytics.rb +10 -54
  66. data/lib/sendgrid/helpers/mail/header.rb +6 -10
  67. data/lib/sendgrid/helpers/mail/mail.rb +30 -48
  68. data/lib/sendgrid/helpers/mail/mail_settings.rb +9 -25
  69. data/lib/sendgrid/helpers/mail/open_tracking.rb +6 -18
  70. data/lib/sendgrid/helpers/mail/personalization.rb +34 -27
  71. data/lib/sendgrid/helpers/mail/section.rb +6 -10
  72. data/lib/sendgrid/helpers/mail/spam_check.rb +7 -27
  73. data/lib/sendgrid/helpers/mail/subscription_tracking.rb +8 -36
  74. data/lib/sendgrid/helpers/mail/substitution.rb +6 -10
  75. data/lib/sendgrid/helpers/mail/tracking_settings.rb +7 -20
  76. data/lib/sendgrid/helpers/permissions/scope.rb +1 -1
  77. data/lib/sendgrid/helpers/settings/README.md +2 -2
  78. data/lib/sendgrid/helpers/settings/settings.rb +1 -1
  79. data/lib/sendgrid/helpers/settings/tracking_settings_dto.rb +3 -5
  80. data/lib/sendgrid/helpers/stats/metrics.rb +5 -5
  81. data/lib/sendgrid/sendgrid.rb +1 -1
  82. data/lib/sendgrid/twilio_email.rb +1 -1
  83. data/lib/sendgrid/version.rb +1 -1
  84. data/mail_helper_v3.md +12 -12
  85. data/sendgrid-ruby.gemspec +8 -8
  86. data/spec/fixtures/event_webhook.rb +17 -11
  87. data/spec/rack/sendgrid_webhook_verification_spec.rb +30 -4
  88. data/spec/sendgrid/helpers/eventwebhook/eventwebhook_spec.rb +38 -36
  89. data/spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb +1 -1
  90. data/spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb +1 -1
  91. data/spec/sendgrid/helpers/settings/settings_spec.rb +2 -2
  92. data/spec/sendgrid/helpers/settings/tracking_settings_dto_spec.rb +1 -1
  93. data/spec/sendgrid/helpers/settings/user_settings_dto_spec.rb +1 -1
  94. data/spec/sendgrid/helpers/stats/email_stats_spec.rb +22 -23
  95. data/spec/sendgrid/helpers/stats/metrics_spec.rb +19 -20
  96. data/spec/sendgrid/helpers/stats/stats_response_spec.rb +22 -23
  97. data/spec/spec_helper.rb +3 -1
  98. data/static/img/github-fork.png +0 -0
  99. data/static/img/github-sign-up.png +0 -0
  100. data/test/sendgrid/helpers/mail/test_attachment.rb +4 -6
  101. data/test/sendgrid/helpers/mail/test_category.rb +0 -2
  102. data/test/sendgrid/helpers/mail/test_email.rb +9 -11
  103. data/test/sendgrid/helpers/mail/test_mail.rb +101 -102
  104. data/test/sendgrid/helpers/mail/test_personalizations.rb +106 -93
  105. data/test/sendgrid/permissions/test_scopes.rb +0 -2
  106. data/test/sendgrid/test_sendgrid-ruby.rb +1948 -1958
  107. data/twilio_sendgrid_logo.png +0 -0
  108. data/use-cases/README.md +16 -0
  109. data/use-cases/domain-authentication.md +5 -0
  110. data/use-cases/email-statistics.md +52 -0
  111. data/use-cases/legacy-templates.md +98 -0
  112. data/use-cases/sms.md +39 -0
  113. data/use-cases/transactional-templates.md +111 -0
  114. data/use-cases/twilio-email.md +13 -0
  115. data/use-cases/twilio-setup.md +54 -0
  116. metadata +53 -28
  117. data/USE_CASES.md +0 -405
  118. data/docker/Dockerfile +0 -12
  119. data/docker/README.md +0 -30
@@ -4,7 +4,7 @@ describe SendGrid::MailSettingsDto do
4
4
  let(:sendgrid_client) { SendGrid::API.new(api_key: 'fake_key').client }
5
5
  let(:mail_settings) { SendGrid::MailSettingsDto }
6
6
  let(:setting_name) { 'bcc' }
7
- let(:setting_params) { {email: Faker::Internet.email, enabled: rand(1..100).even?} }
7
+ let(:setting_params) { { email: Faker::Internet.email, enabled: rand(1..100).even? } }
8
8
 
9
9
  it { should respond_to :bcc }
10
10
  it { should respond_to :address_whitelist }
@@ -4,7 +4,7 @@ describe SendGrid::PartnerSettingsDto do
4
4
  let(:sendgrid_client) { SendGrid::API.new(api_key: 'fake_key').client }
5
5
  let(:partner_settings) { SendGrid::PartnerSettingsDto }
6
6
  let(:setting_name) { 'new_relic' }
7
- let(:setting_params) { {license_key: 'key', enabled: rand(1..100).even?} }
7
+ let(:setting_params) { { license_key: 'key', enabled: rand(1..100).even? } }
8
8
 
9
9
  it { should respond_to :new_relic }
10
10
 
@@ -18,8 +18,8 @@ describe SendGrid::Settings do
18
18
 
19
19
  describe '.update_bcc' do
20
20
  it 'updates bcc' do
21
- bcc_response = settings.update_bcc(enabled: true, email: "email@example.com")
21
+ bcc_response = settings.update_bcc(enabled: true, email: 'email@example.com')
22
22
  expect(bcc_response).to be_a SendGrid::Response
23
23
  end
24
24
  end
25
- end
25
+ end
@@ -4,7 +4,7 @@ describe SendGrid::TrackingSettingsDto do
4
4
  let(:sendgrid_client) { SendGrid::API.new(api_key: 'fake_key').client }
5
5
  let(:tracking_settings) { SendGrid::TrackingSettingsDto }
6
6
  let(:setting_name) { 'open_tracking' }
7
- let(:setting_params) { {enabled: rand(1..100).even?} }
7
+ let(:setting_params) { { enabled: rand(1..100).even? } }
8
8
 
9
9
  it { should respond_to :open_tracking }
10
10
  it { should respond_to :click_tracking }
@@ -4,7 +4,7 @@ describe SendGrid::UserSettingsDto do
4
4
  let(:sendgrid_client) { SendGrid::API.new(api_key: 'fake_key').client }
5
5
  let(:user_settings) { SendGrid::UserSettingsDto }
6
6
  let(:setting_name) { 'enforced_tls' }
7
- let(:setting_params) { {require_tls: rand(1..100).even?} }
7
+ let(:setting_params) { { require_tls: rand(1..100).even? } }
8
8
 
9
9
  it { should respond_to :enforced_tls }
10
10
 
@@ -7,37 +7,36 @@ describe SendGrid::EmailStats do
7
7
 
8
8
  let(:sample_response) do
9
9
  [{
10
- "date" => "2017-10-01",
11
- "stats" => [
12
- {"metrics" =>
10
+ 'date' => '2017-10-01',
11
+ 'stats' => [
12
+ { 'metrics' =>
13
13
  {
14
- "blocks" => 101,
15
- "bounce_drops" => 102,
16
- "bounces" => 103,
17
- "clicks" => 104,
18
- "deferred" => 105,
19
- "delivered" => 106,
20
- "invalid_emails" => 107,
21
- "opens" => 108,
22
- "processed" => 109,
23
- "requests" => 110,
24
- "spam_report_drops" => 111,
25
- "spam_reports" => 112,
26
- "unique_clicks" => 113,
27
- "unique_opens" => 114,
28
- "unsubscribe_drops" => 115,
29
- "unsubscribes" => 116
30
- }
31
- }
14
+ 'blocks' => 101,
15
+ 'bounce_drops' => 102,
16
+ 'bounces' => 103,
17
+ 'clicks' => 104,
18
+ 'deferred' => 105,
19
+ 'delivered' => 106,
20
+ 'invalid_emails' => 107,
21
+ 'opens' => 108,
22
+ 'processed' => 109,
23
+ 'requests' => 110,
24
+ 'spam_report_drops' => 111,
25
+ 'spam_reports' => 112,
26
+ 'unique_clicks' => 113,
27
+ 'unique_opens' => 114,
28
+ 'unsubscribe_drops' => 115,
29
+ 'unsubscribes' => 116
30
+ } }
32
31
  ]
33
32
  }]
34
33
  end
35
34
 
36
35
  let(:error_response) do
37
36
  {
38
- "errors" => [
37
+ 'errors' => [
39
38
  {
40
- "message" => "end_date should be a YYYY-MM-DD formatted date"
39
+ 'message' => 'end_date should be a YYYY-MM-DD formatted date'
41
40
  }
42
41
  ]
43
42
  }
@@ -3,23 +3,23 @@ require 'spec_helper'
3
3
  describe SendGrid::Metrics do
4
4
  let(:params) do
5
5
  {
6
- "date" => "2017-10-01",
7
- "blocks" => 101,
8
- "bounce_drops" => 102,
9
- "bounces" => 103,
10
- "clicks" => 104,
11
- "deferred" => 105,
12
- "delivered" => 106,
13
- "invalid_emails" => 107,
14
- "opens" => 108,
15
- "processed" => 109,
16
- "requests" => 110,
17
- "spam_report_drops" => 111,
18
- "spam_reports" => 112,
19
- "unique_clicks" => 113,
20
- "unique_opens" => 114,
21
- "unsubscribe_drops" => 115,
22
- "unsubscribes" => 116
6
+ 'date' => '2017-10-01',
7
+ 'blocks' => 101,
8
+ 'bounce_drops' => 102,
9
+ 'bounces' => 103,
10
+ 'clicks' => 104,
11
+ 'deferred' => 105,
12
+ 'delivered' => 106,
13
+ 'invalid_emails' => 107,
14
+ 'opens' => 108,
15
+ 'processed' => 109,
16
+ 'requests' => 110,
17
+ 'spam_report_drops' => 111,
18
+ 'spam_reports' => 112,
19
+ 'unique_clicks' => 113,
20
+ 'unique_opens' => 114,
21
+ 'unsubscribe_drops' => 115,
22
+ 'unsubscribes' => 116
23
23
  }
24
24
  end
25
25
 
@@ -33,14 +33,13 @@ describe SendGrid::Metrics do
33
33
  expect(subject.date).to be_a Date
34
34
  end
35
35
 
36
- %w(
36
+ %w[
37
37
  blocks bounce_drops bounces clicks deferred delivered invalid_emails
38
38
  opens processed requests spam_report_drops spam_reports unique_clicks
39
39
  unique_opens unsubscribe_drops unsubscribes
40
- ).each do |attribute|
40
+ ].each do |attribute|
41
41
  it "responds to #{attribute}" do
42
42
  expect(subject).to respond_to(attribute.to_sym)
43
43
  end
44
44
  end
45
-
46
45
  end
@@ -3,28 +3,27 @@ require 'spec_helper'
3
3
  describe SendGrid::StatsResponse do
4
4
  let(:params) do
5
5
  [{
6
- "date" => "2017-10-01",
7
- "stats" => [
8
- {"metrics" =>
6
+ 'date' => '2017-10-01',
7
+ 'stats' => [
8
+ { 'metrics' =>
9
9
  {
10
- "blocks" => 101,
11
- "bounce_drops" => 102,
12
- "bounces" => 103,
13
- "clicks" => 104,
14
- "deferred" => 105,
15
- "delivered" => 106,
16
- "invalid_emails" => 107,
17
- "opens" => 108,
18
- "processed" => 109,
19
- "requests" => 110,
20
- "spam_report_drops" => 111,
21
- "spam_reports" => 112,
22
- "unique_clicks" => 113,
23
- "unique_opens" => 114,
24
- "unsubscribe_drops" => 115,
25
- "unsubscribes" => 116
26
- }
27
- }
10
+ 'blocks' => 101,
11
+ 'bounce_drops' => 102,
12
+ 'bounces' => 103,
13
+ 'clicks' => 104,
14
+ 'deferred' => 105,
15
+ 'delivered' => 106,
16
+ 'invalid_emails' => 107,
17
+ 'opens' => 108,
18
+ 'processed' => 109,
19
+ 'requests' => 110,
20
+ 'spam_report_drops' => 111,
21
+ 'spam_reports' => 112,
22
+ 'unique_clicks' => 113,
23
+ 'unique_opens' => 114,
24
+ 'unsubscribe_drops' => 115,
25
+ 'unsubscribes' => 116
26
+ } }
28
27
  ]
29
28
  }]
30
29
  end
@@ -51,9 +50,9 @@ describe SendGrid::StatsResponse do
51
50
  context 'errors' do
52
51
  let(:error_params) do
53
52
  {
54
- "errors" => [
53
+ 'errors' => [
55
54
  {
56
- "message" => "end_date should be a YYYY-MM-DD formatted date"
55
+ 'message' => 'end_date should be a YYYY-MM-DD formatted date'
57
56
  }
58
57
  ]
59
58
  }
@@ -1,3 +1,5 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
1
3
  require 'rubygems'
2
4
  require 'bundler/setup'
3
5
  require 'pry'
@@ -7,4 +9,4 @@ RSpec.configure do |config|
7
9
  Dir["#{File.dirname(__FILE__)}/../lib/sendgrid-ruby.rb"].sort.each { |ext| require ext }
8
10
 
9
11
  config.color = true
10
- end
12
+ end
@@ -1,19 +1,17 @@
1
- # coding: utf-8
2
1
  require_relative "../../../../lib/sendgrid/helpers/mail/attachment"
3
2
  include SendGrid
4
3
  require "json"
5
4
  require "minitest/autorun"
6
5
 
7
6
  class TestAttachment < Minitest::Test
8
- SAMPLE_INPUT = """Es blüht so grün wie Blüten blüh'n im Frühling
7
+ SAMPLE_INPUT = "Es blüht so grün wie Blüten blüh'n im Frühling
9
8
  Es blüht so grün wie Blüten blüh'n im Frühling
10
9
  Es blüht so grün wie Blüten blüh'n im Frühling
11
10
  Es blüht so grün wie Blüten blüh'n im Frühling
12
11
  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
12
+ ".force_encoding('UTF-8').encode
13
+
14
+ def setup; end
17
15
 
18
16
  def test_io_enocding
19
17
  attachment = Attachment.new
@@ -2,7 +2,6 @@ require_relative '../../../../lib/sendgrid/helpers/mail/mail'
2
2
  require 'minitest/autorun'
3
3
 
4
4
  class TestCategory < Minitest::Test
5
-
6
5
  include SendGrid
7
6
 
8
7
  def setup
@@ -23,5 +22,4 @@ class TestCategory < Minitest::Test
23
22
  }
24
23
  assert_equal @category.to_json, expected_json
25
24
  end
26
-
27
25
  end
@@ -2,33 +2,31 @@ require_relative '../../../../lib/sendgrid/helpers/mail/email'
2
2
  require 'minitest/autorun'
3
3
 
4
4
  class TestEmail < Minitest::Test
5
-
6
5
  include SendGrid
7
6
 
8
7
  def test_split_email_full_email
9
- @email = Email.new(email: "Example User <test1@example.com>")
8
+ @email = Email.new(email: 'Example User <test1@example.com>')
10
9
  expected_json = {
11
- "email"=>"test1@example.com",
12
- "name"=>"Example User"
10
+ 'email' => 'test1@example.com',
11
+ 'name' => 'Example User'
13
12
  }
14
13
  assert_equal @email.to_json, expected_json
15
14
  end
16
15
 
17
16
  def test_split_email_only_email
18
- @email = Email.new(email: "test1@example.com")
17
+ @email = Email.new(email: 'test1@example.com')
19
18
  expected_json = {
20
- "email"=>"test1@example.com",
19
+ 'email' => 'test1@example.com'
21
20
  }
22
21
  assert_equal @email.to_json, expected_json
23
22
  end
24
23
 
25
24
  def test_split_email_name_and_email
26
- @email = Email.new(name: "Example User", email: "test1@example.com")
25
+ @email = Email.new(name: 'Example User', email: 'test1@example.com')
27
26
  expected_json = {
28
- "email"=>"test1@example.com",
29
- "name"=>"Example User"
27
+ 'email' => 'test1@example.com',
28
+ 'name' => 'Example User'
30
29
  }
31
30
  assert_equal @email.to_json, expected_json
32
31
  end
33
-
34
- end
32
+ end
@@ -1,12 +1,11 @@
1
- require_relative "../../../../lib/sendgrid/helpers/mail/mail"
2
- require_relative "../../../../lib/sendgrid/client"
1
+ require_relative '../../../../lib/sendgrid/helpers/mail/mail'
2
+ require_relative '../../../../lib/sendgrid/sendgrid'
3
3
  include SendGrid
4
- require "json"
4
+ require 'json'
5
5
  require 'minitest/autorun'
6
6
 
7
7
  class TestMail < Minitest::Test
8
- def setup
9
- end
8
+ def setup; end
10
9
 
11
10
  def test_hello_world
12
11
  from = Email.new(email: 'test@example.com')
@@ -20,102 +19,104 @@ class TestMail < Minitest::Test
20
19
 
21
20
  def test_kitchen_sink
22
21
  mail = SendGrid::Mail.new
23
- mail.from = Email.new(email: "test@example.com")
24
- mail.subject = "Hello World from the Twilio SendGrid Ruby Library"
22
+ mail.from = Email.new(email: 'test@example.com')
23
+ mail.subject = 'Hello World from the Twilio SendGrid Ruby Library'
25
24
  personalization = Personalization.new
26
- personalization.add_to(Email.new(email: "test@example.com", name: "Example User"))
27
- personalization.add_to(Email.new(email: "test@example.com", name: "Example User"))
28
- personalization.add_cc(Email.new(email: "test@example.com", name: "Example User"))
29
- personalization.add_cc(Email.new(email: "test@example.com", name: "Example User"))
30
- personalization.add_bcc(Email.new(email: "test@example.com", name: "Example User"))
31
- personalization.add_bcc(Email.new(email: "test@example.com", name: "Example User"))
32
- personalization.subject = "Hello World from the Personalized Twilio SendGrid Ruby Library"
33
- personalization.add_header(Header.new(key: "X-Test", value: "True"))
34
- personalization.add_header(Header.new(key: "X-Mock", value: "False"))
35
- personalization.add_substitution(Substitution.new(key: "%name%", value: "Example User"))
36
- personalization.add_substitution(Substitution.new(key: "%city%", value: "Denver"))
37
- personalization.add_custom_arg(CustomArg.new(key: "user_id", value: "343"))
38
- personalization.add_custom_arg(CustomArg.new(key: "type", value: "marketing"))
39
- personalization.send_at = 1443636843
25
+ personalization.add_to(Email.new(email: 'test1@example.com', name: 'Example User 1'))
26
+ personalization.add_to(Email.new(email: 'test2@example.com', name: 'Example User 2'))
27
+ personalization.add_cc(Email.new(email: 'test3@example.com', name: 'Example User 3'))
28
+ personalization.add_cc(Email.new(email: 'test4@example.com', name: 'Example User 4'))
29
+ personalization.add_bcc(Email.new(email: 'test5@example.com', name: 'Example User 5'))
30
+ personalization.add_bcc(Email.new(email: 'test6@example.com', name: 'Example User 6'))
31
+ personalization.subject = 'Hello World from the Personalized Twilio SendGrid Ruby Library'
32
+ personalization.add_header(Header.new(key: 'X-Test', value: 'True'))
33
+ personalization.add_header(Header.new(key: 'X-Mock', value: 'False'))
34
+ personalization.add_substitution(Substitution.new(key: '%name%', value: 'Example User'))
35
+ personalization.add_substitution(Substitution.new(key: '%city%', value: 'Denver'))
36
+ personalization.add_custom_arg(CustomArg.new(key: 'user_id', value: '343'))
37
+ personalization.add_custom_arg(CustomArg.new(key: 'type', value: 'marketing'))
38
+ personalization.send_at = 1_443_636_843
40
39
  mail.add_personalization(personalization)
41
40
 
42
41
  personalization2 = Personalization.new
43
- personalization2.add_to(Email.new(email: "test@example.com", name: "Example User"))
44
- personalization2.add_to(Email.new(email: "test@example.com", name: "Example User"))
45
- personalization2.add_cc(Email.new(email: "test@example.com", name: "Example User"))
46
- personalization2.add_cc(Email.new(email: "test@example.com", name: "Example User"))
47
- personalization2.add_bcc(Email.new(email: "test@example.com", name: "Example User"))
48
- personalization2.add_bcc(Email.new(email: "test@example.com", name: "Example User"))
49
- personalization2.subject = "Hello World from the Personalized Twilio SendGrid Ruby Library"
50
- personalization2.add_header(Header.new(key: "X-Test", value: "True"))
51
- personalization2.add_header(Header.new(key: "X-Mock", value: "False"))
52
- personalization2.add_substitution(Substitution.new(key: "%name%", value: "Example User"))
53
- personalization2.add_substitution(Substitution.new(key: "%city%", value: "Denver"))
54
- personalization2.add_custom_arg(CustomArg.new(key: "user_id", value: "343"))
55
- personalization2.add_custom_arg(CustomArg.new(key: "type", value: "marketing"))
56
- personalization2.send_at = 1443636843
42
+ personalization2.add_to(Email.new(email: 'test1@example.com', name: 'Example User 1'))
43
+ personalization2.add_to(Email.new(email: 'test2@example.com', name: 'Example User 2'))
44
+ personalization2.add_cc(Email.new(email: 'test3@example.com', name: 'Example User 3'))
45
+ personalization2.add_cc(Email.new(email: 'test4@example.com', name: 'Example User 4'))
46
+ personalization2.add_bcc(Email.new(email: 'test5@example.com', name: 'Example User 5'))
47
+ personalization2.add_bcc(Email.new(email: 'test6@example.com', name: 'Example User 6'))
48
+ personalization2.subject = 'Hello World from the Personalized Twilio SendGrid Ruby Library'
49
+ personalization2.add_header(Header.new(key: 'X-Test', value: 'True'))
50
+ personalization2.add_header(Header.new(key: 'X-Mock', value: 'False'))
51
+ personalization2.add_substitution(Substitution.new(key: '%name%', value: 'Example User'))
52
+ personalization2.add_substitution(Substitution.new(key: '%city%', value: 'Denver'))
53
+ personalization2.add_custom_arg(CustomArg.new(key: 'user_id', value: '343'))
54
+ personalization2.add_custom_arg(CustomArg.new(key: 'type', value: 'marketing'))
55
+ personalization2.send_at = 1_443_636_843
57
56
  mail.add_personalization(personalization2)
58
57
 
59
- mail.add_content(Content.new(type: "text/plain", value: "some text here"))
60
- mail.add_content(Content.new(type: "text/html", value: "<html><body>some text here</body></html>"))
58
+ mail.add_content(Content.new(type: 'text/plain', value: 'some text here'))
59
+ mail.add_content(Content.new(type: 'text/html', value: '<html><body>some text here</body></html>'))
61
60
 
62
61
  attachment = Attachment.new
63
- attachment.content = "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12"
64
- attachment.type = "application/pdf"
65
- attachment.filename = "balance_001.pdf"
66
- attachment.disposition = "attachment"
67
- attachment.content_id = "Balance Sheet"
62
+ attachment.content = 'TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12'
63
+ attachment.type = 'application/pdf'
64
+ attachment.filename = 'balance_001.pdf'
65
+ attachment.disposition = 'attachment'
66
+ attachment.content_id = 'Balance Sheet'
68
67
 
69
68
  mail.add_attachment(attachment)
70
69
 
71
70
  attachment2 = Attachment.new
72
- attachment2.content = "BwdW"
73
- attachment2.type = "image/png"
74
- attachment2.filename = "banner.png"
75
- attachment2.disposition = "inline"
76
- attachment2.content_id = "Banner"
71
+ attachment2.content = 'BwdW'
72
+ attachment2.type = 'image/png'
73
+ attachment2.filename = 'banner.png'
74
+ attachment2.disposition = 'inline'
75
+ attachment2.content_id = 'Banner'
77
76
  mail.add_attachment(attachment2)
78
77
 
79
- mail.template_id = "13b8f94f-bcae-4ec6-b752-70d6cb59f932"
78
+ mail.template_id = '13b8f94f-bcae-4ec6-b752-70d6cb59f932'
80
79
 
81
- mail.add_section(Section.new(key: "%section1%", value: "Substitution Text for Section 1"))
82
- mail.add_section(Section.new(key: "%section2%", value: "Substitution Text for Section 2"))
80
+ mail.add_section(Section.new(key: '%section1%', value: 'Substitution Text for Section 1'))
81
+ mail.add_section(Section.new(key: '%section2%', value: 'Substitution Text for Section 2'))
83
82
 
84
- mail.add_header(Header.new(key: "X-Test3", value: "test3"))
85
- mail.add_header(Header.new(key: "X-Test4", value: "test4"))
83
+ mail.add_header(Header.new(key: 'X-Test3', value: 'test3'))
84
+ mail.add_header(Header.new(key: 'X-Test4', value: 'test4'))
86
85
 
87
- mail.add_category(Category.new(name: "May"))
88
- mail.add_category(Category.new(name: "2016"))
86
+ mail.add_category(Category.new(name: 'May'))
87
+ mail.add_category(Category.new(name: '2016'))
89
88
 
90
- mail.add_custom_arg(CustomArg.new(key: "campaign", value: "welcome"))
91
- mail.add_custom_arg(CustomArg.new(key: "weekday", value: "morning"))
89
+ mail.add_custom_arg(CustomArg.new(key: 'campaign', value: 'welcome'))
90
+ mail.add_custom_arg(CustomArg.new(key: 'weekday', value: 'morning'))
92
91
 
93
- mail.send_at = 1443636842
92
+ mail.send_at = 1_443_636_842
94
93
 
95
- mail.batch_id = "sendgrid_batch_id"
94
+ mail.batch_id = 'sendgrid_batch_id'
96
95
 
97
- mail.asm = ASM.new(group_id: 99, groups_to_display: [4,5,6,7,8])
96
+ mail.asm = ASM.new(group_id: 99, groups_to_display: [4, 5, 6, 7, 8])
98
97
 
99
- mail.ip_pool_name = "23"
98
+ mail.ip_pool_name = '23'
100
99
 
101
100
  mail_settings = MailSettings.new
102
- mail_settings.bcc = BccSettings.new(enable: true, email: "test@example.com")
101
+ mail_settings.bcc = BccSettings.new(enable: true, email: 'test@example.com')
103
102
  mail_settings.bypass_list_management = BypassListManagement.new(enable: true)
104
- mail_settings.footer = Footer.new(enable: true, text: "Footer Text", html: "<html><body>Footer Text</body></html>")
103
+ mail_settings.footer = Footer.new(enable: true, text: 'Footer Text', html: '<html><body>Footer Text</body></html>')
105
104
  mail_settings.sandbox_mode = SandBoxMode.new(enable: true)
106
- mail_settings.spam_check = SpamCheck.new(enable: true, threshold: 1, post_to_url: "https://spamcatcher.sendgrid.com")
105
+ mail_settings.spam_check = SpamCheck.new(enable: true, threshold: 1, post_to_url: 'https://spamcatcher.sendgrid.com')
107
106
  mail.mail_settings = mail_settings
108
107
 
109
108
  tracking_settings = TrackingSettings.new
110
109
  tracking_settings.click_tracking = ClickTracking.new(enable: false, enable_text: false)
111
- tracking_settings.open_tracking = OpenTracking.new(enable: true, substitution_tag: "Optional tag to replace with the open image in the body of the message")
112
- tracking_settings.subscription_tracking = SubscriptionTracking.new(enable: true, text: "text to insert into the text/plain portion of the message", 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")
113
- tracking_settings.ganalytics = Ganalytics.new(enable: true, utm_source: "some source", utm_medium: "some medium", utm_term: "some term", utm_content: "some content", utm_campaign: "some campaign")
110
+ tracking_settings.open_tracking = OpenTracking.new(enable: true, substitution_tag: 'Optional tag to replace with the open image in the body of the message')
111
+ tracking_settings.subscription_tracking = SubscriptionTracking.new(enable: true, text: 'text to insert into the text/plain portion of the message', 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')
112
+ tracking_settings.ganalytics = Ganalytics.new(enable: true, utm_source: 'some source', utm_medium: 'some medium', utm_term: 'some term', utm_content: 'some content', utm_campaign: 'some campaign')
114
113
  mail.tracking_settings = tracking_settings
115
114
 
116
- mail.reply_to = Email.new(email: "test@example.com")
115
+ mail.reply_to = Email.new(email: 'test@example.com')
117
116
 
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"}}}'))
117
+ # rubocop:disable Layout/LineLength
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":"test5@example.com","name":"Example User 5"},{"email":"test6@example.com","name":"Example User 6"}],"cc":[{"email":"test3@example.com","name":"Example User 3"},{"email":"test4@example.com","name":"Example User 4"}],"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":"test1@example.com","name":"Example User 1"},{"email":"test2@example.com","name":"Example User 2"}]},{"bcc":[{"email":"test5@example.com","name":"Example User 5"},{"email":"test6@example.com","name":"Example User 6"}],"cc":[{"email":"test3@example.com","name":"Example User 3"},{"email":"test4@example.com","name":"Example User 4"}],"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":"test1@example.com","name":"Example User 1"},{"email":"test2@example.com","name":"Example User 2"}]}],"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
+ # rubocop:enable all
119
120
  end
120
121
 
121
122
  def test_that_personalizations_is_empty_initially
@@ -154,17 +155,17 @@ class TestMail < Minitest::Test
154
155
  mail = SendGrid::Mail.new
155
156
  mail.add_section(Section.new(key: '%section1%', value: 'Substitution Text for Section 1'))
156
157
  expected_json = {
157
- "sections"=>{
158
- "%section1%"=>"Substitution Text for Section 1"
159
- }
158
+ 'sections' => {
159
+ '%section1%' => 'Substitution Text for Section 1'
160
+ }
160
161
  }
161
162
  assert_equal mail.to_json, expected_json
162
163
  mail.add_section(Section.new(key: '%section2%', value: 'Substitution Text for Section 2'))
163
164
  expected_json = {
164
- "sections"=>{
165
- "%section1%"=>"Substitution Text for Section 1",
166
- "%section2%"=>"Substitution Text for Section 2"
167
- }
165
+ 'sections' => {
166
+ '%section1%' => 'Substitution Text for Section 1',
167
+ '%section2%' => 'Substitution Text for Section 2'
168
+ }
168
169
  }
169
170
  assert_equal mail.to_json, expected_json
170
171
  end
@@ -173,17 +174,17 @@ class TestMail < Minitest::Test
173
174
  mail = SendGrid::Mail.new
174
175
  mail.add_header(Header.new(key: 'X-Test3', value: 'test3'))
175
176
  expected_json = {
176
- "headers"=>{
177
- "X-Test3"=>"test3"
178
- }
177
+ 'headers' => {
178
+ 'X-Test3' => 'test3'
179
+ }
179
180
  }
180
181
  assert_equal mail.to_json, expected_json
181
182
  mail.add_header(Header.new(key: 'X-Test4', value: 'test4'))
182
183
  expected_json = {
183
- "headers"=>{
184
- "X-Test3"=>"test3",
185
- "X-Test4"=>"test4"
186
- }
184
+ 'headers' => {
185
+ 'X-Test3' => 'test3',
186
+ 'X-Test4' => 'test4'
187
+ }
187
188
  }
188
189
  assert_equal mail.to_json, expected_json
189
190
  end
@@ -192,32 +193,32 @@ class TestMail < Minitest::Test
192
193
  mail = SendGrid::Mail.new
193
194
  mail.add_custom_arg(CustomArg.new(key: 'campaign 1', value: 'welcome 1'))
194
195
  expected_json = {
195
- "custom_args"=>{
196
- "campaign 1"=>"welcome 1"
197
- }
196
+ 'custom_args' => {
197
+ 'campaign 1' => 'welcome 1'
198
+ }
198
199
  }
199
200
  assert_equal mail.to_json, expected_json
200
201
  mail.add_custom_arg(CustomArg.new(key: 'campaign 2', value: 'welcome 2'))
201
202
  expected_json = {
202
- "custom_args"=>{
203
- "campaign 1"=>"welcome 1",
204
- "campaign 2"=>"welcome 2"
205
- }
203
+ 'custom_args' => {
204
+ 'campaign 1' => 'welcome 1',
205
+ 'campaign 2' => 'welcome 2'
206
+ }
206
207
  }
207
208
  assert_equal mail.to_json, expected_json
208
209
  end
209
210
 
210
211
  def test_add_non_string_custom_arg
211
212
  mail = Mail.new
212
- mail.add_custom_arg(CustomArg.new(key: "Integer", value: 1))
213
- mail.add_custom_arg(CustomArg.new(key: "Array", value: [1, "a", true]))
214
- mail.add_custom_arg(CustomArg.new(key: "Hash", value: {"a" => 1, "b" => 2}))
213
+ mail.add_custom_arg(CustomArg.new(key: 'Integer', value: 1))
214
+ mail.add_custom_arg(CustomArg.new(key: 'Array', value: [1, 'a', true]))
215
+ mail.add_custom_arg(CustomArg.new(key: 'Hash', value: { 'a' => 1, 'b' => 2 }))
215
216
  expected_json = {
216
- "custom_args"=>{
217
- "Integer"=>"1",
218
- "Array"=>"[1, \"a\", true]",
219
- "Hash"=>"{\"a\"=>1, \"b\"=>2}",
220
- }
217
+ 'custom_args' => {
218
+ 'Integer' => '1',
219
+ 'Array' => '[1, "a", true]',
220
+ 'Hash' => '{"a"=>1, "b"=>2}'
221
+ }
221
222
  }
222
223
  assert_equal mail.to_json, expected_json
223
224
  end
@@ -237,11 +238,9 @@ class TestMail < Minitest::Test
237
238
 
238
239
  def test_add_more_than_1_valid_category
239
240
  mail = SendGrid::Mail.new
240
- category_1 = Category.new(name: 'foo')
241
- category_2 = Category.new(name: 'bar')
242
- mail.add_category(category_1)
243
- mail.add_category(category_2)
244
- assert_equal(['foo', 'bar'], mail.categories)
241
+ mail.add_category(Category.new(name: 'foo'))
242
+ mail.add_category(Category.new(name: 'bar'))
243
+ assert_equal(%w[foo bar], mail.categories)
245
244
  end
246
245
 
247
246
  def test_add_invalid_category