sendgrid-ruby 6.3.4 → 6.3.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +7 -5
  3. data/.rubocop_todo.yml +109 -0
  4. data/.travis.yml +1 -2
  5. data/CHANGELOG.md +43 -1
  6. data/CONTRIBUTING.md +2 -5
  7. data/FIRST_TIMERS.md +7 -7
  8. data/{LICENSE.md → LICENSE} +1 -1
  9. data/Makefile +1 -0
  10. data/PULL_REQUEST_TEMPLATE.md +4 -4
  11. data/README.md +3 -9
  12. data/Rakefile +2 -3
  13. data/USAGE.md +111 -3
  14. data/examples/accesssettings/accesssettings.rb +9 -12
  15. data/examples/alerts/alerts.rb +8 -11
  16. data/examples/apikeys/apikeys.rb +12 -15
  17. data/examples/asm/asm.rb +27 -30
  18. data/examples/browsers/browsers.rb +0 -3
  19. data/examples/campaigns/campaigns.rb +29 -32
  20. data/examples/categories/categories.rb +0 -3
  21. data/examples/clients/clients.rb +1 -4
  22. data/examples/contactdb/contactdb.rb +63 -66
  23. data/examples/devices/devices.rb +0 -3
  24. data/examples/emailactivity/emailactivity.rb +52 -0
  25. data/examples/geo/geo.rb +0 -3
  26. data/examples/helpers/eventwebhook/example.rb +4 -4
  27. data/examples/helpers/mail/example.rb +9 -10
  28. data/examples/helpers/settings/example.rb +1 -1
  29. data/examples/helpers/stats/example.rb +4 -4
  30. data/examples/ips/ips.rb +19 -22
  31. data/examples/mail/mail.rb +72 -75
  32. data/examples/mailboxproviders/mailboxproviders.rb +0 -3
  33. data/examples/mailsettings/mailsettings.rb +21 -24
  34. data/examples/partnersettings/partnersettings.rb +3 -6
  35. data/examples/scopes/scopes.rb +8 -10
  36. data/examples/senderauthentication/senderauthentication.rb +41 -44
  37. data/examples/senders/senders.rb +28 -31
  38. data/examples/stats/stats.rb +0 -3
  39. data/examples/subusers/subusers.rb +17 -20
  40. data/examples/suppression/suppression.rb +15 -18
  41. data/examples/templates/templates.rb +29 -31
  42. data/examples/trackingsettings/trackingsettings.rb +14 -17
  43. data/examples/user/user.rb +41 -44
  44. data/lib/rack/sendgrid_webhook_verification.rb +5 -2
  45. data/lib/sendgrid/base_interface.rb +2 -1
  46. data/lib/sendgrid/helpers/eventwebhook/eventwebhook.rb +4 -6
  47. data/lib/sendgrid/helpers/inbound/app.rb +2 -2
  48. data/lib/sendgrid/helpers/inbound/send.rb +3 -3
  49. data/lib/sendgrid/helpers/ip_management/ip_management.rb +1 -1
  50. data/lib/sendgrid/helpers/mail/asm.rb +6 -18
  51. data/lib/sendgrid/helpers/mail/attachment.rb +12 -42
  52. data/lib/sendgrid/helpers/mail/bcc_settings.rb +6 -18
  53. data/lib/sendgrid/helpers/mail/bypass_list_management.rb +8 -18
  54. data/lib/sendgrid/helpers/mail/category.rb +2 -2
  55. data/lib/sendgrid/helpers/mail/click_tracking.rb +6 -18
  56. data/lib/sendgrid/helpers/mail/content.rb +4 -3
  57. data/lib/sendgrid/helpers/mail/custom_arg.rb +6 -10
  58. data/lib/sendgrid/helpers/mail/email.rb +10 -5
  59. data/lib/sendgrid/helpers/mail/footer.rb +7 -27
  60. data/lib/sendgrid/helpers/mail/ganalytics.rb +10 -54
  61. data/lib/sendgrid/helpers/mail/header.rb +6 -10
  62. data/lib/sendgrid/helpers/mail/mail.rb +32 -48
  63. data/lib/sendgrid/helpers/mail/mail_settings.rb +9 -25
  64. data/lib/sendgrid/helpers/mail/open_tracking.rb +6 -18
  65. data/lib/sendgrid/helpers/mail/personalization.rb +34 -27
  66. data/lib/sendgrid/helpers/mail/section.rb +6 -10
  67. data/lib/sendgrid/helpers/mail/spam_check.rb +7 -27
  68. data/lib/sendgrid/helpers/mail/subscription_tracking.rb +8 -36
  69. data/lib/sendgrid/helpers/mail/substitution.rb +6 -10
  70. data/lib/sendgrid/helpers/mail/tracking_settings.rb +8 -20
  71. data/lib/sendgrid/helpers/permissions/scope.rb +2 -2
  72. data/lib/sendgrid/helpers/settings/settings.rb +1 -1
  73. data/lib/sendgrid/helpers/settings/tracking_settings_dto.rb +3 -5
  74. data/lib/sendgrid/helpers/stats/metrics.rb +5 -5
  75. data/lib/sendgrid/sendgrid.rb +1 -1
  76. data/lib/sendgrid/twilio_email.rb +1 -1
  77. data/lib/sendgrid/version.rb +1 -1
  78. data/mail_helper_v3.md +3 -3
  79. data/sendgrid-ruby.gemspec +7 -8
  80. data/spec/fixtures/event_webhook.rb +17 -11
  81. data/spec/rack/sendgrid_webhook_verification_spec.rb +30 -4
  82. data/spec/sendgrid/helpers/eventwebhook/eventwebhook_spec.rb +38 -36
  83. data/spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb +1 -1
  84. data/spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb +1 -1
  85. data/spec/sendgrid/helpers/settings/settings_spec.rb +2 -2
  86. data/spec/sendgrid/helpers/settings/tracking_settings_dto_spec.rb +1 -1
  87. data/spec/sendgrid/helpers/settings/user_settings_dto_spec.rb +1 -1
  88. data/spec/sendgrid/helpers/stats/email_stats_spec.rb +22 -23
  89. data/spec/sendgrid/helpers/stats/metrics_spec.rb +19 -20
  90. data/spec/sendgrid/helpers/stats/stats_response_spec.rb +22 -23
  91. data/spec/spec_helper.rb +1 -1
  92. data/test/sendgrid/helpers/mail/test_attachment.rb +4 -6
  93. data/test/sendgrid/helpers/mail/test_category.rb +0 -2
  94. data/test/sendgrid/helpers/mail/test_email.rb +17 -10
  95. data/test/sendgrid/helpers/mail/test_mail.rb +101 -102
  96. data/test/sendgrid/helpers/mail/test_personalizations.rb +133 -93
  97. data/test/sendgrid/permissions/test_scopes.rb +1 -3
  98. data/test/sendgrid/test_sendgrid-ruby.rb +1947 -1948
  99. data/use-cases/legacy-templates.md +1 -1
  100. data/use-cases/transactional-templates.md +1 -1
  101. metadata +39 -37
