sendgrid-ruby 6.2.0 → 6.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/config.yml +10 -0
  3. data/.github/workflows/test-and-deploy.yml +120 -0
  4. data/.gitignore +2 -0
  5. data/.rubocop.yml +8 -0
  6. data/.rubocop_todo.yml +127 -0
  7. data/CHANGELOG.md +147 -9
  8. data/CONTRIBUTING.md +11 -21
  9. data/Dockerfile +14 -0
  10. data/FIRST_TIMERS.md +79 -0
  11. data/Gemfile +0 -1
  12. data/ISSUE_TEMPLATE.md +5 -1
  13. data/{LICENSE.md → LICENSE} +1 -1
  14. data/Makefile +9 -2
  15. data/PULL_REQUEST_TEMPLATE.md +5 -5
  16. data/README.md +23 -31
  17. data/Rakefile +2 -3
  18. data/TROUBLESHOOTING.md +17 -5
  19. data/USAGE.md +146 -39
  20. data/examples/accesssettings/accesssettings.rb +9 -12
  21. data/examples/alerts/alerts.rb +8 -11
  22. data/examples/apikeys/apikeys.rb +12 -15
  23. data/examples/asm/asm.rb +27 -30
  24. data/examples/browsers/browsers.rb +0 -3
  25. data/examples/campaigns/campaigns.rb +29 -32
  26. data/examples/categories/categories.rb +0 -3
  27. data/examples/clients/clients.rb +1 -4
  28. data/examples/contactdb/contactdb.rb +63 -66
  29. data/examples/devices/devices.rb +0 -3
  30. data/examples/emailactivity/emailactivity.rb +52 -0
  31. data/examples/geo/geo.rb +0 -3
  32. data/examples/helpers/eventwebhook/example.rb +16 -0
  33. data/examples/helpers/mail/example.rb +24 -13
  34. data/examples/helpers/settings/example.rb +1 -1
  35. data/examples/helpers/stats/example.rb +4 -4
  36. data/examples/ips/ips.rb +19 -22
  37. data/examples/mail/mail.rb +72 -75
  38. data/examples/mailboxproviders/mailboxproviders.rb +0 -3
  39. data/examples/mailsettings/mailsettings.rb +21 -24
  40. data/examples/partnersettings/partnersettings.rb +3 -6
  41. data/examples/scopes/scopes.rb +8 -10
  42. data/examples/senderauthentication/senderauthentication.rb +41 -44
  43. data/examples/senders/senders.rb +28 -31
  44. data/examples/stats/stats.rb +0 -3
  45. data/examples/subusers/subusers.rb +17 -20
  46. data/examples/suppression/suppression.rb +15 -18
  47. data/examples/templates/templates.rb +29 -31
  48. data/examples/trackingsettings/trackingsettings.rb +14 -17
  49. data/examples/user/user.rb +41 -44
  50. data/lib/rack/sendgrid_webhook_verification.rb +55 -0
  51. data/lib/sendgrid/base_interface.rb +8 -4
  52. data/lib/sendgrid/helpers/eventwebhook/eventwebhook.rb +50 -0
  53. data/lib/sendgrid/helpers/inbound/README.md +5 -5
  54. data/lib/sendgrid/helpers/inbound/app.rb +2 -2
  55. data/lib/sendgrid/helpers/inbound/public/index.html +1 -1
  56. data/lib/sendgrid/helpers/inbound/send.rb +3 -3
  57. data/lib/sendgrid/helpers/ip_management/ip_management.rb +1 -1
  58. data/lib/sendgrid/helpers/mail/README.md +3 -3
  59. data/lib/sendgrid/helpers/mail/asm.rb +6 -18
  60. data/lib/sendgrid/helpers/mail/attachment.rb +12 -42
  61. data/lib/sendgrid/helpers/mail/bcc_settings.rb +6 -18
  62. data/lib/sendgrid/helpers/mail/bypass_list_management.rb +8 -18
  63. data/lib/sendgrid/helpers/mail/category.rb +2 -2
  64. data/lib/sendgrid/helpers/mail/click_tracking.rb +6 -18
  65. data/lib/sendgrid/helpers/mail/content.rb +4 -3
  66. data/lib/sendgrid/helpers/mail/custom_arg.rb +6 -10
  67. data/lib/sendgrid/helpers/mail/email.rb +10 -5
  68. data/lib/sendgrid/helpers/mail/footer.rb +7 -27
  69. data/lib/sendgrid/helpers/mail/ganalytics.rb +10 -54
  70. data/lib/sendgrid/helpers/mail/header.rb +6 -10
  71. data/lib/sendgrid/helpers/mail/mail.rb +32 -48
  72. data/lib/sendgrid/helpers/mail/mail_settings.rb +9 -25
  73. data/lib/sendgrid/helpers/mail/open_tracking.rb +6 -18
  74. data/lib/sendgrid/helpers/mail/personalization.rb +40 -27
  75. data/lib/sendgrid/helpers/mail/section.rb +6 -10
  76. data/lib/sendgrid/helpers/mail/spam_check.rb +7 -27
  77. data/lib/sendgrid/helpers/mail/subscription_tracking.rb +8 -36
  78. data/lib/sendgrid/helpers/mail/substitution.rb +6 -10
  79. data/lib/sendgrid/helpers/mail/tracking_settings.rb +8 -20
  80. data/lib/sendgrid/helpers/permissions/scope.rb +2 -2
  81. data/lib/sendgrid/helpers/settings/README.md +2 -2
  82. data/lib/sendgrid/helpers/settings/settings.rb +1 -1
  83. data/lib/sendgrid/helpers/settings/tracking_settings_dto.rb +3 -5
  84. data/lib/sendgrid/helpers/stats/metrics.rb +5 -5
  85. data/lib/sendgrid/sendgrid.rb +4 -3
  86. data/lib/sendgrid/twilio_email.rb +1 -1
  87. data/lib/sendgrid/version.rb +1 -1
  88. data/lib/sendgrid-ruby.rb +2 -0
  89. data/mail_helper_v3.md +12 -12
  90. data/sendgrid-ruby.gemspec +8 -8
  91. data/spec/fixtures/event_webhook.rb +22 -0
  92. data/spec/rack/sendgrid_webhook_verification_spec.rb +142 -0
  93. data/spec/sendgrid/helpers/eventwebhook/eventwebhook_spec.rb +105 -0
  94. data/spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb +3 -3
  95. data/spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb +3 -3
  96. data/spec/sendgrid/helpers/settings/settings_spec.rb +2 -2
  97. data/spec/sendgrid/helpers/settings/tracking_settings_dto_spec.rb +3 -3
  98. data/spec/sendgrid/helpers/settings/user_settings_dto_spec.rb +3 -3
  99. data/spec/sendgrid/helpers/stats/email_stats_spec.rb +22 -23
  100. data/spec/sendgrid/helpers/stats/metrics_spec.rb +19 -20
  101. data/spec/sendgrid/helpers/stats/stats_response_spec.rb +22 -23
  102. data/spec/spec_helper.rb +3 -1
  103. data/static/img/github-fork.png +0 -0
  104. data/static/img/github-sign-up.png +0 -0
  105. data/test/sendgrid/helpers/mail/test_attachment.rb +4 -6
  106. data/test/sendgrid/helpers/mail/test_category.rb +0 -2
  107. data/test/sendgrid/helpers/mail/test_email.rb +17 -10
  108. data/test/sendgrid/helpers/mail/test_mail.rb +101 -102
  109. data/test/sendgrid/helpers/mail/test_personalizations.rb +145 -92
  110. data/test/sendgrid/permissions/test_scopes.rb +1 -3
  111. data/test/sendgrid/test_sendgrid-ruby.rb +1964 -1986
  112. data/twilio_sendgrid_logo.png +0 -0
  113. data/use-cases/README.md +17 -0
  114. data/use-cases/domain-authentication.md +5 -0
  115. data/use-cases/email-statistics.md +52 -0
  116. data/use-cases/legacy-templates.md +98 -0
  117. data/use-cases/personalizations.md +34 -0
  118. data/use-cases/sms.md +39 -0
  119. data/use-cases/transactional-templates.md +111 -0
  120. data/use-cases/twilio-email.md +13 -0
  121. data/use-cases/twilio-setup.md +54 -0
  122. metadata +69 -34
  123. data/.codeclimate.yml +0 -21
  124. data/.travis.yml +0 -40
  125. data/USE_CASES.md +0 -405
  126. data/docker/Dockerfile +0 -12
  127. data/docker/README.md +0 -30
  128. data/test/prism.sh +0 -42
@@ -2,33 +2,40 @@ 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
32
 
34
- end
33
+ def test_mandatory_email_missing
34
+ assert_raises(ArgumentError) { Email.new(email: nil) }
35
+ assert_raises(ArgumentError) { Email.new(email: "") }
36
+ end
37
+
38
+ def test_invalid_email
39
+ assert_raises(ArgumentError) { Email.new(email: "some-invalid-string") }
40
+ end
41
+ 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