sendgrid-ruby 6.3.4 → 6.3.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -6
  3. data/.rubocop_todo.yml +109 -0
  4. data/.travis.yml +1 -2
  5. data/CHANGELOG.md +18 -1
  6. data/CONTRIBUTING.md +2 -5
  7. data/Makefile +1 -0
  8. data/README.md +1 -7
  9. data/Rakefile +2 -3
  10. data/USAGE.md +110 -2
  11. data/examples/accesssettings/accesssettings.rb +9 -12
  12. data/examples/alerts/alerts.rb +8 -11
  13. data/examples/apikeys/apikeys.rb +12 -15
  14. data/examples/asm/asm.rb +27 -30
  15. data/examples/browsers/browsers.rb +0 -3
  16. data/examples/campaigns/campaigns.rb +29 -32
  17. data/examples/categories/categories.rb +0 -3
  18. data/examples/clients/clients.rb +1 -4
  19. data/examples/contactdb/contactdb.rb +63 -66
  20. data/examples/devices/devices.rb +0 -3
  21. data/examples/emailactivity/emailactivity.rb +52 -0
  22. data/examples/geo/geo.rb +0 -3
  23. data/examples/helpers/eventwebhook/example.rb +4 -4
  24. data/examples/helpers/mail/example.rb +9 -10
  25. data/examples/helpers/settings/example.rb +1 -1
  26. data/examples/helpers/stats/example.rb +4 -4
  27. data/examples/ips/ips.rb +19 -22
  28. data/examples/mail/mail.rb +72 -75
  29. data/examples/mailboxproviders/mailboxproviders.rb +0 -3
  30. data/examples/mailsettings/mailsettings.rb +21 -24
  31. data/examples/partnersettings/partnersettings.rb +3 -6
  32. data/examples/scopes/scopes.rb +7 -9
  33. data/examples/senderauthentication/senderauthentication.rb +41 -44
  34. data/examples/senders/senders.rb +28 -31
  35. data/examples/stats/stats.rb +0 -3
  36. data/examples/subusers/subusers.rb +17 -20
  37. data/examples/suppression/suppression.rb +15 -18
  38. data/examples/templates/templates.rb +29 -31
  39. data/examples/trackingsettings/trackingsettings.rb +14 -17
  40. data/examples/user/user.rb +41 -44
  41. data/lib/rack/sendgrid_webhook_verification.rb +3 -2
  42. data/lib/sendgrid/base_interface.rb +1 -1
  43. data/lib/sendgrid/helpers/eventwebhook/eventwebhook.rb +4 -6
  44. data/lib/sendgrid/helpers/inbound/app.rb +1 -1
  45. data/lib/sendgrid/helpers/inbound/send.rb +2 -2
  46. data/lib/sendgrid/helpers/ip_management/ip_management.rb +1 -1
  47. data/lib/sendgrid/helpers/mail/asm.rb +6 -18
  48. data/lib/sendgrid/helpers/mail/attachment.rb +12 -42
  49. data/lib/sendgrid/helpers/mail/bcc_settings.rb +6 -18
  50. data/lib/sendgrid/helpers/mail/bypass_list_management.rb +8 -18
  51. data/lib/sendgrid/helpers/mail/category.rb +2 -2
  52. data/lib/sendgrid/helpers/mail/click_tracking.rb +6 -18
  53. data/lib/sendgrid/helpers/mail/content.rb +4 -3
  54. data/lib/sendgrid/helpers/mail/custom_arg.rb +6 -10
  55. data/lib/sendgrid/helpers/mail/email.rb +5 -4
  56. data/lib/sendgrid/helpers/mail/footer.rb +7 -27
  57. data/lib/sendgrid/helpers/mail/ganalytics.rb +10 -54
  58. data/lib/sendgrid/helpers/mail/header.rb +6 -10
  59. data/lib/sendgrid/helpers/mail/mail.rb +30 -48
  60. data/lib/sendgrid/helpers/mail/mail_settings.rb +9 -25
  61. data/lib/sendgrid/helpers/mail/open_tracking.rb +6 -18
  62. data/lib/sendgrid/helpers/mail/personalization.rb +34 -27
  63. data/lib/sendgrid/helpers/mail/section.rb +6 -10
  64. data/lib/sendgrid/helpers/mail/spam_check.rb +7 -27
  65. data/lib/sendgrid/helpers/mail/subscription_tracking.rb +8 -36
  66. data/lib/sendgrid/helpers/mail/substitution.rb +6 -10
  67. data/lib/sendgrid/helpers/mail/tracking_settings.rb +7 -20
  68. data/lib/sendgrid/helpers/permissions/scope.rb +1 -1
  69. data/lib/sendgrid/helpers/settings/settings.rb +1 -1
  70. data/lib/sendgrid/helpers/settings/tracking_settings_dto.rb +3 -5
  71. data/lib/sendgrid/helpers/stats/metrics.rb +5 -5
  72. data/lib/sendgrid/sendgrid.rb +1 -1
  73. data/lib/sendgrid/twilio_email.rb +1 -1
  74. data/lib/sendgrid/version.rb +1 -1
  75. data/mail_helper_v3.md +3 -3
  76. data/sendgrid-ruby.gemspec +7 -8
  77. data/spec/fixtures/event_webhook.rb +17 -11
  78. data/spec/rack/sendgrid_webhook_verification_spec.rb +4 -4
  79. data/spec/sendgrid/helpers/eventwebhook/eventwebhook_spec.rb +38 -36
  80. data/spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb +1 -1
  81. data/spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb +1 -1
  82. data/spec/sendgrid/helpers/settings/settings_spec.rb +2 -2
  83. data/spec/sendgrid/helpers/settings/tracking_settings_dto_spec.rb +1 -1
  84. data/spec/sendgrid/helpers/settings/user_settings_dto_spec.rb +1 -1
  85. data/spec/sendgrid/helpers/stats/email_stats_spec.rb +22 -23
  86. data/spec/sendgrid/helpers/stats/metrics_spec.rb +19 -20
  87. data/spec/sendgrid/helpers/stats/stats_response_spec.rb +22 -23
  88. data/spec/spec_helper.rb +1 -1
  89. data/test/sendgrid/helpers/mail/test_attachment.rb +4 -6
  90. data/test/sendgrid/helpers/mail/test_category.rb +0 -2
  91. data/test/sendgrid/helpers/mail/test_email.rb +9 -11
  92. data/test/sendgrid/helpers/mail/test_mail.rb +101 -102
  93. data/test/sendgrid/helpers/mail/test_personalizations.rb +106 -93
  94. data/test/sendgrid/permissions/test_scopes.rb +0 -2
  95. data/test/sendgrid/test_sendgrid-ruby.rb +1946 -1947
  96. data/use-cases/legacy-templates.md +1 -1
  97. data/use-cases/transactional-templates.md +1 -1
  98. metadata +38 -36