@@ -1,5 +1,9 @@
1
+ require 'json'
2
+
1
3
  module SendGrid
2
4
  class MailSettings
5
+ attr_writer :sandbox_mode, :footer, :bcc, :spam_check, :bypass_list_management
6
+
3
7
  def initialize
4
8
  @bcc = nil
5
9
  @bypass_list_management = nil
@@ -8,53 +12,33 @@ module SendGrid
8
12
  @spam_check = nil
9
13
  end
10
14
 
11
- def sandbox_mode=(sandbox_mode)
12
- @sandbox_mode = sandbox_mode
13
- end
14
-
15
15
  def sandbox_mode
16
16
  @sandbox_mode.nil? ? nil : @sandbox_mode.to_json
17
17
  end
18
18
 
19
- def bypass_list_management=(bypass_list_management)
20
- @bypass_list_management = bypass_list_management
21
- end
22
-
23
19
  def bypass_list_management
24
20
  @bypass_list_management.nil? ? nil : @bypass_list_management.to_json
25
21
  end
26
22
 
27
- def footer=(footer)
28
- @footer = footer
29
- end
30
-
31
23
  def footer
32
24
  @footer.nil? ? nil : @footer.to_json
33
25
  end
34
26
 
35
- def bcc=(bcc)
36
- @bcc = bcc
37
- end
38
-
39
27
  def bcc
40
28
  @bcc.nil? ? nil : @bcc.to_json
41
29
  end
42
30
 
43
- def spam_check=(spam_check)
44
- @spam_check = spam_check
45
- end
46
-
47
31
  def spam_check
48
32
  @spam_check.nil? ? nil : @spam_check.to_json
49
33
  end
50
34
 
51
35
  def to_json(*)
