sendgrid-actionmailer 0.0.5 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 261e9aa49e0e1db801ad74a8c9c662e73d5887d9
4
- data.tar.gz: e777ae123f8e3bf1f4c1a7cd2d723d4ae432e1b5
3
+ metadata.gz: 74b9a08b495843840fdc6823142f28de25914d7b
4
+ data.tar.gz: 6e5fbd4cb655775fe3a67757479dafb41d32b55a
5
5
  SHA512:
6
- metadata.gz: 95aa11e17bb1a71d2eedce41f8edcda2404754d52dfed76a80c39178338742dfe1c726a29904c7c00f0ec99312220ba4b255a7873ea0b0a6f17748766ed3e09e
7
- data.tar.gz: 1b06b819729ae61121160d5112ffec0a6340cd10ae31c3fe191b6140011af78888ce54799bed4cd221b116d405354e9edb2498149f8dc3ac231132c855b4e430
6
+ metadata.gz: 3ae8a64dc6b4f7e77eb5ab7226c2ba8b43e1ee5296f6b26817632b080efc238ba14ce41e9360768b54444cca4c41df047cf17d5823b5be9b1cbb474b9ab0afb9
7
+ data.tar.gz: d336ebf3f2d0659abfc158bdd585641db23c74271af318afc14f76b5c75009a11e8f358aa78d9a66b12c964e33d7d0d9578731cc10b7f57d624d94a7c707d892
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require 'spec_helper'
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.2.1
5
+ - 2.0.0
6
+ - 1.9.3
7
+ before_script:
8
+ - bundle install
9
+ gemfile:
10
+ - gemfiles/mail_2.5.gemfile
11
+ - gemfiles/mail_2.6.gemfile
data/Appraisals ADDED
@@ -0,0 +1,7 @@
1
+ appraise "mail-2.5" do
2
+ gem "mail", "2.5.4"
3
+ end
4
+
5
+ appraise "mail-2.6" do
6
+ gem "mail", "2.6.4"
7
+ end
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # SendGrid ActionMailer
2
2
 