@@ -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
  }
@@ -9,4 +9,4 @@ RSpec.configure do |config|
9
9
  Dir["#{File.dirname(__FILE__)}/../lib/sendgrid-ruby.rb"].sort.each { |ext| require ext }
10
10
 
11
11
  config.color = true
12
- 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/sendgrid"
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
@@ -2,160 +2,173 @@ require_relative '../../../../lib/sendgrid/helpers/mail/personalization'
2
2
  require 'minitest/autorun'
3
3
 
4
4
  class TestPersonalization < Minitest::Test
5
-
6
5
  include SendGrid
7
6
 
8
7
  def test_add_to
9
- @personalization = Personalization.new()
8
+ @personalization = Personalization.new
10
9
  @personalization.add_to(Email.new(email: 'test1@example.com', name: 'Example User'))
11
- expected_json = {
12
- "to"=>[
13
- {
14
- "email"=>"test1@example.com",
15
- "name"=>"Example User"
16
- }
17
- ]
18
- }
19
10
  @personalization.add_to(Email.new(email: 'test2@example.com', name: 'Example User 2'))
20
11
  expected_json = {
21
- "to"=>[
22
- {
23
- "email"=>"test1@example.com",
24
- "name"=>"Example User"
25
- },
26
- {
27
- "email"=>"test2@example.com",
28
- "name"=>"Example User 2"
29
- }
30
- ]
12
+ 'to' => [
13
+ {
14
+ 'email' => 'test1@example.com',
15
+ 'name' => 'Example User'
16
+ },
17
+ {
18
+ 'email' => 'test2@example.com',
19
+ 'name' => 'Example User 2'
20
+ }
21
+ ]
31
22
  }