52
36
  {
53
- 'bcc' => self.bcc,
54
- 'bypass_list_management' => self.bypass_list_management,
55
- 'footer' => self.footer,
56
- 'sandbox_mode' => self.sandbox_mode,
57
- 'spam_check' => self.spam_check
37
+ 'bcc' => bcc,
38
+ 'bypass_list_management' => bypass_list_management,
39
+ 'footer' => footer,
40
+ 'sandbox_mode' => sandbox_mode,
41
+ 'spam_check' => spam_check
58
42
  }.delete_if { |_, value| value.to_s.strip == '' }
59
43
  end
60
44
  end
@@ -1,30 +1,18 @@
1
+ require 'json'
2
+
1
3
  module SendGrid
2
4
  class OpenTracking
3
- def initialize(enable: nil, substitution_tag: nil)
4
- @enable = enable
5
- @substitution_tag = substitution_tag
6
- end
5
+ attr_accessor :enable, :substitution_tag
7
6
 
8
- def enable=(enable)
7
+ def initialize(enable: nil, substitution_tag: nil)
9
8
  @enable = enable
10
- end
11
-
12
- def enable
13
- @enable
14
- end
15
-
16
- def substitution_tag=(substitution_tag)
17
9
  @substitution_tag = substitution_tag
18
10
  end
19
11
 
20
- def substitution_tag
21
- @substitution_tag
22
- end
23
-
24
12
  def to_json(*)
25
13
  {
26
- 'enable' => self.enable,
27
- 'substitution_tag' => self.substitution_tag
14
+ 'enable' => enable,
15
+ 'substitution_tag' => substitution_tag
28
16
  }.delete_if { |_, value| value.to_s.strip == '' }
29
17
  end
30
18
  end
@@ -1,8 +1,11 @@
1
+ require 'json'
2
+
1
3
  module SendGrid
2
4
  class Personalization
3
-
4
5
  attr_reader :tos, :ccs, :bccs, :headers, :substitutions, :custom_args,
5
- :dynamic_template_data
6
+ :dynamic_template_data
7
+
8
+ attr_accessor :send_at, :subject
6
9
 
7
10
  def initialize
8
11
  @tos = []
@@ -17,23 +20,21 @@ module SendGrid
17
20
  end
18
21
 
19
22
  def add_to(to)
23
+ raise DuplicatePersonalizationError if duplicate?(to)
24
+
20
25
  @tos << to.to_json
21
26
  end
22
27
 
23
28
  def add_cc(cc)
29
+ raise DuplicatePersonalizationError if duplicate?(cc)
30
+
24
31
  @ccs << cc.to_json
25
32
  end
26
33
 
27
34
  def add_bcc(bcc)
28
- @bccs << bcc.to_json
29
- end
30
-
31
- def subject=(subject)
32
- @subject = subject
33
- end
35
+ raise DuplicatePersonalizationError if duplicate?(bcc)
34
36
 
35
- def subject
36
- @subject
37
+ @bccs << bcc.to_json
37
38
  end
38
39
 
39
40
  def add_header(header)
@@ -55,26 +56,32 @@ module SendGrid
55
56
  @dynamic_template_data.merge!(dynamic_template_data)
56
57
  end
57
58
 
58
- def send_at=(send_at)
59
- @send_at = send_at
59
+ def to_json(*)
60
+ {
61
+ 'to' => tos,
62
+ 'cc' => ccs,
63
+ 'bcc' => bccs,
64
+ 'subject' => subject,
65
+ 'headers' => headers,
66
+ 'substitutions' => substitutions,
67
+ 'custom_args' => custom_args,
68
+ 'dynamic_template_data' => dynamic_template_data,
69
+ 'send_at' => send_at
70
+ }.delete_if { |_, value| value.to_s.strip == '' || value == [] || value == {} }
60
71
  end
61
72
 
62
- def send_at
63
- @send_at
64
- end
73
+ private
65
74
 
66
- def to_json(*)
67
- {
68
- 'to' => self.tos,
69
- 'cc' => self.ccs,
70
- 'bcc' => self.bccs,
71
- 'subject' => self.subject,
72
- 'headers' => self.headers,
73
- 'substitutions' => self.substitutions,
74
- 'custom_args' => self.custom_args,
75
- 'dynamic_template_data' => self.dynamic_template_data,
76
- 'send_at' => self.send_at
77
- }.delete_if { |_, value| value.to_s.strip == '' || value == [] || value == {}}
75
+ def duplicate?(addition)
76
+ additional_email = addition.email.downcase
77
+
78
+ [@tos, @ccs, @bccs].flatten.each do |elm|
79
+ return true if elm&.dig('email')&.downcase == additional_email
80
+ end
81
+
82
+ false
78
83
  end
