sendgrid-ruby 4.0.8 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +21 -0
  3. data/.env_sample +1 -0
  4. data/.github/PULL_REQUEST_TEMPLATE +26 -0
  5. data/.gitignore +1 -0
  6. data/.travis.yml +11 -2
  7. data/CHANGELOG.md +119 -3
  8. data/CODE_OF_CONDUCT.md +41 -0
  9. data/CONTRIBUTING.md +34 -30
  10. data/Gemfile +4 -1
  11. data/LICENSE.txt +1 -1
  12. data/README.md +53 -24
  13. data/Rakefile +7 -2
  14. data/TROUBLESHOOTING.md +41 -15
  15. data/UPGRADE.md +5 -0
  16. data/USAGE.md +1130 -1129
  17. data/USE_CASES.md +280 -16
  18. data/config.ru +4 -0
  19. data/docker/Dockerfile +12 -0
  20. data/docker/README.md +30 -0
  21. data/examples/helpers/mail/example.rb +62 -45
  22. data/examples/helpers/settings/example.rb +23 -0
  23. data/examples/helpers/stats/example.rb +42 -0
  24. data/examples/ips/ips.rb +13 -0
  25. data/examples/mail/mail.rb +2 -2
  26. data/examples/scopes/scopes.rb +49 -3
  27. data/examples/{whitelabel/whitelabel.rb → senderauthentication/senderauthentication.rb} +27 -27
  28. data/examples/suppression/suppression.rb +10 -10
  29. data/gemfiles/Sinatra_1.gemfile +6 -0
  30. data/gemfiles/Sinatra_2.gemfile +6 -0
  31. data/lib/sendgrid-ruby.rb +27 -1
  32. data/lib/sendgrid/client.rb +12 -9
  33. data/lib/sendgrid/helpers/inbound/README.md +98 -0
  34. data/lib/sendgrid/helpers/inbound/app.rb +32 -0
  35. data/lib/sendgrid/helpers/inbound/config.yml +26 -0
  36. data/lib/sendgrid/helpers/inbound/public/index.html +10 -0
  37. data/lib/sendgrid/helpers/inbound/sample_data/default_data.txt +58 -0
  38. data/lib/sendgrid/helpers/inbound/sample_data/raw_data.txt +57 -0
  39. data/lib/sendgrid/helpers/inbound/sample_data/raw_data_with_attachments.txt +298 -0
  40. data/lib/sendgrid/helpers/inbound/send.rb +26 -0
  41. data/lib/sendgrid/helpers/ip_management/ip_management.rb +17 -0
  42. data/lib/sendgrid/helpers/mail/README.md +1 -1
  43. data/lib/sendgrid/helpers/mail/asm.rb +33 -0
  44. data/lib/sendgrid/helpers/mail/attachment.rb +86 -0
  45. data/lib/sendgrid/helpers/mail/bcc_settings.rb +33 -0
  46. data/lib/sendgrid/helpers/mail/bypass_list_management.rb +43 -0
  47. data/lib/sendgrid/helpers/mail/category.rb +20 -0
  48. data/lib/sendgrid/helpers/mail/click_tracking.rb +33 -0
  49. data/lib/sendgrid/helpers/mail/content.rb +20 -0
  50. data/lib/sendgrid/helpers/mail/custom_arg.rb +24 -0
  51. data/lib/sendgrid/helpers/mail/email.rb +29 -0
  52. data/lib/sendgrid/helpers/mail/footer.rb +43 -0
  53. data/lib/sendgrid/helpers/mail/ganalytics.rb +74 -0
  54. data/lib/sendgrid/helpers/mail/header.rb +24 -0
  55. data/lib/sendgrid/helpers/mail/mail.rb +36 -895
  56. data/lib/sendgrid/helpers/mail/mail_settings.rb +63 -0
  57. data/lib/sendgrid/helpers/mail/open_tracking.rb +33 -0
  58. data/lib/sendgrid/helpers/mail/personalization.rb +82 -0
  59. data/lib/sendgrid/helpers/mail/section.rb +24 -0
  60. data/lib/sendgrid/helpers/mail/spam_check.rb +43 -0
  61. data/lib/sendgrid/helpers/mail/subscription_tracking.rb +53 -0
  62. data/lib/sendgrid/helpers/mail/substitution.rb +24 -0
  63. data/lib/sendgrid/helpers/mail/tracking_settings.rb +53 -0
  64. data/lib/sendgrid/helpers/permissions/scope.rb +28 -0
  65. data/lib/sendgrid/helpers/permissions/scopes.yml +309 -0
  66. data/lib/sendgrid/helpers/settings/README.md +14 -0
  67. data/lib/sendgrid/helpers/settings/mail_settings_dto.rb +13 -0
  68. data/lib/sendgrid/helpers/settings/partner_settings_dto.rb +13 -0
  69. data/lib/sendgrid/helpers/settings/settings.rb +28 -0
  70. data/lib/sendgrid/helpers/settings/tracking_settings_dto.rb +24 -0
  71. data/lib/sendgrid/helpers/settings/user_settings_dto.rb +13 -0
  72. data/lib/sendgrid/helpers/stats/email_stats.rb +46 -0
  73. data/lib/sendgrid/helpers/stats/metrics.rb +35 -0
  74. data/lib/sendgrid/helpers/stats/stats_response.rb +31 -0
  75. data/lib/sendgrid/version.rb +2 -2
  76. data/mail_helper_v3.md +390 -0
  77. data/sendgrid-ruby.gemspec +12 -5
  78. data/spec/sendgrid/helpers/ip_management/ip_management_spec.rb +12 -0
  79. data/spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb +32 -0
  80. data/spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb +24 -0
  81. data/spec/sendgrid/helpers/settings/settings_spec.rb +25 -0
  82. data/spec/sendgrid/helpers/settings/tracking_settings_dto_spec.rb +27 -0
  83. data/spec/sendgrid/helpers/settings/user_settings_dto_spec.rb +24 -0
  84. data/spec/sendgrid/helpers/stats/email_stats_spec.rb +112 -0
  85. data/spec/sendgrid/helpers/stats/metrics_spec.rb +46 -0
  86. data/spec/sendgrid/helpers/stats/stats_response_spec.rb +76 -0
  87. data/spec/spec_helper.rb +10 -0
  88. data/test/sendgrid/helpers/mail/test_attachment.rb +35 -0
  89. data/test/sendgrid/helpers/mail/test_category.rb +27 -0
  90. data/test/sendgrid/helpers/mail/test_email.rb +34 -0
  91. data/test/sendgrid/helpers/mail/test_mail.rb +198 -59
  92. data/test/sendgrid/helpers/mail/test_personalizations.rb +161 -0
  93. data/test/sendgrid/permissions/test_scopes.rb +38 -0
  94. data/test/sendgrid/test_sendgrid-ruby.rb +90 -9
  95. metadata +170 -10