32
23
  assert_equal @personalization.to_json, expected_json
33
24
  end
34
25
 
26
+ def test_duplicate_add_to
27
+ @personalization = Personalization.new
28
+ @personalization.add_to(Email.new(email: 'test1@example.com', name: 'Example User'))
29
+
30
+ assert_raises(DuplicatePersonalizationError) do
31
+ @personalization.add_to(Email.new(email: 'test1@example.com', name: 'Duplicate User'))
32
+ end
33
+
34
+ assert_raises(DuplicatePersonalizationError) do
35
+ @personalization.add_to(Email.new(email: 'TEST1@EXAMPLE.COM', name: 'Duplicate User'))
36
+ end
37
+ end
38
+
35
39
  def test_add_cc
36
- @personalization = Personalization.new()
40
+ @personalization = Personalization.new
37
41
  @personalization.add_cc(Email.new(email: 'test1@example.com', name: 'Example User'))
38
- expected_json = {
39
- "cc"=>[
40
- {
41
- "email"=>"test1@example.com",
42
- "name"=>"Example User"
43
- }
44
- ]
45
- }
46
42
  @personalization.add_cc(Email.new(email: 'test2@example.com', name: 'Example User 2'))
47
43
  expected_json = {
48
- "cc"=>[
49
- {
50
- "email"=>"test1@example.com",
51
- "name"=>"Example User"
52
- },
53
- {
54
- "email"=>"test2@example.com",
55
- "name"=>"Example User 2"
56
- }
57
- ]
44
+ 'cc' => [
45
+ {
46
+ 'email' => 'test1@example.com',
47
+ 'name' => 'Example User'
48
+ },
49
+ {
50
+ 'email' => 'test2@example.com',
51
+ 'name' => 'Example User 2'
52
+ }
53
+ ]
58
54
  }
59
55
  assert_equal @personalization.to_json, expected_json
60
56
  end
61
57
 
58
+ def test_duplicate_add_cc
59
+ @personalization = Personalization.new
60
+ @personalization.add_cc(Email.new(email: 'test1@example.com', name: 'Example User'))
61
+
62
+ assert_raises(DuplicatePersonalizationError) do
63
+ @personalization.add_cc(Email.new(email: 'test1@example.com', name: 'Duplicate User'))
64
+ end
65
+
66
+ assert_raises(DuplicatePersonalizationError) do
67
+ @personalization.add_cc(Email.new(email: 'TEST1@EXAMPLE.COM', name: 'Duplicate User'))
68
+ end
69
+ end
70
+
62
71
  def test_add_bcc
63
- @personalization = Personalization.new()
72
+ @personalization = Personalization.new
64
73
  @personalization.add_bcc(Email.new(email: 'test1@example.com', name: 'Example User'))
65
- expected_json = {
66
- "bcc"=>[
67
- {
68
- "email"=>"test1@example.com",
69
- "name"=>"Example User"
70
- }
71
- ]
72
- }
73
74
  @personalization.add_bcc(Email.new(email: 'test2@example.com', name: 'Example User 2'))
74
75
  expected_json = {
75
- "bcc"=>[
76
- {
77
- "email"=>"test1@example.com",
78
- "name"=>"Example User"
79
- },
80
- {
81
- "email"=>"test2@example.com",
82
- "name"=>"Example User 2"
83
- }
84
- ]
76
+ 'bcc' => [
77
+ {
78
+ 'email' => 'test1@example.com',
79
+ 'name' => 'Example User'
80
+ },
81
+ {
82
+ 'email' => 'test2@example.com',
83
+ 'name' => 'Example User 2'
84
+ }
85
+ ]
85
86
  }
86
87
  assert_equal @personalization.to_json, expected_json
87
88
  end
88
89
 