79
84
  end
85
+
86
+ class DuplicatePersonalizationError < StandardError; end
80
87
  end
@@ -1,21 +1,17 @@
1
+ require 'json'
2
+
1
3
  module SendGrid
2
4
  class Section
5
+ attr_accessor :section
6
+
3
7
  def initialize(key: nil, value: nil)
4
8
  @section = {}
5
- (key.nil? || value.nil?) ? @section = nil : @section[key] = value
6
- end
7
-
8
- def section=(section)
9
- @section = section
10
- end
11
-
12
- def section
13
- @section
9
+ key.nil? || value.nil? ? @section = nil : @section[key] = value
14
10
  end
15
11
 
16
12
  def to_json(*)
17
13
  {
18
- 'section' => self.section
14
+ 'section' => section
19
15
  }.delete_if { |_, value| value.to_s.strip == '' }
20
16
  end
21
17
  end
@@ -1,40 +1,20 @@
1
+ require 'json'
2
+
1
3
  module SendGrid
2
4
  class SpamCheck
5
+ attr_accessor :enable, :threshold, :post_to_url
6
+
3
7
  def initialize(enable: nil, threshold: nil, post_to_url: nil)
4
8
  @enable = enable
5
9
  @threshold = threshold
6
10
  @post_to_url = post_to_url
7
11
  end
8
12
 
9
- def enable=(enable)
10
- @enable = enable
11
- end
12
-
13
- def enable
14
- @enable
15
- end
16
-
17
- def threshold=(threshold)
18
- @threshold = threshold
19
- end
20
-
21
- def threshold
22
- @threshold
23
- end
24
-
25
- def post_to_url=(post_to_url)
26
- @post_to_url = post_to_url
27
- end
28
-
29
- def post_to_url
30
- @post_to_url
31
- end
32
-
33
13
  def to_json(*)
34
14
  {
35
- 'enable' => self.enable,
36
- 'threshold' => self.threshold,
37
- 'post_to_url' => self.post_to_url
15
+ 'enable' => enable,
16
+ 'threshold' => threshold,
17
+ 'post_to_url' => post_to_url
38
18
  }.delete_if { |_, value| value.to_s.strip == '' }
39
19
  end
40
20
  end
@@ -1,50 +1,22 @@
1
+ require 'json'
2
+
1
3
  module SendGrid
2
4
  class SubscriptionTracking
3
- def initialize(enable: nil, text: nil, html: nil, substitution_tag: nil)
4
- @enable = enable
5
- @text = text
6
- @html = html
7
- @substitution_tag = substitution_tag
8
- end
5
+ attr_accessor :enable, :text, :html, :substitution_tag
9
6
 
10
- def enable=(enable)
7
+ def initialize(enable: nil, text: nil, html: nil, substitution_tag: nil)
11
8
  @enable = enable
12
- end
13
-
14
- def enable
15
- @enable
16
- end
17
-
18
- def text=(text)
19
9
  @text = text
20
- end
21
-
22
- def text
23
- @text
24
- end
25
-
26
- def html=(html)
27
10
  @html = html
28
- end
29
-
30
- def html
31
- @html
32
- end
33
-
34
- def substitution_tag=(substitution_tag)
35
11
  @substitution_tag = substitution_tag
36
12
  end
37
13
 
38
- def substitution_tag
39
- @substitution_tag
40
- end
41
-
42
14
  def to_json(*)
43
15
  {
44
- 'enable' => self.enable,
45
- 'text' => self.text,
46
- 'html' => self.html,
47
- 'substitution_tag' => self.substitution_tag
16
+ 'enable' => enable,
17
+ 'text' => text,
18
+ 'html' => html,
19
+ 'substitution_tag' => substitution_tag
48
20
  }.delete_if { |_, value| value.to_s.strip == '' }
49
21
  end
50
22
  end
@@ -1,21 +1,17 @@
1
+ require 'json'
2
+
1
3
  module SendGrid
2
4
  class Substitution
5
+ attr_accessor :substitution
6
+
3
7
  def initialize(key: nil, value: nil)
4
8
  @substitution = {}
