sendgrid_actionmailer_adapter 0.1.1 → 0.2.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/lib/sendgrid_actionmailer_adapter/converter.rb +23 -61
- data/lib/sendgrid_actionmailer_adapter/converters/attachments.rb +33 -0
- data/lib/sendgrid_actionmailer_adapter/converters/categories.rb +24 -0
- data/lib/sendgrid_actionmailer_adapter/converters/contents.rb +22 -0
- data/lib/sendgrid_actionmailer_adapter/converters/from.rb +26 -0
- data/lib/sendgrid_actionmailer_adapter/converters/personalizations.rb +47 -0
- data/lib/sendgrid_actionmailer_adapter/converters/reply_to.rb +22 -0
- data/lib/sendgrid_actionmailer_adapter/converters/send_at.rb +22 -0
- data/lib/sendgrid_actionmailer_adapter/converters/subject.rb +23 -0
- data/lib/sendgrid_actionmailer_adapter/version.rb +1 -1
- metadata +25 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee79cf7cc71fee2d3bd2212d2bfb1221d9629d90
|
4
|
+
data.tar.gz: f35a57e974388b72188ae92d9dd168763a662a6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c37de30e3e2b91fb8cac5860bda517d44eea91eb04d60403ed6af2b3652a6fcb3b003aaafb6bf4550287c6bb115d5d8ad2e22b18d83e68f608a32c2706292585
|
7
|
+
data.tar.gz: d82abaf00a36eec76085fe8df9db0311634dd89ec49df7a799be08b55a13bd04bc1018ee6258775b5609854ffeaaab89e6ceb4930134371bfe03ddc180016b20
|
@@ -1,67 +1,29 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'base64'
|
4
|
-
require 'mail'
|
5
3
|
require 'sendgrid-ruby'
|
6
4
|
require_relative 'errors'
|
5
|
+
require_relative 'converters/subject'
|
6
|
+
require_relative 'converters/from'
|
7
|
+
require_relative 'converters/personalizations'
|
8
|
+
require_relative 'converters/attachments'
|
9
|
+
require_relative 'converters/contents'
|
10
|
+
require_relative 'converters/categories'
|
11
|
+
require_relative 'converters/send_at'
|
12
|
+
require_relative 'converters/reply_to'
|
7
13
|
|
8
14
|
module SendGridActionMailerAdapter
|
9
15
|
class Converter
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
16
|
+
CONVERTERS = [
|
17
|
+
::SendGridActionMailerAdapter::Converters::From.new,
|
18
|
+
::SendGridActionMailerAdapter::Converters::Subject.new,
|
19
|
+
::SendGridActionMailerAdapter::Converters::Personalizations.new,
|
20
|
+
::SendGridActionMailerAdapter::Converters::Attachments.new,
|
21
|
+
::SendGridActionMailerAdapter::Converters::Contents.new,
|
22
|
+
::SendGridActionMailerAdapter::Converters::Categories.new,
|
23
|
+
::SendGridActionMailerAdapter::Converters::SendAt.new,
|
24
|
+
::SendGridActionMailerAdapter::Converters::ReplyTo.new,
|
14
25
|
].freeze
|
15
26
|
|
16
|
-
CONVERTERS = {
|
17
|
-
from: ->(mail) {
|
18
|
-
addr = mail[:from].addrs.first
|
19
|
-
::SendGrid::Email.new(email: addr.address, name: addr.display_name)
|
20
|
-
},
|
21
|
-
subject: ->(mail) { mail.subject },
|
22
|
-
personalizations: ->(mail) {
|
23
|
-
# Separate emails per each To address.
|
24
|
-
# Cc and Bcc addresses are shared with each emails.
|
25
|
-
mail[:to].addrs.map do |to_addr|
|
26
|
-
::SendGrid::Personalization.new.tap do |p|
|
27
|
-
p.to = ::SendGrid::Email.new(email: to_addr.address, name: to_addr.display_name)
|
28
|
-
Array(mail[:cc]&.addrs).each do |addr|
|
29
|
-
p.cc = ::SendGrid::Email.new(email: addr.address, name: addr.display_name)
|
30
|
-
end
|
31
|
-
Array(mail[:bcc]&.addrs).each do |addr|
|
32
|
-
p.bcc = ::SendGrid::Email.new(email: addr.address, name: addr.display_name)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
},
|
37
|
-
contents: ->(mail) {
|
38
|
-
::SendGrid::Content.new(type: mail.mime_type, value: mail.body.to_s)
|
39
|
-
},
|
40
|
-
attachments: ->(mail) {
|
41
|
-
mail.attachments.map do |attachment|
|
42
|
-
::SendGrid::Attachment.new.tap do |sendgrid_attachment|
|
43
|
-
sendgrid_attachment.type = attachment.mime_type
|
44
|
-
sendgrid_attachment.content = ::Base64.strict_encode64(attachment.body.raw_source)
|
45
|
-
sendgrid_attachment.filename = ::Mail::Encodings.decode_encode(
|
46
|
-
attachment.content_type_parameters['filename'], :decode
|
47
|
-
)
|
48
|
-
sendgrid_attachment.content_id = attachment.cid
|
49
|
-
end
|
50
|
-
end
|
51
|
-
},
|
52
|
-
categories: ->(mail) {
|
53
|
-
return nil if mail['categories'].nil?
|
54
|
-
# FIXME: Separator ', ' is dependant on Mail::UnstructuredField implementation,
|
55
|
-
# this may occur unexpected behaviour on 'mail' gem update.
|
56
|
-
mail['categories'].value.split(', ').map { |c| ::SendGrid::Category.new(name: c) }
|
57
|
-
},
|
58
|
-
send_at: ->(mail) { mail['send_at'].value.to_i if mail['send_at'] },
|
59
|
-
reply_to: ->(mail) {
|
60
|
-
addr = mail[:reply_to]&.addrs&.first
|
61
|
-
::SendGrid::Email.new(email: addr.address, name: addr.display_name) if addr
|
62
|
-
},
|
63
|
-
}.freeze
|
64
|
-
|
65
27
|
class << self
|
66
28
|
# Convert Mail::Message to SendGrid::Mail.
|
67
29
|
#
|
@@ -76,18 +38,18 @@ module SendGridActionMailerAdapter
|
|
76
38
|
private
|
77
39
|
|
78
40
|
def validate!(mail)
|
79
|
-
error_messages =
|
41
|
+
error_messages = CONVERTERS.flat_map { |converter| converter.validate(mail) }.compact
|
80
42
|
unless error_messages.empty?
|
81
|
-
raise SendGridActionMailerAdapter::ValidationError,
|
43
|
+
raise ::SendGridActionMailerAdapter::ValidationError,
|
44
|
+
"Validation error, #{error_messages}"
|
82
45
|
end
|
83
46
|
end
|
84
47
|
|
85
48
|
def convert(mail)
|
86
49
|
sendgrid_mail = ::SendGrid::Mail.new
|
87
|
-
CONVERTERS.each do |
|
88
|
-
|
89
|
-
|
90
|
-
end
|
50
|
+
CONVERTERS.each do |converter|
|
51
|
+
result = converter.convert(mail)
|
52
|
+
converter.assign_attributes(sendgrid_mail, result)
|
91
53
|
end
|
92
54
|
sendgrid_mail
|
93
55
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mail'
|
4
|
+
require 'base64'
|
5
|
+
require 'sendgrid-ruby'
|
6
|
+
|
7
|
+
module SendGridActionMailerAdapter
|
8
|
+
module Converters
|
9
|
+
class Attachments
|
10
|
+
def validate(_mail)
|
11
|
+
end
|
12
|
+
|
13
|
+
def convert(mail)
|
14
|
+
mail.attachments.map do |attachment|
|
15
|
+
::SendGrid::Attachment.new.tap do |sendgrid_attachment|
|
16
|
+
sendgrid_attachment.type = attachment.mime_type
|
17
|
+
sendgrid_attachment.content = ::Base64.strict_encode64(attachment.body.raw_source)
|
18
|
+
sendgrid_attachment.filename = ::Mail::Encodings.decode_encode(
|
19
|
+
attachment.content_type_parameters['filename'], :decode
|
20
|
+
)
|
21
|
+
sendgrid_attachment.content_id = attachment.cid
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def assign_attributes(sendgrid_mail, value)
|
27
|
+
Array(value).each do |attachment|
|
28
|
+
sendgrid_mail.add_attachment(attachment)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sendgrid-ruby'
|
4
|
+
|
5
|
+
module SendGridActionMailerAdapter
|
6
|
+
module Converters
|
7
|
+
class Categories
|
8
|
+
def validate(_mail)
|
9
|
+
end
|
10
|
+
|
11
|
+
def convert(mail)
|
12
|
+
categories_str = mail['categories']&.value
|
13
|
+
return if categories_str.nil? || categories_str.empty?
|
14
|
+
categories_str.split(', ').map { |c| ::SendGrid::Category.new(name: c) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def assign_attributes(sendgrid_mail, value)
|
18
|
+
Array(value).each do |category|
|
19
|
+
sendgrid_mail.add_category(category)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sendgrid-ruby'
|
4
|
+
|
5
|
+
module SendGridActionMailerAdapter
|
6
|
+
module Converters
|
7
|
+
class Contents
|
8
|
+
def validate(_mail)
|
9
|
+
end
|
10
|
+
|
11
|
+
def convert(mail)
|
12
|
+
::SendGrid::Content.new(type: mail.mime_type, value: mail.body.to_s)
|
13
|
+
end
|
14
|
+
|
15
|
+
def assign_attributes(sendgrid_mail, value)
|
16
|
+
Array(value).each do |content|
|
17
|
+
sendgrid_mail.add_content(content)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sendgrid-ruby'
|
4
|
+
|
5
|
+
module SendGridActionMailerAdapter
|
6
|
+
module Converters
|
7
|
+
class From
|
8
|
+
def validate(mail)
|
9
|
+
error_messages = []
|
10
|
+
if mail.from_addrs.empty?
|
11
|
+
error_messages << "'from' is required."
|
12
|
+
end
|
13
|
+
error_messages
|
14
|
+
end
|
15
|
+
|
16
|
+
def convert(mail)
|
17
|
+
addr = mail[:from].addrs.first
|
18
|
+
::SendGrid::Email.new(email: addr.address, name: addr.display_name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def assign_attributes(sendgrid_mail, value)
|
22
|
+
sendgrid_mail.from = value
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sendgrid-ruby'
|
4
|
+
|
5
|
+
module SendGridActionMailerAdapter
|
6
|
+
module Converters
|
7
|
+
class Personalizations
|
8
|
+
def validate(mail)
|
9
|
+
error_messages = []
|
10
|
+
if mail.to_addrs.empty?
|
11
|
+
error_messages << "'to_addrs' must not be empty."
|
12
|
+
end
|
13
|
+
error_messages
|
14
|
+
end
|
15
|
+
|
16
|
+
def convert(mail)
|
17
|
+
# Separate emails per each To address.
|
18
|
+
# Cc and Bcc addresses are shared with each emails.
|
19
|
+
cc_addrs = mail[:cc]&.addrs
|
20
|
+
bcc_addrs = mail[:bcc]&.addrs
|
21
|
+
mail[:to].addrs.map do |to_addr|
|
22
|
+
to_personalization(to_addr, cc_addrs, bcc_addrs)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def assign_attributes(sendgrid_mail, value)
|
27
|
+
Array(value).each do |personalization|
|
28
|
+
sendgrid_mail.add_personalization(personalization)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def to_personalization(to_addr, cc_addrs, bcc_addrs)
|
35
|
+
::SendGrid::Personalization.new.tap do |p|
|
36
|
+
p.add_to(::SendGrid::Email.new(email: to_addr.address, name: to_addr.display_name))
|
37
|
+
Array(cc_addrs).each do |addr|
|
38
|
+
p.add_cc(::SendGrid::Email.new(email: addr.address, name: addr.display_name))
|
39
|
+
end
|
40
|
+
Array(bcc_addrs).each do |addr|
|
41
|
+
p.add_bcc(::SendGrid::Email.new(email: addr.address, name: addr.display_name))
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sendgrid-ruby'
|
4
|
+
|
5
|
+
module SendGridActionMailerAdapter
|
6
|
+
module Converters
|
7
|
+
class ReplyTo
|
8
|
+
def validate(_mail)
|
9
|
+
end
|
10
|
+
|
11
|
+
def convert(mail)
|
12
|
+
addr = mail[:reply_to]&.addrs&.first
|
13
|
+
return if addr.nil?
|
14
|
+
::SendGrid::Email.new(email: addr.address, name: addr.display_name)
|
15
|
+
end
|
16
|
+
|
17
|
+
def assign_attributes(sendgrid_mail, value)
|
18
|
+
sendgrid_mail.reply_to = value
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sendgrid-ruby'
|
4
|
+
|
5
|
+
module SendGridActionMailerAdapter
|
6
|
+
module Converters
|
7
|
+
class SendAt
|
8
|
+
def validate(_mail)
|
9
|
+
end
|
10
|
+
|
11
|
+
def convert(mail)
|
12
|
+
send_at_str = mail['send_at']&.value
|
13
|
+
return if send_at_str.nil? || send_at_str.empty?
|
14
|
+
send_at_str.to_i
|
15
|
+
end
|
16
|
+
|
17
|
+
def assign_attributes(sendgrid_mail, value)
|
18
|
+
sendgrid_mail.send_at = value
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SendGridActionMailerAdapter
|
4
|
+
module Converters
|
5
|
+
class Subject
|
6
|
+
def validate(mail)
|
7
|
+
error_messages = []
|
8
|
+
if mail.subject.nil? || mail.subject.empty?
|
9
|
+
error_messages << "'subject' is required."
|
10
|
+
end
|
11
|
+
error_messages
|
12
|
+
end
|
13
|
+
|
14
|
+
def convert(mail)
|
15
|
+
mail.subject
|
16
|
+
end
|
17
|
+
|
18
|
+
def assign_attributes(sendgrid_mail, value)
|
19
|
+
sendgrid_mail.subject = value
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sendgrid_actionmailer_adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ryu39
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sendgrid-ruby
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,47 +53,47 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: ryu39cop
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 0.49.1.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 0.49.1.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
75
|
+
version: '3.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
82
|
+
version: '3.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: webmock
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0
|
89
|
+
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0
|
96
|
+
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: mail
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -133,6 +133,14 @@ files:
|
|
133
133
|
- lib/sendgrid_actionmailer_adapter.rb
|
134
134
|
- lib/sendgrid_actionmailer_adapter/configuration.rb
|
135
135
|
- lib/sendgrid_actionmailer_adapter/converter.rb
|
136
|
+
- lib/sendgrid_actionmailer_adapter/converters/attachments.rb
|
137
|
+
- lib/sendgrid_actionmailer_adapter/converters/categories.rb
|
138
|
+
- lib/sendgrid_actionmailer_adapter/converters/contents.rb
|
139
|
+
- lib/sendgrid_actionmailer_adapter/converters/from.rb
|
140
|
+
- lib/sendgrid_actionmailer_adapter/converters/personalizations.rb
|
141
|
+
- lib/sendgrid_actionmailer_adapter/converters/reply_to.rb
|
142
|
+
- lib/sendgrid_actionmailer_adapter/converters/send_at.rb
|
143
|
+
- lib/sendgrid_actionmailer_adapter/converters/subject.rb
|
136
144
|
- lib/sendgrid_actionmailer_adapter/delivery_method.rb
|
137
145
|
- lib/sendgrid_actionmailer_adapter/errors.rb
|
138
146
|
- lib/sendgrid_actionmailer_adapter/version.rb
|