3
- SendGrid support for Rails via ActionMailer.
3
+ An ActionMailer adapter to send email using SendGrid's HTTPS Web API (instead of SMTP).
4
+
5
+ [![BuildStatus](https://travis-ci.org/eddiezane/sendgrid-actionmailer.svg?branch=master)](https://travis-ci.org/eddiezane/sendgrid-actionmailer)
4
6
 
5
7
  ## Installation
6
8
 
@@ -19,12 +21,74 @@ Or install it yourself as:
19
21
 
20
22
  ## Usage
21
23
 
22
- Edit your `config/environments/$ENVIRONMENT.rb` file and add/change the following to the ActionMailer configuration.
24
+ Create a [SendGrid API Key](https://app.sendgrid.com/settings/api_keys) for your application. Then edit `config/application.rb` or `config/environments/$ENVIRONMENT.rb` and add/change the following to the ActionMailer configuration:
25
+
26
+ ```ruby
27
+ config.action_mailer.delivery_method = :sendgrid_actionmailer
28
+ config.action_mailer.sendgrid_actionmailer_settings = {
29
+ api_key: ENV['SENDGRID_API_KEY']
30
+ }
31
+ ```
32
+
33
+ Normal ActionMailer usage will now transparently be sent using SendGrid's Web API.
34
+
35
+ ### X-SMTPAPI
36
+
37
+ You may optionally set SendGrid's [X-SMTPAPI](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html) header on messages to control SendGrid specific functionality. This header must be set to a JSON string.
38
+
39
+ ```ruby
40
+ class UserMailer < ApplicationMailer
41
+ def welcome_email(user)
42
+ headers['X-SMTPAPI'] = {
43
+ category: ['newuser']
44
+ }.to_json
45
+
46
+ mail(to: user.email, subject: 'Welcome to My Awesome Site')
47
+ end
48
+ end
49
+ ```
50
+
51
+ The following `X-SMTPAPI` options are supported:
52
+
53
+ - `filters`
54
+ - `category`
55
+ - `send_at`
56
+ - `send_each_at`
57
+ - `section`
58
+ - `sub`
59
+ - `asm_group_id`
60
+ - `unique_args`
61
+ - `ip_pool`
62
+
63
+ #### X-SMTPAPI Defaults
64
+
65
+ Default values for the `X-SMTPAPI` header may be set at different levels using ActionMailer's normal options for setting default headers. However, since `X-SMTPAPI` is treated as a single string value, it's important to note that default values at different levels will not get merged together. So if you override the `X-SMTPAPI` header at any level, you may need to repeat any default values at more specific levels.
66
+
67
+ Global defaults can be set inside `config/application.rb`:
68
+
69
+ ```ruby
70
+ config.action_mailer.default_options = {
71
+ 'X-SMTPAPI' => {
72
+ ip_pool: 'marketing_ip_pool'
73
+ }.to_json
74
+ }
75
+ ```
76
+
77
+ Per-mailer defaults can be set inside an ActionMailer class:
23
78
 
24
- config.action_mailer.delivery_method = :sendgrid_actionmailer
25
- config.action_mailer.sendgrid_actionmailer_settings = {api_user: ENV['SENDGRID_USERNAME'], api_key: ENV['SENDGRID_PASSWORD']}
79
+ ```ruby
80
+ class NewsletterMailer < ApplicationMailer
81
+ default('X-SMTPAPI' => {
82
+ category: ['newsletter'],
26
83
 
27
- TODO: Add ActionMailer instructions.
84
+ # Assuming the above "config.action_mailer.default_options" global default
85
+ # example, the default "ip_pool" value must be repeated here if you want
86
+ # that default value to also apply to this specific mailer that's
87
+ # specifying it's own default X-SMTPAPI value.
88
+ ip_pool: 'marketing_ip_pool'
89
+ }.to_json)
90
+ end
91
+ ```
28
92
 
29
93
  ## Contributing
30
94
 
data/Rakefile CHANGED
@@ -1,2 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task test: :spec
7
+
8
+ task default: :test
2
9
 
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "mail", "2.5.4"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,68 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ sendgrid-actionmailer (0.0.5)
5
+ mail (~> 2.5)
6
+ sendgrid-ruby (~> 0.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ appraisal (2.1.0)
12
+ bundler
13
+ rake
14
+ thor (>= 0.14.0)
15
+ diff-lcs (1.2.5)
16
+ domain_name (0.5.20160310)
17
+ unf (>= 0.0.5, < 1.0.0)
18
+ http-cookie (1.0.2)
19
+ domain_name (~> 0.5)
20
+ mail (2.5.4)
21
+ mime-types (~> 1.16)
22
+ treetop (~> 1.4.8)
23
+ mime-types (1.25.1)
24
+ netrc (0.11.0)
25
+ polyglot (0.3.5)
26
+ rake (11.1.2)
27
+ rest-client (1.8.0)
28
+ http-cookie (>= 1.0.2, < 2.0)
29
+ mime-types (>= 1.16, < 3.0)
30
+ netrc (~> 0.7)
31
+ rspec (3.2.0)
32
+ rspec-core (~> 3.2.0)
33
+ rspec-expectations (~> 3.2.0)
34
+ rspec-mocks (~> 3.2.0)
35
+ rspec-core (3.2.3)
36
+ rspec-support (~> 3.2.0)
37
+ rspec-expectations (3.2.1)
38
+ diff-lcs (>= 1.2.0, < 2.0)
39
+ rspec-support (~> 3.2.0)
40
+ rspec-mocks (3.2.1)
41
+ diff-lcs (>= 1.2.0, < 2.0)
42
+ rspec-support (~> 3.2.0)
43
+ rspec-support (3.2.2)
44
+ sendgrid-ruby (0.0.3)
45
+ rest-client
46
+ smtpapi
47
+ smtpapi (0.1.0)
48
+ thor (0.19.1)
49
+ treetop (1.4.15)
50
+ polyglot
51
+ polyglot (>= 0.3.1)
52
+ unf (0.1.4)
53
+ unf_ext
54
+ unf_ext (0.0.7.2)
55
+
56
+ PLATFORMS
57
+ ruby
58
+
59
+ DEPENDENCIES
60
+ appraisal (~> 2.1.0)
61
+ bundler (~> 1.6)
62
+ mail (= 2.5.4)
63
+ rake
64
+ rspec (~> 3.2.0)
65
+ sendgrid-actionmailer!
66
+
67
+ BUNDLED WITH
68
+ 1.11.2
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "mail", "2.6.4"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,63 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ sendgrid-actionmailer (0.0.5)
5
+ mail (~> 2.5)
6
+ sendgrid-ruby (~> 0.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ appraisal (2.1.0)
12
+ bundler
13
+ rake
14
+ thor (>= 0.14.0)
15
+ diff-lcs (1.2.5)
16
+ domain_name (0.5.20160310)
17
+ unf (>= 0.0.5, < 1.0.0)
18
+ http-cookie (1.0.2)
19
+ domain_name (~> 0.5)
20
+ mail (2.6.4)
21
+ mime-types (>= 1.16, < 4)
22
+ mime-types (2.99.1)
23
+ netrc (0.11.0)
24
+ rake (11.1.2)
25
+ rest-client (1.8.0)
26
+ http-cookie (>= 1.0.2, < 2.0)
27
+ mime-types (>= 1.16, < 3.0)
28
+ netrc (~> 0.7)
29
+ rspec (3.2.0)
30
+ rspec-core (~> 3.2.0)
31
+ rspec-expectations (~> 3.2.0)
32
+ rspec-mocks (~> 3.2.0)
33
+ rspec-core (3.2.3)
34
+ rspec-support (~> 3.2.0)
35
+ rspec-expectations (3.2.1)
36
+ diff-lcs (>= 1.2.0, < 2.0)
37
+ rspec-support (~> 3.2.0)
38
+ rspec-mocks (3.2.1)
39
+ diff-lcs (>= 1.2.0, < 2.0)
40
+ rspec-support (~> 3.2.0)
41
+ rspec-support (3.2.2)
42
+ sendgrid-ruby (0.0.3)
43
+ rest-client
44
+ smtpapi
45
+ smtpapi (0.1.0)
46
+ thor (0.19.1)
47
+ unf (0.1.4)
48
+ unf_ext
49
+ unf_ext (0.0.7.2)
50
+
51
+ PLATFORMS
52
+ ruby
53
+
54
+ DEPENDENCIES
55
+ appraisal (~> 2.1.0)
56
+ bundler (~> 1.6)
57
+ mail (= 2.6.4)
58
+ rake
59
+ rspec (~> 3.2.0)
60
+ sendgrid-actionmailer!
61
+
62
+ BUNDLED WITH
63
+ 1.11.2
@@ -1,60 +1 @@
1
- require 'sendgrid-actionmailer/version'
2
- require 'sendgrid-actionmailer/railtie' if defined? Rails
3
-
4
- require 'tempfile'
5
-
6
- require 'sendgrid-ruby'
7
-
8
- module SendGridActionMailer
9
- class DeliveryMethod
10
- def initialize(params)
11
- @client = SendGrid::Client.new do |c|
12
- c.api_user = params[:api_user]
13
- c.api_key = params[:api_key]
14
- end
15
- end
16
-
17
- def deliver!(mail)
18
- email = SendGrid::Mail.new do |m|
19
- m.to = mail[:to].addresses
20
- m.from = mail[:from]
21
- m.subject = mail[:subject]
22
- end
23
-
24
- # TODO: This is pretty ugly
25
- case mail.mime_type
26
- when 'text/plain'
27
- # Text
28
- email.text = mail.body.decoded
29
- when 'text/html'
30
- # HTML
31
- email.html = mail.body.decoded
32
- when 'multipart/alternative'
33
- # Text and HTML
34
- email.text = mail.text_part.decoded
35
- email.html = mail.html_part.decoded
36
- when 'multipart/mixed'
37
- # Text and/or HTML and Attachment
38
- if mail.text_part.nil?
39
- email.html = mail.html_part.decoded
40
- elsif mail.html_part.nil?
41
- email.text = mail.text_part.decoded
42
- else
43
- email.text = mail.text_part.decoded
44
- email.html = mail.html_part.decoded
45
- end
46
-
47
- # This needs to be done better
48
- mail.attachments.each do |a|
49
- t = Tempfile.new("sendgrid-actionmailer#{rand(1000)}")
50
- t.binmode
51
- t.write(a.read)
52
- email.add_attachment(t, a.filename)
53
- end
54
-
55
- end
56
- @client.send(email)
57
- end
58
-
59
- end
60
- end
1
+ require "sendgrid_actionmailer"
@@ -0,0 +1,106 @@
1
+ require 'sendgrid_actionmailer/version'
2
+ require 'sendgrid_actionmailer/railtie' if defined? Rails
3
+
4
+ require 'tempfile'
5
+
6
+ require 'sendgrid-ruby'
7
+
8
+ module SendGridActionMailer
9
+ class DeliveryMethod
10
+ attr_reader :client
11
+
12
+ def initialize(params)
13
+ @client = SendGrid::Client.new do |c|
14
+ c.api_user = params[:api_user]
15
+ c.api_key = params[:api_key]
16
+ end
17
+ end
18
+
19
+ def deliver!(mail)
20
+ from = mail[:from].addrs.first
21
+
22
+ email = SendGrid::Mail.new do |m|
23
+ m.to = mail[:to].addresses
24
+ m.cc = mail[:cc].addresses if mail[:cc]
25
+ m.bcc = mail[:bcc].addresses if mail[:bcc]
26
+ m.from = from.address
27
+ m.from_name = from.display_name
28
+ m.subject = mail.subject
29
+ end
30
+
31
+ smtpapi = mail['X-SMTPAPI']
32
+ if smtpapi && smtpapi.value
33
+ begin
34
+ data = JSON.parse(smtpapi.value)
35
+
36
+ if data['filters']
37
+ email.smtpapi.set_filters(data['filters'])
38
+ end
39
+
40
+ if data['category']
41
+ email.smtpapi.set_categories(data['category'])
42
+ end
43
+
44
+ if data['send_at']
45
+ email.smtpapi.set_send_at(data['send_at'])
46
+ end
47
+
48
+ if data['send_each_at']
49
+ email.smtpapi.set_send_each_at(data['send_each_at'])
50
+ end
51
+
52
+ if data['section']
53
+ email.smtpapi.set_sections(data['section'])
54
+ end
55
+
56
+ if data['sub']
57
+ email.smtpapi.set_substitutions(data['sub'])
58
+ end
59
+
60
+ if data['asm_group_id']
61
+ email.smtpapi.set_asm_group(data['asm_group_id'])
62
+ end
63
+
64
+ if data['unique_args']
65
+ email.smtpapi.set_unique_args(data['unique_args'])
66
+ end
67
+
68
+ if data['ip_pool']
69
+ email.smtpapi.set_ip_pool(data['ip_pool'])
70
+ end
71
+ rescue JSON::ParserError
72
+ raise ArgumentError, "X-SMTPAPI is not JSON: #{smtpapi.value}"
73
+ end
74
+ end
75
+
76
+ # TODO: This is pretty ugly
77
+ case mail.mime_type
78
+ when 'text/plain'
79
+ # Text
80
+ email.text = mail.body.decoded
81
+ when 'text/html'
82
+ # HTML
83
+ email.html = mail.body.decoded
84
+ when 'multipart/alternative', 'multipart/mixed'
85
+ email.html = mail.html_part.decoded if mail.html_part
86
+ email.text = mail.text_part.decoded if mail.text_part
87
+
88
+ # This needs to be done better
89
+ mail.attachments.each do |a|
90
+ begin
91
+ t = Tempfile.new("sendgrid-actionmailer")
92
+ t.binmode
93
+ t.write(a.read)
94
+ t.flush
95
+ email.add_attachment(t, a.filename)
96
+ ensure
97
+ t.close
98
+ t.unlink
99
+ end
100
+ end
101
+ end
102
+
103
+ client.send(email)
104
+ end
105
+ end
106
+ end
@@ -1,3 +1,3 @@
1
1
  module SendGridActionMailer
2
- VERSION = '0.0.5'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'sendgrid-actionmailer/version'
4
+ require 'sendgrid_actionmailer/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'sendgrid-actionmailer'
@@ -18,8 +18,11 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'sendgrid-ruby', '~> 0.0'
21
+ spec.add_dependency 'mail', '~> 2.5'
22
+ spec.add_dependency 'sendgrid-ruby', '< 2.0'
22
23
 
23
24
  spec.add_development_dependency 'bundler', '~> 1.6'
24
25
  spec.add_development_dependency 'rake'
26
+ spec.add_development_dependency 'rspec', '~>3.2.0'
27
+ spec.add_development_dependency 'appraisal', '~> 2.1.0'
25
28
  end
@@ -0,0 +1,361 @@
1
+ require 'mail'
2
+
3
+ module SendGridActionMailer
4
+ describe DeliveryMethod do
5
+ subject(:mailer) do
6
+ DeliveryMethod.new(api_user: 'user', api_key: 'key')
7
+ end
8
+
9
+ class TestClient
10
+ attr_reader :sent_mail
11
+
12
+ def send(mail)
13
+ @sent_mail = mail
14
+ end
15
+ end
16
+
17
+ describe '#initialize' do
18
+ it 'configures the client API user' do
19
+ expect(mailer.client.api_user).to eq('user')
20
+ end
21
+
22
+ it 'configures the client API key' do
23
+ expect(mailer.client.api_key).to eq('key')
24
+ end
25
+ end
26
+
27
+ describe '#deliver!' do
28
+ let(:client) { TestClient.new }
29
+ let(:mail) do
30
+ Mail.new(
31
+ to: 'test@sendgrid.com',
32
+ from: 'taco@cat.limo',
33
+ subject: 'Hello, world!'
34
+ )
35
+ end
36
+
37
+ before { allow(SendGrid::Client).to receive(:new).and_return(client) }
38
+
39
+ it 'sets to' do
40
+ mailer.deliver!(mail)
41
+ expect(client.sent_mail.to).to eq(%w[test@sendgrid.com])
42
+ end
43
+
44
+ context 'there are ccs' do
45
+ before { mail.cc = 'burrito@cat.limo' }
46
+
47
+ it 'sets cc' do
48
+ mailer.deliver!(mail)
49
+ expect(client.sent_mail.cc).to eq(%w[burrito@cat.limo])
50
+ end
51
+ end
52
+
53
+ context 'there are bccs' do
54
+ before { mail.bcc = 'nachos@cat.limo' }
55
+
56
+ it 'sets bcc' do
57
+ mailer.deliver!(mail)
58
+ expect(client.sent_mail.bcc).to eq(%w[nachos@cat.limo])
59
+ end
60
+ end
61
+
62
+ it 'sets from' do
63
+ mailer.deliver!(mail)
64
+ expect(client.sent_mail.from).to eq('taco@cat.limo')
65
+ end
66
+
67
+ context 'from contains a friendly name' do
68
+ before { mail.from = 'Taco Cat <taco@cat.limo>'}
69
+
70
+ it 'sets from' do
71
+ mailer.deliver!(mail)
72
+ expect(client.sent_mail.from).to eq('taco@cat.limo')
73
+ end
74
+
75
+ it 'sets from_name' do
76
+ mailer.deliver!(mail)
77
+ expect(client.sent_mail.from_name).to eq('Taco Cat')
78
+ end
79
+ end
80
+
81
+ it 'sets subject' do
82
+ mailer.deliver!(mail)
83
+ expect(client.sent_mail.subject).to eq('Hello, world!')
84
+ end
85
+
86
+ it 'sets a text/plain body' do
87
+ mail.content_type = 'text/plain'
88
+ mail.body = 'I heard you like pineapple.'
89
+ mailer.deliver!(mail)
90
+ expect(client.sent_mail.text).to eq('I heard you like pineapple.')
91
+ end
92
+
93
+ it 'sets a text/html body' do
94
+ mail.content_type = 'text/html'
95
+ mail.body = 'I heard you like <b>pineapple</b>.'
96
+ mailer.deliver!(mail)
97
+ expect(client.sent_mail.html).to eq('I heard you like <b>pineapple</b>.')
98
+ end
99
+
100
+ context 'multipart/alternative' do
101
+ before do
102
+ mail.content_type 'multipart/alternative'
103
+ mail.part do |part|
104
+ part.text_part = Mail::Part.new do
105
+ content_type 'text/plain'
106
+ body 'I heard you like pineapple.'
107
+ end
108
+ part.html_part = Mail::Part.new do
109
+ content_type 'text/html'
110
+ body 'I heard you like <b>pineapple</b>.'
111
+ end
112
+ end
113
+ end
114
+
115
+ it 'sets the text body' do
116
+ mailer.deliver!(mail)
117
+ expect(client.sent_mail.text).to eq('I heard you like pineapple.')
118
+ end
119
+
120
+ it 'sets the html body' do
121
+ mailer.deliver!(mail)
122
+ expect(client.sent_mail.html)
123
+ .to eq('I heard you like <b>pineapple</b>.')
124
+ end
125
+ end
126
+
127
+ context 'multipart/mixed' do
128
+ before do
129
+ mail.content_type 'multipart/mixed'
130
+ mail.part do |part|
131
+ part.text_part = Mail::Part.new do
132
+ content_type 'text/plain'
133
+ body 'I heard you like pineapple.'
134
+ end
135
+ part.html_part = Mail::Part.new do
136
+ content_type 'text/html'
137
+ body 'I heard you like <b>pineapple</b>.'
138
+ end
139
+ end
140
+ mail.attachments['specs.rb'] = File.read(__FILE__)
141
+ end
142
+
143
+ it 'sets the text body' do
144
+ mailer.deliver!(mail)
145
+ expect(client.sent_mail.text).to eq('I heard you like pineapple.')
146
+ end
147
+
148
+ it 'sets the html body' do
149
+ mailer.deliver!(mail)
150
+ expect(client.sent_mail.html)
151
+ .to eq('I heard you like <b>pineapple</b>.')
152
+ end
153
+
154
+ it 'adds the attachment' do
155
+ expect(mail.attachments.first.read).to eq(File.read(__FILE__))
156
+ mailer.deliver!(mail)
157
+ attachment = client.sent_mail.attachments.first
158
+ expect(attachment[:name]).to eq('specs.rb')
159
+ end
160
+ end
161
+
162
+ context 'SMTPAPI' do
163
+ context 'it is not JSON' do
164
+ before { mail['X-SMTPAPI'] = '<xml>JSON sucks!</xml>' }
165
+
166
+ it 'raises a useful error' do
167
+ expect { mailer.deliver!(mail) }.to raise_error(
168
+ ArgumentError,
169
+ "X-SMTPAPI is not JSON: <xml>JSON sucks!</xml>"
170
+ )
171
+ end
172
+ end
173
+
174
+ context 'filters are present' do
175
+ before do
176
+ mail['X-SMTPAPI'] = {
177
+ filters: {
178
+ clicktrack: {
179
+ settings: {
180
+ enable: 0
181
+ }
182
+ },
183
+ dkim: {
184
+ settings: {
185
+ domain: 'example.com',
186
+ use_from: false
187
+ }
188
+ }
189
+ }
190
+ }.to_json
191
+ end
192
+
193
+ it 'gets attached' do
194
+ mailer.deliver!(mail)
195
+ expect(client.sent_mail.smtpapi.filters).to eq({
196
+ 'clicktrack' => {
197
+ 'settings' => {
198
+ 'enable' => 0
199
+ }
200
+ },
201
+ 'dkim' => {
202
+ 'settings' => {
203
+ 'domain' => 'example.com',
204
+ 'use_from' => false
205
+ }
206
+ }
207
+ })
208
+ end
209
+ end
210
+
211
+ context 'a category is present' do
212
+ before do
213
+ mail['X-SMTPAPI'] = { category: 'food_feline' }.to_json
214
+ end
215
+
216
+ it 'gets attached' do
217
+ mailer.deliver!(mail)
218
+ expect(client.sent_mail.smtpapi.category).to eq('food_feline')
219
+ end
220
+ end
221
+
222
+ context 'multiple categories are present' do
223
+ before do
224
+ mail['X-SMTPAPI'] = {
225
+ category: %w[food_feline cuisine_canine]
226
+ }.to_json
227
+ end
228
+
229
+ it 'attaches them all' do
230
+ mailer.deliver!(mail)
231
+ expect(client.sent_mail.smtpapi.category).to eq([
232
+ 'food_feline',
233
+ 'cuisine_canine',
234
+ ])
235
+ end
236
+ end
237
+
238
+ context 'send_at is present' do
239
+ before do
240
+ mail['X-SMTPAPI'] = {
241
+ send_at: 1409348513
242
+ }.to_json
243
+ end
244
+
245
+ it 'gets attached' do
246
+ mailer.deliver!(mail)
247
+ expect(client.sent_mail.smtpapi.send_at).to eq(1409348513)
248
+ end
249
+ end
250
+
251
+ context 'send_each_at is present' do
252
+ before do
253
+ mail['X-SMTPAPI'] = {
254
+ send_each_at: [1409348513, 1409348514]
255
+ }.to_json
256
+ end
257
+
258
+ it 'gets attached' do
259
+ mailer.deliver!(mail)
260
+ expect(client.sent_mail.smtpapi.send_each_at).to eq([1409348513, 1409348514])
261
+ end
262
+ end
263
+
264
+ context 'section is present' do
265
+ before do
266
+ mail['X-SMTPAPI'] = {
267
+ section: {
268
+ ":sectionName1" => "section 1 text",
269
+ ":sectionName2" => "section 2 text"
270
+ }
271
+ }.to_json
272
+ end
273
+
274
+ it 'gets attached' do
275
+ mailer.deliver!(mail)
276
+ expect(client.sent_mail.smtpapi.section).to eq({
277
+ ":sectionName1" => "section 1 text",
278
+ ":sectionName2" => "section 2 text"
279
+ })
280
+ end
281
+ end
282
+
283
+ context 'sub is present' do
284
+ before do
285
+ mail['X-SMTPAPI'] = {
286
+ sub: {
287
+ "-name-" => [
288
+ "John",
289
+ "Jane"
290
+ ],
291
+ "-customerID-" => [
292
+ "1234",
293
+ "5678"
294
+ ],
295
+ }
296
+ }.to_json
297
+ end
298
+
299
+ it 'gets attached' do
300
+ mailer.deliver!(mail)
301
+ expect(client.sent_mail.smtpapi.sub).to eq({
302
+ "-name-" => [
303
+ "John",
304
+ "Jane"
305
+ ],
306
+ "-customerID-" => [
307
+ "1234",
308
+ "5678"
309
+ ],
310
+ })
311
+ end
312
+ end
313
+
314
+ context 'asm_group_id is present' do
315
+ before do
316
+ mail['X-SMTPAPI'] = {
317
+ asm_group_id: 1
318
+ }.to_json
319
+ end
320
+
321
+ it 'gets attached' do
322
+ mailer.deliver!(mail)
323
+ expect(client.sent_mail.smtpapi.asm_group_id).to eq(1)
324
+ end
325
+ end
326
+
327
+ context 'unique_args are present' do
328
+ before do
329
+ mail['X-SMTPAPI'] = {
330
+ unique_args: {
331
+ customerAccountNumber: "55555",
332
+ activationAttempt: "1",
333
+ }
334
+ }.to_json
335
+ end
336
+
337
+ it 'gets attached' do
338
+ mailer.deliver!(mail)
339
+ expect(client.sent_mail.smtpapi.unique_args).to eq({
340
+ "customerAccountNumber" => "55555",
341
+ "activationAttempt" => "1",
342
+ })
343
+ end
344
+ end
345
+
346
+ context 'ip_pool is present' do
347
+ before do
348
+ mail['X-SMTPAPI'] = {
349
+ ip_pool: "pool_name"
350
+ }.to_json
351
+ end
352
+
353
+ it 'gets attached' do
354
+ mailer.deliver!(mail)
355
+ expect(client.sent_mail.smtpapi.ip_pool).to eq("pool_name")
356
+ end
357
+ end
358
+ end
359
+ end
360
+ end
361
+ end
@@ -0,0 +1 @@
1
+ require_relative '../lib/sendgrid_actionmailer'
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sendgrid-actionmailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eddie Zaneski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-01 00:00:00.000000000 Z
11
+ date: 2016-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: sendgrid-ruby
14
+ name: mail
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.0'
19
+ version: '2.5'
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: '0.0'
26
+ version: '2.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sendgrid-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "<"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,34 @@ dependencies:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.2.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.2.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: appraisal
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 2.1.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 2.1.0
55
97
  description: Use ActionMailer with SendGrid's Web API.
56
98
  email:
57
99
  - community@sendgrid.com
@@ -60,14 +102,24 @@ extensions: []
60
102
  extra_rdoc_files: []
61
103
  files:
62
104
  - ".gitignore"
105
+ - ".rspec"
106
+ - ".travis.yml"
107
+ - Appraisals
63
108
  - Gemfile
64
109
  - LICENSE.txt
65
110
  - README.md
66
111
  - Rakefile
112
+ - gemfiles/mail_2.5.gemfile
113
+ - gemfiles/mail_2.5.gemfile.lock
114
+ - gemfiles/mail_2.6.gemfile
115
+ - gemfiles/mail_2.6.gemfile.lock
67
116
  - lib/sendgrid-actionmailer.rb
68
- - lib/sendgrid-actionmailer/railtie.rb
69
- - lib/sendgrid-actionmailer/version.rb
117
+ - lib/sendgrid_actionmailer.rb
118
+ - lib/sendgrid_actionmailer/railtie.rb
119
+ - lib/sendgrid_actionmailer/version.rb
70
120
  - sendgrid-actionmailer.gemspec
121
+ - spec/lib/sendgrid_actionmailer_spec.rb
122
+ - spec/spec_helper.rb
71
123
  homepage: https://github.com/eddiezane/sendgrid-actionmailer
72
124
  licenses:
73
125
  - MIT
@@ -88,8 +140,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
140
  version: '0'
89
141
  requirements: []
90
142
  rubyforge_project:
91
- rubygems_version: 2.4.5
143
+ rubygems_version: 2.6.2
92
144
  signing_key:
93
145
  specification_version: 4
94
146
  summary: SendGrid support for ActionMailer.
95
- test_files: []
147
+ test_files:
148
+ - spec/lib/sendgrid_actionmailer_spec.rb
149
+ - spec/spec_helper.rb