5
- (key.nil? || value.nil?) ? @substitution = nil : @substitution[key] = value
6
- end
7
-
8
- def substitution=(substitution)
9
- @substitution = substitution
10
- end
11
-
12
- def substitution
13
- @substitution
9
+ key.nil? || value.nil? ? @substitution = nil : @substitution[key] = value
14
10
  end
15
11
 
16
12
  def to_json(*)
17
13
  {
18
- 'substitution' => self.substitution
14
+ 'substitution' => substitution
19
15
  }.delete_if { |_, value| value.to_s.strip == '' }
20
16
  end
21
17
  end
@@ -1,5 +1,9 @@
1
+ require 'json'
2
+
1
3
  module SendGrid
2
4
  class TrackingSettings
5
+ attr_writer :click_tracking, :open_tracking, :subscription_tracking, :ganalytics
6
+
3
7
  def initialize
4
8
  @click_tracking = nil
5
9
  @open_tracking = nil
@@ -7,44 +11,28 @@ module SendGrid
7
11
  @ganalytics = nil
8
12
  end
9
13
 
10
- def click_tracking=(click_tracking)
11
- @click_tracking = click_tracking
12
- end
13
-
14
14
  def click_tracking
15
15
  @click_tracking.nil? ? nil : @click_tracking.to_json
16
16
  end
17
17
 
18
- def open_tracking=(open_tracking)
19
- @open_tracking = open_tracking
20
- end
21
-
22
18
  def open_tracking
23
19
  @open_tracking.nil? ? nil : @open_tracking.to_json
24
20
  end
25
21
 
26
- def subscription_tracking=(subscription_tracking)
27
- @subscription_tracking = subscription_tracking
28
- end
29
-
30
22
  def subscription_tracking
31
23
  @subscription_tracking.nil? ? nil : @subscription_tracking.to_json
32
24
  end
33
25
 
34
- def ganalytics=(ganalytics)
35
- @ganalytics = ganalytics
36
- end
37
-
38
26
  def ganalytics
39
27
  @ganalytics.nil? ? nil : @ganalytics.to_json
40
28
  end
41
29
 
42
30
  def to_json(*)
43
31
  {
44
- 'click_tracking' => self.click_tracking,
45
- 'open_tracking' => self.open_tracking,
46
- 'subscription_tracking' => self.subscription_tracking,
47
- 'ganalytics' => self.ganalytics
32
+ 'click_tracking' => click_tracking,
33
+ 'open_tracking' => open_tracking,
34
+ 'subscription_tracking' => subscription_tracking,
35
+ 'ganalytics' => ganalytics
48
36
  }.delete_if { |_, value| value.to_s.strip == '' }
49
37
  end
50
38
  end
@@ -3,8 +3,8 @@ require 'yaml'
3
3
 
4
4
  module SendGrid
5
5
  class Scope
6
- SCOPES = YAML.load_file(File.dirname(__FILE__) + '/scopes.yml').freeze
7
-
6
+ SCOPES = YAML.load_file("#{File.dirname(__FILE__)}/scopes.yml").freeze
7
+
8
8
  class << self
9
9
  def admin_permissions
10
10
  SCOPES.values.map(&:values).flatten
@@ -8,7 +8,7 @@ module SendGrid
8
8
  attr_accessor :sendgrid_client
9
9
 
10
10
  SETTING_TYPES = [SendGrid::MailSettingsDto, SendGrid::TrackingSettingsDto,
11
- SendGrid::PartnerSettingsDto, SendGrid::UserSettingsDto]
11
+ SendGrid::PartnerSettingsDto, SendGrid::UserSettingsDto].freeze
12
12
 
13
13
  def initialize(sendgrid_client:)
14
14
  @sendgrid_client = sendgrid_client
@@ -1,9 +1,9 @@
1
1
  module SendGrid
2
2
  class TrackingSettingsDto
3
3
  attr_reader :open, :click, :google_analytics, :subscription
4
- alias :click_tracking :click
5
- alias :open_tracking :open
6
- alias :subscription_tracking :subscription
4
+ alias click_tracking click
5
+ alias open_tracking open
6
+ alias subscription_tracking subscription
7
7
 
8
8
  def self.fetch(sendgrid_client:, name:, query_params:)
9
9
  name = scrub_alias_names(name.to_s)
@@ -15,8 +15,6 @@ module SendGrid
15
15
  sendgrid_client.tracking_settings.public_send(name).patch(request_body: request_body)
16
16
  end
17
17
 
18
- private
19
-
20
18
  def self.scrub_alias_names(name)
21
19
  name.gsub(/_tracking/, '')
22
20
  end