@@ -0,0 +1,26 @@
1
+ # A module for sending test Twilio SendGrid Inbound Parse messages
2
+ # Usage: ruby ./send.rb [path to file containing test data]
3
+ require 'ruby_http_client'
4
+ require 'yaml'
5
+ require 'optparse'
6
+
7
+ OPTS = {}
8
+ opt = OptionParser.new
9
+ opt.on('--host=HOST') {|v| OPTS[:host] = v}
10
+ argv = opt.parse!(ARGV)
11
+ config = YAML.load_file(File.dirname(__FILE__) + '/config.yml')
12
+ host = OPTS[:host] || config['host']
13
+ client = SendGrid::Client.new(host: host)
14
+ File.open(argv[0]) do |file|
15
+ data = file.read
16
+ headers = {
17
+ 'User-Agent' => 'Twilio-SendGrid-Test',
18
+ 'Content-Type' => 'multipart/form-data; boundary=xYzZY'
19
+ }
20
+ response = client.post(
21
+ request_body: data, request_headers: headers
22
+ )
23
+ puts response.status_code
24
+ puts response.body
25
+ puts response.headers
26
+ end
@@ -0,0 +1,17 @@
1
+ require 'json'
2
+
3
+ module SendGrid
4
+ class IpManagement
5
+ attr_accessor :sendgrid_client
6
+
7
+ def initialize(sendgrid_client:)
8
+ @sendgrid_client = sendgrid_client
9
+ end
10
+
11
+ def unassigned
12
+ response = @sendgrid_client.ips.get
13
+ ips = JSON.parse(response.body)
14
+ ips.select {|ip| ip.subusers.empty?}
15
+ end
16
+ end
17
+ end
@@ -1,4 +1,4 @@
1
- **This helper allows you to quickly and easily build a Mail object for sending email through SendGrid.**
1
+ **This helper allows you to quickly and easily build a Mail object for sending email through Twilio SendGrid.**
2
2
 