90
+ def test_duplicate_add_bcc
91
+ @personalization = Personalization.new
92
+ @personalization.add_bcc(Email.new(email: 'test1@example.com', name: 'Example User'))
93
+
94
+ assert_raises(DuplicatePersonalizationError) do
95
+ @personalization.add_bcc(Email.new(email: 'test1@example.com', name: 'Duplicate User'))
96
+ end
97
+
98
+ assert_raises(DuplicatePersonalizationError) do
99
+ @personalization.add_bcc(Email.new(email: 'TEST1@EXAMPLE.COM', name: 'Duplicate User'))
100
+ end
101
+ end
102
+
89
103
  def test_add_header
90
- @personalization = Personalization.new()
104
+ @personalization = Personalization.new
91
105
  @personalization.add_header(Header.new(key: 'X-Test', value: 'True'))
92
106
  expected_json = {
93
- "headers"=>{
94
- "X-Test"=>"True"
95
- }
107
+ 'headers' => {
108
+ 'X-Test' => 'True'
109
+ }
96
110
  }
97
111
  assert_equal @personalization.to_json, expected_json
98
112
  @personalization.add_header(Header.new(key: 'X-Test 1', value: 'False'))
99
113
  expected_json = {
100
- "headers"=>{
101
- "X-Test"=>"True",
102
- "X-Test 1"=>"False"
103
- }
114
+ 'headers' => {
115
+ 'X-Test' => 'True',
116
+ 'X-Test 1' => 'False'
117
+ }
104
118
  }
105
119
  assert_equal @personalization.to_json, expected_json
106
120
  end
107
121
 
108
122
  def test_add_substitution
109
- @personalization = Personalization.new()
123
+ @personalization = Personalization.new
110
124
  @personalization.add_substitution(Substitution.new(key: '%name%', value: 'Example User'))
111
125
  expected_json = {
112
- "substitutions"=>{
113
- "%name%"=>"Example User"
114
- }
126
+ 'substitutions' => {
127
+ '%name%' => 'Example User'
128
+ }
115
129
  }
116
130
  assert_equal @personalization.to_json, expected_json
117
131
  @personalization.add_substitution(Substitution.new(key: '%name 1%', value: 'Example User 1'))
118
132
  expected_json = {
119
- "substitutions"=>{
120
- "%name%"=>"Example User",
121
- "%name 1%"=>"Example User 1"
122
- }
133
+ 'substitutions' => {
134
+ '%name%' => 'Example User',
135
+ '%name 1%' => 'Example User 1'
136
+ }
123
137
  }
124
138
  assert_equal @personalization.to_json, expected_json
125
139
  end
126
140
 
127
141
  def test_add_custom_arg
128
- @personalization = Personalization.new()
142
+ @personalization = Personalization.new
129
143
  @personalization.add_custom_arg(CustomArg.new(key: 'user_id', value: '343'))
130
144
  expected_json = {
131
- "custom_args"=>{
132
- "user_id"=>"343"
133
- }
145
+ 'custom_args' => {
146
+ 'user_id' => '343'
147
+ }
134
148
  }
135
149
  assert_equal @personalization.to_json, expected_json
136
150
  @personalization.add_custom_arg(CustomArg.new(key: 'city', value: 'denver'))
137
151
  expected_json = {
138
- "custom_args"=>{
139
- "user_id"=>"343",
140
- "city"=>"denver"
141
- }
152
+ 'custom_args' => {
153
+ 'user_id' => '343',
154
+ 'city' => 'denver'
155
+ }
142
156
  }
143
157
  assert_equal @personalization.to_json, expected_json
144
158
  end
145
159
 
146
160
  def test_add_dynamic_template_data
147
- @personalization = Personalization.new()
148
- @personalization.add_dynamic_template_data({
149
- "name"=>"Example User",
150
- "city"=> "Denver"
151
- })
161
+ @personalization = Personalization.new
162
+ @personalization.add_dynamic_template_data(
163
+ 'name' => 'Example User',
164
+ 'city' => 'Denver'
165
+ )
152
166
  expected_json = {
153
- "dynamic_template_data"=>{
154
- "name"=>"Example User",
155
- "city"=>"Denver"
156
- }
167
+ 'dynamic_template_data' => {
168
+ 'name' => 'Example User',
169
+ 'city' => 'Denver'
170
+ }
157
171
  }
158
172
  assert_equal @personalization.to_json, expected_json
159
173
  end
160
-
161
- end
174
+ end