sendgrid-ruby 4.0.8 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.codeclimate.yml +21 -0
- data/.env_sample +1 -0
- data/.github/PULL_REQUEST_TEMPLATE +26 -0
- data/.gitignore +1 -0
- data/.travis.yml +11 -2
- data/CHANGELOG.md +119 -3
- data/CODE_OF_CONDUCT.md +41 -0
- data/CONTRIBUTING.md +34 -30
- data/Gemfile +4 -1
- data/LICENSE.txt +1 -1
- data/README.md +53 -24
- data/Rakefile +7 -2
- data/TROUBLESHOOTING.md +41 -15
- data/UPGRADE.md +5 -0
- data/USAGE.md +1130 -1129
- data/USE_CASES.md +280 -16
- data/config.ru +4 -0
- data/docker/Dockerfile +12 -0
- data/docker/README.md +30 -0
- data/examples/helpers/mail/example.rb +62 -45
- data/examples/helpers/settings/example.rb +23 -0
- data/examples/helpers/stats/example.rb +42 -0
- data/examples/ips/ips.rb +13 -0
- data/examples/mail/mail.rb +2 -2
- data/examples/scopes/scopes.rb +49 -3
- data/examples/{whitelabel/whitelabel.rb → senderauthentication/senderauthentication.rb} +27 -27
- data/examples/suppression/suppression.rb +10 -10
- data/gemfiles/Sinatra_1.gemfile +6 -0
- data/gemfiles/Sinatra_2.gemfile +6 -0
- data/lib/sendgrid-ruby.rb +27 -1
- data/lib/sendgrid/client.rb +12 -9
- data/lib/sendgrid/helpers/inbound/README.md +98 -0
- data/lib/sendgrid/helpers/inbound/app.rb +32 -0
- data/lib/sendgrid/helpers/inbound/config.yml +26 -0
- data/lib/sendgrid/helpers/inbound/public/index.html +10 -0
- data/lib/sendgrid/helpers/inbound/sample_data/default_data.txt +58 -0
- data/lib/sendgrid/helpers/inbound/sample_data/raw_data.txt +57 -0
- data/lib/sendgrid/helpers/inbound/sample_data/raw_data_with_attachments.txt +298 -0
- data/lib/sendgrid/helpers/inbound/send.rb +26 -0
- data/lib/sendgrid/helpers/ip_management/ip_management.rb +17 -0
- data/lib/sendgrid/helpers/mail/README.md +1 -1
- data/lib/sendgrid/helpers/mail/asm.rb +33 -0
- data/lib/sendgrid/helpers/mail/attachment.rb +86 -0
- data/lib/sendgrid/helpers/mail/bcc_settings.rb +33 -0
- data/lib/sendgrid/helpers/mail/bypass_list_management.rb +43 -0
- data/lib/sendgrid/helpers/mail/category.rb +20 -0
- data/lib/sendgrid/helpers/mail/click_tracking.rb +33 -0
- data/lib/sendgrid/helpers/mail/content.rb +20 -0
- data/lib/sendgrid/helpers/mail/custom_arg.rb +24 -0
- data/lib/sendgrid/helpers/mail/email.rb +29 -0
- data/lib/sendgrid/helpers/mail/footer.rb +43 -0
- data/lib/sendgrid/helpers/mail/ganalytics.rb +74 -0
- data/lib/sendgrid/helpers/mail/header.rb +24 -0
- data/lib/sendgrid/helpers/mail/mail.rb +36 -895
- data/lib/sendgrid/helpers/mail/mail_settings.rb +63 -0
- data/lib/sendgrid/helpers/mail/open_tracking.rb +33 -0
- data/lib/sendgrid/helpers/mail/personalization.rb +82 -0
- data/lib/sendgrid/helpers/mail/section.rb +24 -0
- data/lib/sendgrid/helpers/mail/spam_check.rb +43 -0
- data/lib/sendgrid/helpers/mail/subscription_tracking.rb +53 -0
- data/lib/sendgrid/helpers/mail/substitution.rb +24 -0
- data/lib/sendgrid/helpers/mail/tracking_settings.rb +53 -0
- data/lib/sendgrid/helpers/permissions/scope.rb +28 -0
- data/lib/sendgrid/helpers/permissions/scopes.yml +309 -0
- data/lib/sendgrid/helpers/settings/README.md +14 -0
- data/lib/sendgrid/helpers/settings/mail_settings_dto.rb +13 -0
- data/lib/sendgrid/helpers/settings/partner_settings_dto.rb +13 -0
- data/lib/sendgrid/helpers/settings/settings.rb +28 -0
- data/lib/sendgrid/helpers/settings/tracking_settings_dto.rb +24 -0
- data/lib/sendgrid/helpers/settings/user_settings_dto.rb +13 -0
- data/lib/sendgrid/helpers/stats/email_stats.rb +46 -0
- data/lib/sendgrid/helpers/stats/metrics.rb +35 -0
- data/lib/sendgrid/helpers/stats/stats_response.rb +31 -0
- data/lib/sendgrid/version.rb +2 -2
- data/mail_helper_v3.md +390 -0
- data/sendgrid-ruby.gemspec +12 -5
- data/spec/sendgrid/helpers/ip_management/ip_management_spec.rb +12 -0
- data/spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb +32 -0
- data/spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb +24 -0
- data/spec/sendgrid/helpers/settings/settings_spec.rb +25 -0
- data/spec/sendgrid/helpers/settings/tracking_settings_dto_spec.rb +27 -0
- data/spec/sendgrid/helpers/settings/user_settings_dto_spec.rb +24 -0
- data/spec/sendgrid/helpers/stats/email_stats_spec.rb +112 -0
- data/spec/sendgrid/helpers/stats/metrics_spec.rb +46 -0
- data/spec/sendgrid/helpers/stats/stats_response_spec.rb +76 -0
- data/spec/spec_helper.rb +10 -0
- data/test/sendgrid/helpers/mail/test_attachment.rb +35 -0
- data/test/sendgrid/helpers/mail/test_category.rb +27 -0
- data/test/sendgrid/helpers/mail/test_email.rb +34 -0
- data/test/sendgrid/helpers/mail/test_mail.rb +198 -59
- data/test/sendgrid/helpers/mail/test_personalizations.rb +161 -0
- data/test/sendgrid/permissions/test_scopes.rb +38 -0
- data/test/sendgrid/test_sendgrid-ruby.rb +90 -9
- metadata +170 -10
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module SendGrid
|
|
4
|
+
class Header
|
|
5
|
+
def initialize(key: nil, value: nil)
|
|
6
|
+
@header = {}
|
|
7
|
+
(key.nil? || value.nil?) ? @header = nil : @header[key] = value
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def header=(header)
|
|
11
|
+
@header = header
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def header
|
|
15
|
+
@header
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def to_json(*)
|
|
19
|
+
{
|
|
20
|
+
'header' => self.header
|
|
21
|
+
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -3,812 +3,22 @@
|
|
|
3
3
|
require 'json'
|
|
4
4
|
|
|
5
5
|
module SendGrid
|
|
6
|
-
class
|
|
7
|
-
def initialize(enable: nil, utm_source: nil, utm_medium: nil, utm_term: nil, utm_content: nil, utm_campaign: nil, utm_name: nil)
|
|
8
|
-
@enable = enable
|
|
9
|
-
@utm_source = utm_source
|
|
10
|
-
@utm_medium = utm_medium
|
|
11
|
-
@utm_term = utm_term
|
|
12
|
-
@utm_content = utm_content
|
|
13
|
-
@utm_campaign = utm_campaign
|
|
14
|
-
@utm_name = utm_name
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def enable=(enable)
|
|
18
|
-
@enable = enable
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def enable
|
|
22
|
-
@enable
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def utm_source=(utm_source)
|
|
26
|
-
@utm_source = utm_source
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def utm_source
|
|
30
|
-
@utm_source
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def utm_medium=(utm_medium)
|
|
34
|
-
@utm_medium = utm_medium
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def utm_medium
|
|
38
|
-
@utm_medium
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def utm_term=(utm_term)
|
|
42
|
-
@utm_term = utm_term
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def utm_term
|
|
46
|
-
@utm_term
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def utm_content=(utm_content)
|
|
50
|
-
@utm_content = utm_content
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def utm_content
|
|
54
|
-
@utm_content
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def utm_campaign=(utm_campaign)
|
|
58
|
-
@utm_campaign = utm_campaign
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def utm_campaign
|
|
62
|
-
@utm_campaign
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def to_json(*)
|
|
66
|
-
{
|
|
67
|
-
'enable' => self.enable,
|
|
68
|
-
'utm_source' => self.utm_source,
|
|
69
|
-
'utm_medium' => self.utm_medium,
|
|
70
|
-
'utm_term' => self.utm_term,
|
|
71
|
-
'utm_content' => self.utm_content,
|
|
72
|
-
'utm_campaign' => self.utm_campaign
|
|
73
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
class SubscriptionTracking
|
|
78
|
-
def initialize(enable: nil, text: nil, html: nil, substitution_tag: nil)
|
|
79
|
-
@enable = enable
|
|
80
|
-
@text = text
|
|
81
|
-
@html = html
|
|
82
|
-
@substitution_tag = substitution_tag
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def enable=(enable)
|
|
86
|
-
@enable = enable
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def enable
|
|
90
|
-
@enable
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def text=(text)
|
|
94
|
-
@text = text
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def text
|
|
98
|
-
@text
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def html=(html)
|
|
102
|
-
@html = html
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def html
|
|
106
|
-
@html
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def substitution_tag=(substitution_tag)
|
|
110
|
-
@substitution_tag = substitution_tag
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
def substitution_tag
|
|
114
|
-
@substitution_tag
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
def to_json(*)
|
|
118
|
-
{
|
|
119
|
-
'enable' => self.enable,
|
|
120
|
-
'text' => self.text,
|
|
121
|
-
'html' => self.html,
|
|
122
|
-
'substitution_tag' => self.substitution_tag
|
|
123
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
class OpenTracking
|
|
128
|
-
def initialize(enable: nil, substitution_tag: nil)
|
|
129
|
-
@enable = enable
|
|
130
|
-
@substitution_tag = substitution_tag
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
def enable=(enable)
|
|
134
|
-
@enable = enable
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
def enable
|
|
138
|
-
@enable
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
def substitution_tag=(substitution_tag)
|
|
142
|
-
@substitution_tag = substitution_tag
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def substitution_tag
|
|
146
|
-
@substitution_tag
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
def to_json(*)
|
|
150
|
-
{
|
|
151
|
-
'enable' => self.enable,
|
|
152
|
-
'substitution_tag' => self.substitution_tag
|
|
153
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
class ClickTracking
|
|
158
|
-
def initialize(enable: nil, enable_text: nil)
|
|
159
|
-
@enable = enable
|
|
160
|
-
@enable_text = enable_text
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
def enable=(enable)
|
|
164
|
-
@enable = enable
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
def enable
|
|
168
|
-
@enable
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
def enable_text=(enable_text)
|
|
172
|
-
@enable_text = enable_text
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
def enable_text
|
|
176
|
-
@enable_text
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
def to_json(*)
|
|
180
|
-
{
|
|
181
|
-
'enable' => self.enable,
|
|
182
|
-
'enable_text' => self.enable_text
|
|
183
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
class TrackingSettings
|
|
188
|
-
def initialize
|
|
189
|
-
@click_tracking = nil
|
|
190
|
-
@open_tracking = nil
|
|
191
|
-
@subscription_tracking = nil
|
|
192
|
-
@ganalytics = nil
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
def click_tracking=(click_tracking)
|
|
196
|
-
@click_tracking = click_tracking
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
def click_tracking
|
|
200
|
-
@click_tracking.nil? ? nil : @click_tracking.to_json
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
def open_tracking=(open_tracking)
|
|
204
|
-
@open_tracking = open_tracking
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
def open_tracking
|
|
208
|
-
@open_tracking.nil? ? nil : @open_tracking.to_json
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
def subscription_tracking=(subscription_tracking)
|
|
212
|
-
@subscription_tracking = subscription_tracking
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
def subscription_tracking
|
|
216
|
-
@subscription_tracking.nil? ? nil : @subscription_tracking.to_json
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
def ganalytics=(ganalytics)
|
|
220
|
-
@ganalytics = ganalytics
|
|
221
|
-
end
|
|
222
|
-
|
|
223
|
-
def ganalytics
|
|
224
|
-
@ganalytics.nil? ? nil : @ganalytics.to_json
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
def to_json(*)
|
|
228
|
-
{
|
|
229
|
-
'click_tracking' => self.click_tracking,
|
|
230
|
-
'open_tracking' => self.open_tracking,
|
|
231
|
-
'subscription_tracking' => self.subscription_tracking,
|
|
232
|
-
'ganalytics' => self.ganalytics
|
|
233
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
234
|
-
end
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
class SpamCheck
|
|
238
|
-
def initialize(enable: nil, threshold: nil, post_to_url: nil)
|
|
239
|
-
@enable = enable
|
|
240
|
-
@threshold = threshold
|
|
241
|
-
@post_to_url = post_to_url
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
def enable=(enable)
|
|
245
|
-
@enable = enable
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
def enable
|
|
249
|
-
@enable
|
|
250
|
-
end
|
|
251
|
-
|
|
252
|
-
def threshold=(threshold)
|
|
253
|
-
@threshold = threshold
|
|
254
|
-
end
|
|
255
|
-
|
|
256
|
-
def threshold
|
|
257
|
-
@threshold
|
|
258
|
-
end
|
|
259
|
-
|
|
260
|
-
def post_to_url=(post_to_url)
|
|
261
|
-
@post_to_url = post_to_url
|
|
262
|
-
end
|
|
263
|
-
|
|
264
|
-
def post_to_url
|
|
265
|
-
@post_to_url
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
def to_json(*)
|
|
269
|
-
{
|
|
270
|
-
'enable' => self.enable,
|
|
271
|
-
'threshold' => self.threshold,
|
|
272
|
-
'post_to_url' => self.post_to_url
|
|
273
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
274
|
-
end
|
|
275
|
-
end
|
|
276
|
-
|
|
277
|
-
class Footer
|
|
278
|
-
def initialize(enable: nil, text: nil, html: nil)
|
|
279
|
-
@enable = enable
|
|
280
|
-
@text = text
|
|
281
|
-
@html = html
|
|
282
|
-
end
|
|
283
|
-
|
|
284
|
-
def enable=(enable)
|
|
285
|
-
@enable = enable
|
|
286
|
-
end
|
|
287
|
-
|
|
288
|
-
def enable
|
|
289
|
-
@enable
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
def text=(text)
|
|
293
|
-
@text = text
|
|
294
|
-
end
|
|
295
|
-
|
|
296
|
-
def text
|
|
297
|
-
@text
|
|
298
|
-
end
|
|
299
|
-
|
|
300
|
-
def html=(html)
|
|
301
|
-
@html = html
|
|
302
|
-
end
|
|
303
|
-
|
|
304
|
-
def html
|
|
305
|
-
@html
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
def to_json(*)
|
|
309
|
-
{
|
|
310
|
-
'enable' => self.enable,
|
|
311
|
-
'text' => self.text,
|
|
312
|
-
'html' => self.html
|
|
313
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
314
|
-
end
|
|
315
|
-
end
|
|
316
|
-
|
|
317
|
-
class BccSettings
|
|
318
|
-
def initialize(enable: nil, email: nil)
|
|
319
|
-
@enable = enable
|
|
320
|
-
@email = email
|
|
321
|
-
end
|
|
322
|
-
|
|
323
|
-
def enable=(enable)
|
|
324
|
-
@enable = enable
|
|
325
|
-
end
|
|
326
|
-
|
|
327
|
-
def enable
|
|
328
|
-
@enable
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
def email=(email)
|
|
332
|
-
@email = email
|
|
333
|
-
end
|
|
334
|
-
|
|
335
|
-
def email
|
|
336
|
-
@email
|
|
337
|
-
end
|
|
338
|
-
|
|
339
|
-
def to_json(*)
|
|
340
|
-
{
|
|
341
|
-
'enable' => self.enable,
|
|
342
|
-
'email' => self.email
|
|
343
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
344
|
-
end
|
|
345
|
-
end
|
|
346
|
-
|
|
347
|
-
class BypassListManagement
|
|
348
|
-
def initialize(enable: nil)
|
|
349
|
-
@enable = enable
|
|
350
|
-
end
|
|
351
|
-
|
|
352
|
-
def enable=(enable)
|
|
353
|
-
@enable = enable
|
|
354
|
-
end
|
|
355
|
-
|
|
356
|
-
def enable
|
|
357
|
-
@enable
|
|
358
|
-
end
|
|
359
|
-
|
|
360
|
-
def to_json(*)
|
|
361
|
-
{
|
|
362
|
-
'enable' => self.enable
|
|
363
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
364
|
-
end
|
|
365
|
-
end
|
|
366
|
-
|
|
367
|
-
class SandBoxMode
|
|
368
|
-
def initialize(enable: nil)
|
|
369
|
-
@enable = enable
|
|
370
|
-
end
|
|
371
|
-
|
|
372
|
-
def enable=(enable)
|
|
373
|
-
@enable = enable
|
|
374
|
-
end
|
|
375
|
-
|
|
376
|
-
def enable
|
|
377
|
-
@enable
|
|
378
|
-
end
|
|
379
|
-
|
|
380
|
-
def to_json(*)
|
|
381
|
-
{
|
|
382
|
-
'enable' => self.enable
|
|
383
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
384
|
-
end
|
|
385
|
-
end
|
|
386
|
-
|
|
387
|
-
class MailSettings
|
|
388
|
-
def initilize
|
|
389
|
-
@bcc = nil
|
|
390
|
-
@bypass_list_management = nil
|
|
391
|
-
@footer = nil
|
|
392
|
-
@sandbox_mode = nil
|
|
393
|
-
@spam_check = nil
|
|
394
|
-
end
|
|
395
|
-
|
|
396
|
-
def sandbox_mode=(sandbox_mode)
|
|
397
|
-
@sandbox_mode = sandbox_mode
|
|
398
|
-
end
|
|
399
|
-
|
|
400
|
-
def sandbox_mode
|
|
401
|
-
@sandbox_mode.nil? ? nil : @sandbox_mode.to_json
|
|
402
|
-
end
|
|
403
|
-
|
|
404
|
-
def bypass_list_management=(bypass_list_management)
|
|
405
|
-
@bypass_list_management = bypass_list_management
|
|
406
|
-
end
|
|
407
|
-
|
|
408
|
-
def bypass_list_management
|
|
409
|
-
@bypass_list_management.nil? ? nil : @bypass_list_management.to_json
|
|
410
|
-
end
|
|
411
|
-
|
|
412
|
-
def footer=(footer)
|
|
413
|
-
@footer = footer
|
|
414
|
-
end
|
|
415
|
-
|
|
416
|
-
def footer
|
|
417
|
-
@footer.nil? ? nil : @footer.to_json
|
|
418
|
-
end
|
|
419
|
-
|
|
420
|
-
def bcc=(bcc)
|
|
421
|
-
@bcc = bcc
|
|
422
|
-
end
|
|
423
|
-
|
|
424
|
-
def bcc
|
|
425
|
-
@bcc.nil? ? nil : @bcc.to_json
|
|
426
|
-
end
|
|
427
|
-
|
|
428
|
-
def spam_check=(spam_check)
|
|
429
|
-
@spam_check = spam_check
|
|
430
|
-
end
|
|
431
|
-
|
|
432
|
-
def spam_check
|
|
433
|
-
@spam_check.nil? ? nil : @spam_check.to_json
|
|
434
|
-
end
|
|
435
|
-
|
|
436
|
-
def to_json(*)
|
|
437
|
-
{
|
|
438
|
-
'bcc' => self.bcc,
|
|
439
|
-
'bypass_list_management' => self.bypass_list_management,
|
|
440
|
-
'footer' => self.footer,
|
|
441
|
-
'sandbox_mode' => self.sandbox_mode,
|
|
442
|
-
'spam_check' => self.spam_check
|
|
443
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
444
|
-
end
|
|
445
|
-
end
|
|
446
|
-
|
|
447
|
-
class ASM
|
|
448
|
-
def initialize(group_id: nil, groups_to_display: nil)
|
|
449
|
-
@group_id = group_id
|
|
450
|
-
@groups_to_display = groups_to_display
|
|
451
|
-
end
|
|
452
|
-
|
|
453
|
-
def group_id=(group_id)
|
|
454
|
-
@group_id = group_id
|
|
455
|
-
end
|
|
456
|
-
|
|
457
|
-
def group_id
|
|
458
|
-
@group_id
|
|
459
|
-
end
|
|
460
|
-
|
|
461
|
-
def groups_to_display=(groups_to_display)
|
|
462
|
-
@groups_to_display = groups_to_display
|
|
463
|
-
end
|
|
464
|
-
|
|
465
|
-
def groups_to_display
|
|
466
|
-
@groups_to_display
|
|
467
|
-
end
|
|
468
|
-
|
|
469
|
-
def to_json(*)
|
|
470
|
-
{
|
|
471
|
-
'group_id' => self.group_id,
|
|
472
|
-
'groups_to_display' => self.groups_to_display
|
|
473
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
474
|
-
end
|
|
475
|
-
end
|
|
476
|
-
|
|
477
|
-
class Category
|
|
478
|
-
def initialize(name: nil)
|
|
479
|
-
@category = name
|
|
480
|
-
end
|
|
481
|
-
|
|
482
|
-
def category=(category)
|
|
483
|
-
@category = category
|
|
484
|
-
end
|
|
485
|
-
|
|
486
|
-
def category
|
|
487
|
-
@category
|
|
488
|
-
end
|
|
489
|
-
|
|
490
|
-
def to_json(*)
|
|
491
|
-
{
|
|
492
|
-
'category' => self.category
|
|
493
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
494
|
-
end
|
|
495
|
-
end
|
|
496
|
-
|
|
497
|
-
class Section
|
|
498
|
-
def initialize(key: nil, value: nil)
|
|
499
|
-
@section = {}
|
|
500
|
-
(key.nil? || value.nil?) ? @section = nil : @section[key] = value
|
|
501
|
-
end
|
|
502
|
-
|
|
503
|
-
def section=(section)
|
|
504
|
-
@section = section
|
|
505
|
-
end
|
|
506
|
-
|
|
507
|
-
def section
|
|
508
|
-
@section
|
|
509
|
-
end
|
|
510
|
-
|
|
511
|
-
def to_json(*)
|
|
512
|
-
{
|
|
513
|
-
'section' => self.section
|
|
514
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
515
|
-
end
|
|
516
|
-
end
|
|
517
|
-
|
|
518
|
-
class Attachment
|
|
519
|
-
def initialize
|
|
520
|
-
@content = nil
|
|
521
|
-
@type = nil
|
|
522
|
-
@filename = nil
|
|
523
|
-
@disposition = nil
|
|
524
|
-
@content_id = nil
|
|
525
|
-
end
|
|
526
|
-
|
|
527
|
-
def content=(content)
|
|
528
|
-
@content = content
|
|
529
|
-
end
|
|
530
|
-
|
|
531
|
-
def content
|
|
532
|
-
@content
|
|
533
|
-
end
|
|
534
|
-
|
|
535
|
-
def type=(type)
|
|
536
|
-
@type = type
|
|
537
|
-
end
|
|
538
|
-
|
|
539
|
-
def type
|
|
540
|
-
@type
|
|
541
|
-
end
|
|
542
|
-
|
|
543
|
-
def filename=(filename)
|
|
544
|
-
@filename = filename
|
|
545
|
-
end
|
|
546
|
-
|
|
547
|
-
def filename
|
|
548
|
-
@filename
|
|
549
|
-
end
|
|
550
|
-
|
|
551
|
-
def disposition=(disposition)
|
|
552
|
-
@disposition = disposition
|
|
553
|
-
end
|
|
554
|
-
|
|
555
|
-
def disposition
|
|
556
|
-
@disposition
|
|
557
|
-
end
|
|
558
|
-
|
|
559
|
-
def content_id=(content_id)
|
|
560
|
-
@content_id = content_id
|
|
561
|
-
end
|
|
562
|
-
|
|
563
|
-
def content_id
|
|
564
|
-
@content_id
|
|
565
|
-
end
|
|
566
|
-
|
|
567
|
-
def to_json(*)
|
|
568
|
-
{
|
|
569
|
-
'content' => self.content,
|
|
570
|
-
'type' => self.type,
|
|
571
|
-
'filename' => self.filename,
|
|
572
|
-
'disposition' => self.disposition,
|
|
573
|
-
'content_id' => self.content_id
|
|
574
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
575
|
-
end
|
|
576
|
-
end
|
|
577
|
-
|
|
578
|
-
class Header
|
|
579
|
-
def initialize(key: nil, value: nil)
|
|
580
|
-
@header = {}
|
|
581
|
-
(key.nil? || value.nil?) ? @header = nil : @header[key] = value
|
|
582
|
-
end
|
|
583
|
-
|
|
584
|
-
def header=(header)
|
|
585
|
-
@header = header
|
|
586
|
-
end
|
|
587
|
-
|
|
588
|
-
def header
|
|
589
|
-
@header
|
|
590
|
-
end
|
|
591
|
-
|
|
592
|
-
def to_json(*)
|
|
593
|
-
{
|
|
594
|
-
'header' => self.header
|
|
595
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
596
|
-
end
|
|
597
|
-
end
|
|
598
|
-
|
|
599
|
-
class Substitution
|
|
600
|
-
def initialize(key: nil, value: nil)
|
|
601
|
-
@substitution = {}
|
|
602
|
-
(key.nil? || value.nil?) ? @substitution = nil : @substitution[key] = value
|
|
603
|
-
end
|
|
604
|
-
|
|
605
|
-
def substitution=(substitution)
|
|
606
|
-
@substitution = substitution
|
|
607
|
-
end
|
|
608
|
-
|
|
609
|
-
def substitution
|
|
610
|
-
@substitution
|
|
611
|
-
end
|
|
612
|
-
|
|
613
|
-
def to_json(*)
|
|
614
|
-
{
|
|
615
|
-
'substitution' => self.substitution
|
|
616
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
617
|
-
end
|
|
618
|
-
end
|
|
619
|
-
|
|
620
|
-
class CustomArg
|
|
621
|
-
def initialize(key: nil, value: nil)
|
|
622
|
-
@custom_arg = {}
|
|
623
|
-
(key.nil? || value.nil?) ? @custom_arg = nil : @custom_arg[key] = value
|
|
624
|
-
end
|
|
625
|
-
|
|
626
|
-
def custom_arg=(custom_arg)
|
|
627
|
-
@custom_arg = custom_arg
|
|
628
|
-
end
|
|
629
|
-
|
|
630
|
-
def custom_arg
|
|
631
|
-
@custom_arg
|
|
632
|
-
end
|
|
633
|
-
|
|
634
|
-
def to_json(*)
|
|
635
|
-
{
|
|
636
|
-
'custom_arg' => self.custom_arg
|
|
637
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
638
|
-
end
|
|
639
|
-
end
|
|
640
|
-
|
|
641
|
-
class Content
|
|
642
|
-
def initialize(type: nil, value: nil)
|
|
643
|
-
@type = type
|
|
644
|
-
@value = value
|
|
645
|
-
end
|
|
646
|
-
|
|
647
|
-
def type=(type)
|
|
648
|
-
@type = type
|
|
649
|
-
end
|
|
650
|
-
|
|
651
|
-
def type
|
|
652
|
-
@type
|
|
653
|
-
end
|
|
654
|
-
|
|
655
|
-
def value=(value)
|
|
656
|
-
@value = value
|
|
657
|
-
end
|
|
658
|
-
|
|
659
|
-
def value
|
|
660
|
-
@value
|
|
661
|
-
end
|
|
662
|
-
|
|
663
|
-
def to_json(*)
|
|
664
|
-
{
|
|
665
|
-
'type' => self.type,
|
|
666
|
-
'value' => self.value
|
|
667
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
668
|
-
end
|
|
669
|
-
end
|
|
670
|
-
|
|
671
|
-
class Personalization
|
|
672
|
-
def initilize
|
|
673
|
-
@tos = nil
|
|
674
|
-
@ccs = nil
|
|
675
|
-
@bccs = nil
|
|
676
|
-
@subject = nil
|
|
677
|
-
@headers = nil
|
|
678
|
-
@substitutions = nil
|
|
679
|
-
@custom_args = nil
|
|
680
|
-
@send_at = nil
|
|
681
|
-
end
|
|
682
|
-
|
|
683
|
-
def to=(to)
|
|
684
|
-
@tos = @tos.nil? ? [] : @tos
|
|
685
|
-
@tos = @tos.push(to.to_json)
|
|
686
|
-
end
|
|
687
|
-
|
|
688
|
-
def tos
|
|
689
|
-
@tos
|
|
690
|
-
end
|
|
691
|
-
|
|
692
|
-
def cc=(cc)
|
|
693
|
-
@ccs = @ccs.nil? ? [] : @ccs
|
|
694
|
-
@ccs = @ccs.push(cc.to_json)
|
|
695
|
-
end
|
|
696
|
-
|
|
697
|
-
def ccs
|
|
698
|
-
@ccs
|
|
699
|
-
end
|
|
700
|
-
|
|
701
|
-
def bcc=(bcc)
|
|
702
|
-
@bccs = @bccs.nil? ? [] : @bccs
|
|
703
|
-
@bccs = @bccs.push(bcc.to_json)
|
|
704
|
-
end
|
|
705
|
-
|
|
706
|
-
def bccs
|
|
707
|
-
@bccs
|
|
708
|
-
end
|
|
709
|
-
|
|
710
|
-
def subject=(subject)
|
|
711
|
-
@subject = subject
|
|
712
|
-
end
|
|
713
|
-
|
|
714
|
-
def subject
|
|
715
|
-
@subject
|
|
716
|
-
end
|
|
717
|
-
|
|
718
|
-
def headers=(headers)
|
|
719
|
-
@headers = @headers.nil? ? {} : @headers
|
|
720
|
-
headers = headers.to_json
|
|
721
|
-
@headers = @headers.merge(headers['header'])
|
|
722
|
-
end
|
|
723
|
-
|
|
724
|
-
def headers
|
|
725
|
-
@headers
|
|
726
|
-
end
|
|
727
|
-
|
|
728
|
-
def substitutions=(substitutions)
|
|
729
|
-
@substitutions = @substitutions.nil? ? {} : @substitutions
|
|
730
|
-
substitutions = substitutions.to_json
|
|
731
|
-
@substitutions = @substitutions.merge(substitutions['substitution'])
|
|
732
|
-
end
|
|
733
|
-
|
|
734
|
-
def substitutions
|
|
735
|
-
@substitutions
|
|
736
|
-
end
|
|
737
|
-
|
|
738
|
-
def custom_args=(custom_args)
|
|
739
|
-
@custom_args = @custom_args.nil? ? {} : @custom_args
|
|
740
|
-
custom_args = custom_args.to_json
|
|
741
|
-
@custom_args = @custom_args.merge(custom_args['custom_arg'])
|
|
742
|
-
end
|
|
743
|
-
|
|
744
|
-
def custom_args
|
|
745
|
-
@custom_args
|
|
746
|
-
end
|
|
747
|
-
|
|
748
|
-
def send_at=(send_at)
|
|
749
|
-
@send_at = send_at
|
|
750
|
-
end
|
|
751
|
-
|
|
752
|
-
def send_at
|
|
753
|
-
@send_at
|
|
754
|
-
end
|
|
755
|
-
|
|
756
|
-
def to_json(*)
|
|
757
|
-
{
|
|
758
|
-
'to' => self.tos,
|
|
759
|
-
'cc' => self.ccs,
|
|
760
|
-
'bcc' => self.bccs,
|
|
761
|
-
'subject' => self.subject,
|
|
762
|
-
'headers' => self.headers,
|
|
763
|
-
'substitutions' => self.substitutions,
|
|
764
|
-
'custom_args' => self.custom_args,
|
|
765
|
-
'send_at' => self.send_at
|
|
766
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
767
|
-
end
|
|
768
|
-
end
|
|
769
|
-
|
|
770
|
-
class Email
|
|
771
|
-
def initialize(email: nil, name: nil)
|
|
772
|
-
@email = email
|
|
773
|
-
@name = name
|
|
774
|
-
end
|
|
775
|
-
|
|
776
|
-
def email=(email)
|
|
777
|
-
@email = email
|
|
778
|
-
end
|
|
779
|
-
|
|
780
|
-
def email
|
|
781
|
-
@email
|
|
782
|
-
end
|
|
783
|
-
|
|
784
|
-
def name=(name)
|
|
785
|
-
@name = name
|
|
786
|
-
end
|
|
787
|
-
|
|
788
|
-
def name
|
|
789
|
-
@name
|
|
790
|
-
end
|
|
6
|
+
class Mail
|
|
791
7
|
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
'email' => self.email,
|
|
795
|
-
'name' => self.name
|
|
796
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
797
|
-
end
|
|
798
|
-
end
|
|
8
|
+
attr_accessor :subject, :ip_pool_name, :template_id, :send_at, :batch_id
|
|
9
|
+
attr_reader :personalizations, :contents, :attachments, :categories, :sections, :headers, :custom_args
|
|
799
10
|
|
|
800
|
-
class Mail
|
|
801
11
|
def initialize(from_email=nil, subj=nil, to_email=nil, cont=nil)
|
|
802
12
|
@from = nil
|
|
803
13
|
@subject = nil
|
|
804
|
-
@personalizations =
|
|
805
|
-
@contents =
|
|
806
|
-
@attachments =
|
|
14
|
+
@personalizations = []
|
|
15
|
+
@contents = []
|
|
16
|
+
@attachments = []
|
|
807
17
|
@template_id = nil
|
|
808
|
-
@sections =
|
|
809
|
-
@headers =
|
|
810
|
-
@categories =
|
|
811
|
-
@custom_args =
|
|
18
|
+
@sections = {}
|
|
19
|
+
@headers = {}
|
|
20
|
+
@categories = []
|
|
21
|
+
@custom_args = {}
|
|
812
22
|
@send_at = nil
|
|
813
23
|
@batch_id = nil
|
|
814
24
|
@asm = nil
|
|
@@ -821,9 +31,9 @@ module SendGrid
|
|
|
821
31
|
self.from = from_email
|
|
822
32
|
self.subject = subj
|
|
823
33
|
personalization = Personalization.new
|
|
824
|
-
personalization.
|
|
825
|
-
self.
|
|
826
|
-
self.
|
|
34
|
+
personalization.add_to(to_email)
|
|
35
|
+
self.add_personalization(personalization)
|
|
36
|
+
self.add_content(cont)
|
|
827
37
|
end
|
|
828
38
|
end
|
|
829
39
|
|
|
@@ -835,103 +45,42 @@ module SendGrid
|
|
|
835
45
|
@from.nil? ? nil : @from.to_json
|
|
836
46
|
end
|
|
837
47
|
|
|
838
|
-
def
|
|
839
|
-
@
|
|
840
|
-
end
|
|
841
|
-
|
|
842
|
-
def subject
|
|
843
|
-
@subject
|
|
844
|
-
end
|
|
845
|
-
|
|
846
|
-
def personalizations=(personalizations)
|
|
847
|
-
@personalizations = @personalizations.nil? ? [] : @personalizations
|
|
848
|
-
@personalizations = @personalizations.push(personalizations.to_json)
|
|
849
|
-
end
|
|
850
|
-
|
|
851
|
-
def personalizations
|
|
852
|
-
@personalizations.nil? ? nil : @personalizations
|
|
853
|
-
end
|
|
854
|
-
|
|
855
|
-
def contents=(content)
|
|
856
|
-
@contents = @contents ? @contents : []
|
|
857
|
-
@contents = @contents.push(content.to_json)
|
|
48
|
+
def add_personalization(personalization)
|
|
49
|
+
@personalizations << personalization.to_json
|
|
858
50
|
end
|
|
859
51
|
|
|
860
|
-
def
|
|
861
|
-
@contents
|
|
52
|
+
def add_content(content)
|
|
53
|
+
@contents << content.to_json
|
|
862
54
|
end
|
|
863
55
|
|
|
864
|
-
def
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
def attachments
|
|
870
|
-
@attachments
|
|
871
|
-
end
|
|
872
|
-
|
|
873
|
-
def template_id=(template_id)
|
|
874
|
-
@template_id = template_id
|
|
875
|
-
end
|
|
876
|
-
|
|
877
|
-
def template_id
|
|
878
|
-
@template_id
|
|
879
|
-
end
|
|
880
|
-
|
|
881
|
-
def sections=(sections)
|
|
882
|
-
@sections = @sections.nil? ? {} : @sections
|
|
883
|
-
sections = sections.to_json
|
|
884
|
-
@sections = @sections.merge(sections['section'])
|
|
885
|
-
end
|
|
886
|
-
|
|
887
|
-
def sections
|
|
888
|
-
@sections
|
|
889
|
-
end
|
|
890
|
-
|
|
891
|
-
def headers=(headers)
|
|
892
|
-
@headers = @headers.nil? ? {} : @headers
|
|
893
|
-
headers = headers.to_json
|
|
894
|
-
@headers = @headers.merge(headers['header'])
|
|
895
|
-
end
|
|
896
|
-
|
|
897
|
-
def headers
|
|
898
|
-
@headers
|
|
899
|
-
end
|
|
900
|
-
|
|
901
|
-
def categories=(category)
|
|
902
|
-
@categories = @categories.nil? ? [] : @categories
|
|
903
|
-
category = category.to_json
|
|
904
|
-
@categories = @categories.push(category['category'])
|
|
905
|
-
end
|
|
906
|
-
|
|
907
|
-
def categories
|
|
908
|
-
@categories
|
|
909
|
-
end
|
|
910
|
-
|
|
911
|
-
def custom_args=(custom_args)
|
|
912
|
-
@custom_args = @custom_args.nil? ? {} : @custom_args
|
|
913
|
-
custom_args = custom_args.to_json
|
|
914
|
-
@custom_args = @custom_args.merge(custom_args['custom_arg'])
|
|
56
|
+
def check_for_secrets(patterns)
|
|
57
|
+
contents = @contents.map { |content| content['value'] }.join(' ')
|
|
58
|
+
patterns.each do |pattern|
|
|
59
|
+
raise SecurityError.new('Content contains sensitive information.') if contents.match(pattern)
|
|
60
|
+
end
|
|
915
61
|
end
|
|
916
62
|
|
|
917
|
-
def
|
|
918
|
-
@
|
|
63
|
+
def add_attachment(attachment)
|
|
64
|
+
@attachments << attachment.to_json
|
|
919
65
|
end
|
|
920
66
|
|
|
921
|
-
def
|
|
922
|
-
@
|
|
67
|
+
def add_category(category)
|
|
68
|
+
@categories << category.name
|
|
923
69
|
end
|
|
924
70
|
|
|
925
|
-
def
|
|
926
|
-
|
|
71
|
+
def add_section(section)
|
|
72
|
+
section = section.to_json
|
|
73
|
+
@sections = @sections.merge(section['section'])
|
|
927
74
|
end
|
|
928
75
|
|
|
929
|
-
def
|
|
930
|
-
|
|
76
|
+
def add_header(header)
|
|
77
|
+
header = header.to_json
|
|
78
|
+
@headers = @headers.merge(header['header'])
|
|
931
79
|
end
|
|
932
80
|
|
|
933
|
-
def
|
|
934
|
-
|
|
81
|
+
def add_custom_arg(custom_arg)
|
|
82
|
+
custom_arg = custom_arg.to_json
|
|
83
|
+
@custom_args = @custom_args.merge(custom_arg['custom_arg'])
|
|
935
84
|
end
|
|
936
85
|
|
|
937
86
|
def asm=(asm)
|
|
@@ -942,14 +91,6 @@ module SendGrid
|
|
|
942
91
|
@asm.nil? ? nil : @asm.to_json
|
|
943
92
|
end
|
|
944
93
|
|
|
945
|
-
def ip_pool_name=(ip_pool_name)
|
|
946
|
-
@ip_pool_name = ip_pool_name
|
|
947
|
-
end
|
|
948
|
-
|
|
949
|
-
def ip_pool_name
|
|
950
|
-
@ip_pool_name
|
|
951
|
-
end
|
|
952
|
-
|
|
953
94
|
def mail_settings=(mail_settings)
|
|
954
95
|
@mail_settings = mail_settings
|
|
955
96
|
end
|
|
@@ -993,7 +134,7 @@ module SendGrid
|
|
|
993
134
|
'mail_settings' => self.mail_settings,
|
|
994
135
|
'tracking_settings' => self.tracking_settings,
|
|
995
136
|
'reply_to' => self.reply_to
|
|
996
|
-
}.delete_if { |_, value| value.to_s.strip == '' }
|
|
137
|
+
}.delete_if { |_, value| value.to_s.strip == '' || value == [] || value == {}}
|
|
997
138
|
end
|
|
998
139
|
end
|
|
999
140
|
end
|