3
3
  # Quick Start
4
4
 
@@ -0,0 +1,33 @@
1
+ require 'json'
2
+
3
+ module SendGrid
4
+ class ASM
5
+ def initialize(group_id: nil, groups_to_display: nil)
6
+ @group_id = group_id
7
+ @groups_to_display = groups_to_display
8
+ end
9
+
10
+ def group_id=(group_id)
11
+ @group_id = group_id
12
+ end
13
+
14
+ def group_id
15
+ @group_id
16
+ end
17
+
18
+ def groups_to_display=(groups_to_display)
19
+ @groups_to_display = groups_to_display
20
+ end
21
+
22
+ def groups_to_display
23
+ @groups_to_display
24
+ end
25
+
26
+ def to_json(*)
27
+ {
28
+ 'group_id' => self.group_id,
29
+ 'groups_to_display' => self.groups_to_display
30
+ }.delete_if { |_, value| value.to_s.strip == '' }
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,86 @@
1
+ require 'json'
2
+ require 'base64'
3
+
4
+ module SendGrid
5
+ class Attachment
6
+ def initialize
7
+ @content = nil
8
+ @type = nil
9
+ @filename = nil
10
+ @disposition = nil
11
+ @content_id = nil
12
+ end
13
+
14
+ def content=(content)
15
+ @encoded_content = nil
16
+ @content = content
17
+ end
18
+
19
+ def content
20
+ return @encoded_content if @encoded_content
21
+
22
+ if @content.respond_to?(:read)
23
+ @encoded_content = encode @content
24
+ else
25
+ @encoded_content = @content
26
+ end
27
+ end
28
+
29
+ def type=(type)
30
+ @type = type
31
+ end
32
+
33
+ def type
34
+ @type
35
+ end
36
+
37
+ def filename=(filename)
38
+ @filename = filename
39
+ end
40
+
41
+ def filename
42
+ @filename
43
+ end
44
+
45
+ def disposition=(disposition)
46
+ @disposition = disposition
47
+ end
48
+
49
+ def disposition
50
+ @disposition
51
+ end
52
+
53
+ def content_id=(content_id)
54
+ @content_id = content_id
55
+ end
56
+
57
+ def content_id
58
+ @content_id
59
+ end
60
+
61
+ def to_json(*)
62
+ {
63
+ 'content' => self.content,
64
+ 'type' => self.type,
65
+ 'filename' => self.filename,
66
+ 'disposition' => self.disposition,
67
+ 'content_id' => self.content_id
68
+ }.delete_if { |_, value| value.to_s.strip == '' }
69
+ end
70
+
71
+ private
72
+
73
+ def encode(io)
74
+ str = io.read
75
+ # Since the API expects UTF-8, we need to ensure that we're
76
+ # converting other formats to it so (byte-wise) Base64 encoding
77
+ # will come through properly on the other side.
78
+ #
79
+ # Not much to be done to try to handle encoding for files opened
80
+ # in binary mode, but at least we can faithfully convey the
81
+ # bytes.
82
+ str = str.encode('UTF-8') unless io.respond_to?(:binmode?) && io.binmode?
83
+ Base64.encode64 str
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,33 @@
1
+ require 'json'
2
+
3
+ module SendGrid
4
+ class BccSettings
5
+ def initialize(enable: nil, email: nil)
6
+ @enable = enable
7
+ @email = email
8
+ end
9
+
10
+ def enable=(enable)
11
+ @enable = enable
12
+ end
13
+
14
+ def enable
15
+ @enable
16
+ end
17
+
18
+ def email=(email)
19
+ @email = email
20
+ end
21
+
22
+ def email
23
+ @email
24
+ end
25
+
26
+ def to_json(*)
27
+ {
28
+ 'enable' => self.enable,
29
+ 'email' => self.email
30
+ }.delete_if { |_, value| value.to_s.strip == '' }
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,43 @@
1
+ require 'json'
2
+
3
+ module SendGrid
4
+ class BypassListManagement
5
+ def initialize(enable: nil)
6
+ @enable = enable
7
+ end
8
+
9
+ def enable=(enable)
10
+ @enable = enable
11
+ end
12
+
13
+ def enable
14
+ @enable
15
+ end
16
+
17
+ def to_json(*)
18
+ {
19
+ 'enable' => self.enable
20
+ }.delete_if { |_, value| value.to_s.strip == '' }
21
+ end
22
+ end
23
+
24
+ class SandBoxMode
25
+ def initialize(enable: nil)
26
+ @enable = enable
27
+ end
28
+
29
+ def enable=(enable)
30
+ @enable = enable
31
+ end
32
+
33
+ def enable
34
+ @enable
35
+ end
36
+
37
+ def to_json(*)
38
+ {
39
+ 'enable' => self.enable
40
+ }.delete_if { |_, value| value.to_s.strip == '' }
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,20 @@
1
+ require 'json'
2
+
3
+ module SendGrid
4
+ class Category
5
+ attr_accessor :name
6
+
7
+ def initialize(name: nil)
8
+ @name = name
9
+ end
10
+
11
+ def to_json(*)
12
+ {
13
+ 'category' => name
14
+ }.delete_if { |_, value| value.to_s.strip == '' }
15
+ end
16
+
17
+ alias :category :name
18
+ alias :category= :name=
19
+ end
20
+ end
@@ -0,0 +1,33 @@
1
+ require 'json'
2
+
3
+ module SendGrid
4
+ class ClickTracking
5
+ def initialize(enable: nil, enable_text: nil)
6
+ @enable = enable
7
+ @enable_text = enable_text
8
+ end
9
+
10
+ def enable=(enable)
11
+ @enable = enable
12
+ end
13
+
14
+ def enable
15
+ @enable
16
+ end
17
+
18
+ def enable_text=(enable_text)
19
+ @enable_text = enable_text
20
+ end
21
+
22
+ def enable_text
23
+ @enable_text
24
+ end
25
+
26
+ def to_json(*)
27
+ {
28
+ 'enable' => self.enable,
29
+ 'enable_text' => self.enable_text
30
+ }.delete_if { |_, value| value.to_s.strip == '' }
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,20 @@
1
+ require 'json'
2
+
3
+ module SendGrid
4
+ class Content
5
+
6
+ attr_accessor :type, :value
7
+
8
+ def initialize(type: nil, value: nil)
9
+ @type = type
10
+ @value = value
11
+ end
12
+
13
+ def to_json(*)
14
+ {
15
+ 'type' => self.type,
16
+ 'value' => self.value
17
+ }.delete_if { |_, value| value.to_s.strip == '' }
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ require 'json'
2
+
3
+ module SendGrid
4
+ class CustomArg
5
+ def initialize(key: nil, value: nil)
6
+ @custom_arg = {}
7
+ (key.nil? || value.nil?) ? @custom_arg = nil : @custom_arg[key.to_s] = value.to_s
8
+ end
9
+
10
+ def custom_arg=(custom_arg)
11
+ @custom_arg = custom_arg
12
+ end
13
+
14
+ def custom_arg
15
+ @custom_arg
16
+ end
17
+
18
+ def to_json(*)
19
+ {
20
+ 'custom_arg' => self.custom_arg
21
+ }.delete_if { |_, value| value.to_s.strip == '' }
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,29 @@
1
+ require 'json'
2
+
3
+ module SendGrid
4
+ class Email
5
+
6
+ attr_accessor :email, :name
7
+
8
+ def initialize(email: nil, name: nil)
9
+ if name
10
+ @email = email
11
+ @name = name
12
+ else
13
+ @email, @name = split_email(email)
14
+ end
15
+ end
16
+
17
+ def split_email(email)
18
+ split = /(?:(?<address>.+)\s)?<?(?<email>.+@[^>]+)>?/.match(email)
19
+ return split[:email], split[:address]
20
+ end
21
+
22
+ def to_json(*)
23
+ {
24
+ 'email' => self.email,
25
+ 'name' => self.name
26
+ }.delete_if { |_, value| value.to_s.strip == '' }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,43 @@
1
+ require 'json'
2
+
3
+ module SendGrid
4
+ class Footer
5
+ def initialize(enable: nil, text: nil, html: nil)
6
+ @enable = enable
7
+ @text = text
8
+ @html = html
9
+ end
10
+
11
+ def enable=(enable)
12
+ @enable = enable
13
+ end
14
+
15
+ def enable
16
+ @enable
17
+ end
18
+
19
+ def text=(text)
20
+ @text = text
21
+ end
22
+
23
+ def text
24
+ @text
25
+ end
26
+
27
+ def html=(html)
28
+ @html = html
29
+ end
30
+
31
+ def html
32
+ @html
33
+ end
34
+
35
+ def to_json(*)
36
+ {
37
+ 'enable' => self.enable,
38
+ 'text' => self.text,
39
+ 'html' => self.html
40
+ }.delete_if { |_, value| value.to_s.strip == '' }
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,74 @@
1
+ require 'json'
2
+
3
+ module SendGrid
4
+ class Ganalytics
5
+ def initialize(enable: nil, utm_source: nil, utm_medium: nil, utm_term: nil, utm_content: nil, utm_campaign: nil, utm_name: nil)
6
+ @enable = enable
7
+ @utm_source = utm_source
8
+ @utm_medium = utm_medium
9
+ @utm_term = utm_term
10
+ @utm_content = utm_content
11
+ @utm_campaign = utm_campaign
12
+ @utm_name = utm_name
13
+ end
14
+
15
+ def enable=(enable)
16
+ @enable = enable
17
+ end
18
+
19
+ def enable
20
+ @enable
21
+ end
22
+
23
+ def utm_source=(utm_source)
24
+ @utm_source = utm_source
25
+ end
26
+
27
+ def utm_source
28
+ @utm_source
29
+ end
30
+
31
+ def utm_medium=(utm_medium)
32
+ @utm_medium = utm_medium
33
+ end
34
+
35
+ def utm_medium
36
+ @utm_medium
37
+ end
38
+
39
+ def utm_term=(utm_term)
40
+ @utm_term = utm_term
41
+ end
42
+
43
+ def utm_term
44
+ @utm_term
45
+ end
46
+
47
+ def utm_content=(utm_content)
48
+ @utm_content = utm_content
49
+ end
50
+
51
+ def utm_content
52
+ @utm_content
53
+ end
54
+
55
+ def utm_campaign=(utm_campaign)
56
+ @utm_campaign = utm_campaign
57
+ end
58
+
59
+ def utm_campaign
60
+ @utm_campaign
61
+ end
62
+
63
+ def to_json(*)
64
+ {
65
+ 'enable' => self.enable,
66
+ 'utm_source' => self.utm_source,
67
+ 'utm_medium' => self.utm_medium,
68
+ 'utm_term' => self.utm_term,
69
+ 'utm_content' => self.utm_content,
70
+ 'utm_campaign' => self.utm_campaign
71
+ }.delete_if { |_, value| value.to_s.strip == '' }
72
+ end
73
+ end
74
+ end