mandrill_batch_mailer 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +15 -0
- data/Rakefile +13 -0
- data/lib/mandrill_batch_mailer.rb +4 -0
- data/lib/mandrill_batch_mailer/base_mailer.rb +231 -0
- data/lib/mandrill_batch_mailer/version.rb +3 -0
- data/spec/mandrill_batch_mailer/base_mailer_spec.rb +260 -0
- data/spec/spec_helper.rb +18 -0
- metadata +180 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 543546712df76b8951495980cc35097c2fef9254
|
4
|
+
data.tar.gz: ab6274490ddcb0cd98f6d39576d7d875e70fe78f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 13bf90c99ecf6819c6ee8b36c4b3e9e9b38eaf6c6686e2a010a0f3e69cf99a1c7852bd3173dd47f6e8582683e2a9e5b8d3ee950677ba5d0a00f8a9cc43a55ada
|
7
|
+
data.tar.gz: b5a2688b2f0b7fede0ad9a7305ff18c81d629a8816fdbb8fa7cddc2df0055da744523f924aaa2f02d9efaf60adcb322327ac5675084e5290e5e9d52a11f3ad88
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2013 YOURNAME
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# mandrill_batch_mailer
|
2
|
+
|
3
|
+
[![Code Coverage](https://coveralls.io/repos/schasse/mandrill_batch_mailer/badge.png?branch=master)](https://coveralls.io/r/schasse/mandrill_batch_mailer)
|
4
|
+
[![Build Status](https://travis-ci.org/schasse/mandrill_batch_mailer.png?branch=master)](https://travis-ci.org/schasse/mandrill_batch_mailer)
|
5
|
+
|
6
|
+
|
7
|
+
Send batched Mails via Mandrill API.
|
8
|
+
|
9
|
+
## INSTALLATION
|
10
|
+
|
11
|
+
gem install mandrill_batch_mailer
|
12
|
+
|
13
|
+
## EXAMPLE
|
14
|
+
|
15
|
+
TODO
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
|
8
|
+
Bundler::GemHelper.install_tasks
|
9
|
+
|
10
|
+
require 'rspec/core/rake_task'
|
11
|
+
RSpec::Core::RakeTask.new :spec
|
12
|
+
|
13
|
+
task default: :spec
|
@@ -0,0 +1,231 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'active_support/inflector'
|
3
|
+
require 'active_support/core_ext/object/try'
|
4
|
+
|
5
|
+
module MandrillBatchMailer
|
6
|
+
ENDPOINT = 'https://mandrillapp.com/api/1.0/messages/'\
|
7
|
+
'send-template.json'
|
8
|
+
|
9
|
+
def self.logger
|
10
|
+
@logger ||= rails_logger || Logger.new(STDOUT)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.logger=(logger)
|
14
|
+
@logger = logger
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.rails_logger
|
18
|
+
defined?(Rails) && Rails.logger
|
19
|
+
end
|
20
|
+
|
21
|
+
class BaseMailer
|
22
|
+
private
|
23
|
+
|
24
|
+
attr_accessor :caller_method_name
|
25
|
+
|
26
|
+
public
|
27
|
+
|
28
|
+
cattr_accessor :intercept_recipients, :interception_base_mail,
|
29
|
+
:perform_deliveries, :from_email, :from_name, :api_key
|
30
|
+
|
31
|
+
# Redirect all mails to one address.
|
32
|
+
self.intercept_recipients = true
|
33
|
+
# Set a mail address you want your mails redirected to. '+#{nr}' will be
|
34
|
+
# added for each recipient and the subject line includes the original mail
|
35
|
+
# address.
|
36
|
+
self.interception_base_mail = 'staging-notifier@gapfish.com'
|
37
|
+
# Set to true to *really* send data to mandrill.
|
38
|
+
self.perform_deliveries = false
|
39
|
+
|
40
|
+
def initialize(method)
|
41
|
+
self.caller_method_name = method
|
42
|
+
end
|
43
|
+
|
44
|
+
def mail(to: nil)
|
45
|
+
@tos = tos_from(to)
|
46
|
+
send_template mandrill_parameters
|
47
|
+
end
|
48
|
+
|
49
|
+
# feel free to override
|
50
|
+
def from_email
|
51
|
+
self.class.from_email
|
52
|
+
end
|
53
|
+
|
54
|
+
# feel free to override
|
55
|
+
def from_name
|
56
|
+
self.class.from_name || ''
|
57
|
+
end
|
58
|
+
|
59
|
+
# feel free to override
|
60
|
+
def tags
|
61
|
+
["#{template_name}"]
|
62
|
+
end
|
63
|
+
|
64
|
+
def api_key
|
65
|
+
self.class.api_key
|
66
|
+
end
|
67
|
+
|
68
|
+
class << self
|
69
|
+
# do it just as ActionMailer
|
70
|
+
def method_missing(method, *args)
|
71
|
+
mailer = new method
|
72
|
+
if mailer.respond_to? method
|
73
|
+
mailer.public_send(method, *args)
|
74
|
+
else
|
75
|
+
super method, *args
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
protected
|
81
|
+
|
82
|
+
def scope
|
83
|
+
"#{class_name.underscore.gsub('/', '.')}.#{caller_method_name}"
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def mandrill_parameters
|
89
|
+
{
|
90
|
+
key: api_key,
|
91
|
+
template_name: template_name,
|
92
|
+
template_content: [],
|
93
|
+
message: {
|
94
|
+
subject: subject,
|
95
|
+
from_email: from_email,
|
96
|
+
from_name: from_name,
|
97
|
+
to: to,
|
98
|
+
important: false,
|
99
|
+
track_opens: nil,
|
100
|
+
track_clicks: nil,
|
101
|
+
inline_css: true,
|
102
|
+
url_strip_qs: nil,
|
103
|
+
preserve_recipients: false,
|
104
|
+
view_content_link: nil,
|
105
|
+
tracking_domain: nil,
|
106
|
+
signing_domain: nil,
|
107
|
+
return_path_domain: nil,
|
108
|
+
merge: true,
|
109
|
+
global_merge_vars: global_merge_vars,
|
110
|
+
merge_vars: merge_vars,
|
111
|
+
tags: tags
|
112
|
+
},
|
113
|
+
async: true
|
114
|
+
}.deep_merge(_default)
|
115
|
+
end
|
116
|
+
|
117
|
+
def _default
|
118
|
+
given_defaults = (respond_to?(:default, true) && default) || {}
|
119
|
+
if MandrillBatchMailer::BaseMailer.intercept_recipients
|
120
|
+
given_defaults[:message].try(:delete, :to)
|
121
|
+
end
|
122
|
+
given_defaults
|
123
|
+
end
|
124
|
+
|
125
|
+
def template_name
|
126
|
+
"#{class_name.underscore}_#{caller_method_name}".split('/').last
|
127
|
+
.gsub '_', '-'
|
128
|
+
end
|
129
|
+
|
130
|
+
def tags
|
131
|
+
["#{template_name}_#{locale}"]
|
132
|
+
end
|
133
|
+
|
134
|
+
def locale
|
135
|
+
I18n.locale
|
136
|
+
end
|
137
|
+
|
138
|
+
def subject
|
139
|
+
'*|subject|*'
|
140
|
+
end
|
141
|
+
|
142
|
+
def to
|
143
|
+
if MandrillBatchMailer::BaseMailer.intercept_recipients
|
144
|
+
@tos.keys.size.times.map do |i|
|
145
|
+
{ email: MandrillBatchMailer::BaseMailer
|
146
|
+
.interception_base_mail.sub('@', "+#{i}@") }
|
147
|
+
end
|
148
|
+
else
|
149
|
+
@tos.keys.map { |to_email| { email: to_email } }
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def global_merge_vars
|
154
|
+
merge_vars_from(translations.merge(shared_translations))
|
155
|
+
end
|
156
|
+
|
157
|
+
def merge_vars
|
158
|
+
@tos.each_with_index.map do |to, i|
|
159
|
+
to_email, vars = to.to_a
|
160
|
+
if MandrillBatchMailer::BaseMailer.intercept_recipients
|
161
|
+
{ rcpt: MandrillBatchMailer::BaseMailer.interception_base_mail
|
162
|
+
.sub('@', "+#{i}@"),
|
163
|
+
vars: intercepted_merge_vars(to_email, vars)
|
164
|
+
}
|
165
|
+
else
|
166
|
+
{ rcpt: to_email,
|
167
|
+
vars: merge_vars_from(vars)
|
168
|
+
}
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def intercepted_merge_vars(to_email, vars)
|
174
|
+
merge_vars_from(vars.merge(
|
175
|
+
subject: "#{to_email} #{vars[:subject] || translations[:subject]}"))
|
176
|
+
end
|
177
|
+
|
178
|
+
## HELPER METHODS ##
|
179
|
+
|
180
|
+
# @return [Hash]
|
181
|
+
# p.e. { 'some@mail.ch' => { a_variable: 'Hello' } }
|
182
|
+
def tos_from(to)
|
183
|
+
case to
|
184
|
+
when String
|
185
|
+
{ to => {} }
|
186
|
+
when Array
|
187
|
+
to.map { |single_to| [single_to, {}] }.to_h
|
188
|
+
when Hash
|
189
|
+
to
|
190
|
+
else
|
191
|
+
to.to_h
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def translations
|
196
|
+
I18n.t scope, default: {}
|
197
|
+
end
|
198
|
+
|
199
|
+
def class_name
|
200
|
+
self.class.to_s
|
201
|
+
end
|
202
|
+
|
203
|
+
def shared_translations
|
204
|
+
I18n.t "#{class_name.deconstantize.underscore}.shared_translations",
|
205
|
+
default: {}
|
206
|
+
end
|
207
|
+
|
208
|
+
def merge_vars_from(translations)
|
209
|
+
translations.map do |key, translation|
|
210
|
+
{ name: key, content: translation }
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
def send_template(params)
|
215
|
+
if MandrillBatchMailer::BaseMailer.perform_deliveries
|
216
|
+
RestClient.post MandrillBatchMailer::ENDPOINT, params.to_json
|
217
|
+
params
|
218
|
+
else
|
219
|
+
params_inspect =
|
220
|
+
if defined? AwesomePrint
|
221
|
+
params.ai
|
222
|
+
else
|
223
|
+
params.inspect
|
224
|
+
end
|
225
|
+
MandrillBatchMailer.logger
|
226
|
+
.info "Sending Mandrill Mail: #{params_inspect}"
|
227
|
+
params
|
228
|
+
end
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
@@ -0,0 +1,260 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MandrillBatchMailer::BaseMailer, :dbless do
|
4
|
+
let(:user_dup) do
|
5
|
+
-> do
|
6
|
+
double locale: :de, email: Faker::Internet.email, first_name: Faker.name
|
7
|
+
end
|
8
|
+
end
|
9
|
+
let(:user) do
|
10
|
+
user_dup.call
|
11
|
+
end
|
12
|
+
let(:more_users) do
|
13
|
+
2.times.map { user_dup.call } + [user]
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:translations) do
|
17
|
+
{
|
18
|
+
mandrill_batch_mailer: {
|
19
|
+
shared_translations: {
|
20
|
+
salutation: 'Hello'
|
21
|
+
},
|
22
|
+
test_mailer: {
|
23
|
+
testing: {
|
24
|
+
subject: 'A Test Subject',
|
25
|
+
just_a_test: 'This is just a test',
|
26
|
+
regards: 'Regards, your dev team'
|
27
|
+
},
|
28
|
+
test_bulk: {
|
29
|
+
salutation: 'Hello %{name}'
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
class MandrillBatchMailer::TestMailer < MandrillBatchMailer::BaseMailer
|
37
|
+
def testing(user)
|
38
|
+
@user = user
|
39
|
+
mail to: user.email
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_bulk(users)
|
43
|
+
@user = users.first # TODO: think about I18n.locale
|
44
|
+
to_params = users.map do |user|
|
45
|
+
[user.email,
|
46
|
+
{ salutation: I18n.t(:salutation, name: user.first_name,
|
47
|
+
scope: 'mandrill.test_mailer.test_bulk') }]
|
48
|
+
end.to_h
|
49
|
+
mail to: to_params
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
let(:test_mailer) { MandrillBatchMailer::TestMailer.new :testing }
|
54
|
+
let(:base_mailer) { MandrillBatchMailer::BaseMailer.new :testing }
|
55
|
+
|
56
|
+
before do
|
57
|
+
I18n.backend.store_translations :en, translations
|
58
|
+
end
|
59
|
+
|
60
|
+
after do
|
61
|
+
I18n.backend.reload!
|
62
|
+
end
|
63
|
+
|
64
|
+
shared_context 'when intercepting', :intercept do
|
65
|
+
before do
|
66
|
+
@old_intercept = MandrillBatchMailer::BaseMailer.intercept_recipients
|
67
|
+
MandrillBatchMailer::BaseMailer.intercept_recipients = true
|
68
|
+
@old_intercept_mail =
|
69
|
+
MandrillBatchMailer::BaseMailer.interception_base_mail
|
70
|
+
MandrillBatchMailer::BaseMailer.interception_base_mail =
|
71
|
+
'notifier@gapfish.com'
|
72
|
+
end
|
73
|
+
after do
|
74
|
+
MandrillBatchMailer::BaseMailer.intercept_recipients = @old_value
|
75
|
+
MandrillBatchMailer::BaseMailer.interception_base_mail =
|
76
|
+
@old_intercept_mail
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
shared_context 'when not intercepting', intercept: false do
|
81
|
+
before do
|
82
|
+
@old_intercept = MandrillBatchMailer::BaseMailer.intercept_recipients
|
83
|
+
MandrillBatchMailer::BaseMailer.intercept_recipients = false
|
84
|
+
end
|
85
|
+
after do
|
86
|
+
MandrillBatchMailer::BaseMailer.intercept_recipients = @old_intercept
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
shared_context 'when delivering', :deliver do
|
91
|
+
before do
|
92
|
+
@old_deliveries = MandrillBatchMailer::BaseMailer.perform_deliveries
|
93
|
+
MandrillBatchMailer::BaseMailer.perform_deliveries = true
|
94
|
+
end
|
95
|
+
after do
|
96
|
+
MandrillBatchMailer::BaseMailer.perform_deliveries = @old_deliveries
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
shared_context 'when not delivering', deliver: false do
|
101
|
+
before do
|
102
|
+
@old_deveries = MandrillBatchMailer::BaseMailer.perform_deliveries
|
103
|
+
MandrillBatchMailer::BaseMailer.perform_deliveries = false
|
104
|
+
end
|
105
|
+
after do
|
106
|
+
MandrillBatchMailer::BaseMailer.perform_deliveries = @old_deliveries
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe '#mail', :intercept do
|
111
|
+
subject(:mail) { test_mailer.testing user }
|
112
|
+
it { should be_a Hash }
|
113
|
+
|
114
|
+
it 'has the correct template name' do
|
115
|
+
expect(mail[:template_name]).to eq 'test-mailer-testing'
|
116
|
+
end
|
117
|
+
|
118
|
+
context 'bulky' do
|
119
|
+
subject(:mail) { test_mailer.test_bulk more_users }
|
120
|
+
it { should be_a Hash }
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe '#template_name' do
|
125
|
+
subject { test_mailer.send :template_name }
|
126
|
+
|
127
|
+
it { should eq 'test-mailer-testing'}
|
128
|
+
|
129
|
+
context 'when calling from BaseMailer' do
|
130
|
+
subject { base_mailer.send :template_name }
|
131
|
+
|
132
|
+
it { should eq 'base-mailer-testing' }
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe '#subject' do
|
137
|
+
subject { test_mailer.send :subject }
|
138
|
+
context 'when intercepting', :intercept do
|
139
|
+
it { should eq '*|subject|*' }
|
140
|
+
end
|
141
|
+
context 'when not intercepting', intercept: false do
|
142
|
+
it { should eq '*|subject|*' }
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe '#from_name' do
|
147
|
+
# TODO: write the test, when mattr is defined
|
148
|
+
it 'uses the configured from_name'
|
149
|
+
end
|
150
|
+
|
151
|
+
describe '#to' do
|
152
|
+
before do
|
153
|
+
test_mailer.instance_variable_set :@tos, { user.email => [] }
|
154
|
+
end
|
155
|
+
subject { test_mailer.send :to }
|
156
|
+
|
157
|
+
context 'when intercepted', :intercept do
|
158
|
+
it { should eq [{ email: 'notifier+0@gapfish.com' }] }
|
159
|
+
end
|
160
|
+
|
161
|
+
context 'when not intercepted', intercept: false do
|
162
|
+
it { should eq [{ email: user.email }] }
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
describe '#global_merge_vars' do
|
167
|
+
let(:global_merge_vars) { test_mailer.send :global_merge_vars }
|
168
|
+
|
169
|
+
it 'should include the correct translations' do
|
170
|
+
expect([
|
171
|
+
{ name: :subject, content: 'A Test Subject' },
|
172
|
+
{ name: :just_a_test, content: 'This is just a test' },
|
173
|
+
{ name: :regards, content: 'Regards, your dev team' },
|
174
|
+
{ name: :salutation, content: 'Hello' }
|
175
|
+
].to_set).to be_subset global_merge_vars.to_set
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
describe '#merge_vars' do
|
180
|
+
before do
|
181
|
+
test_mailer.instance_variable_set :@tos,
|
182
|
+
base_mailer.send(:tos_from, user.email)
|
183
|
+
end
|
184
|
+
subject(:merge_vars) { test_mailer.send :merge_vars }
|
185
|
+
|
186
|
+
context 'when not intercept', intercept: false do
|
187
|
+
it { should eq [{ rcpt: user.email, vars: [] }]}
|
188
|
+
end
|
189
|
+
context 'when intercept_recipients', :intercept do
|
190
|
+
it { expect(merge_vars.first[:rcpt]).to eq 'notifier+0@gapfish.com' }
|
191
|
+
it do
|
192
|
+
expect(merge_vars.first[:vars].first[:content]).to include user.email
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
describe '#tos_from' do
|
198
|
+
subject { test_mailer.send :tos_from, input }
|
199
|
+
|
200
|
+
{
|
201
|
+
nil => {},
|
202
|
+
'' => { '' => {} },
|
203
|
+
'some@mail.de' => { 'some@mail.de' => {} },
|
204
|
+
[] => {},
|
205
|
+
['some@mail.de', 'some_other@mail.de'] => {
|
206
|
+
'some@mail.de' => {}, 'some_other@mail.de' => {} },
|
207
|
+
{ hello: :world } => { hello: :world }
|
208
|
+
}.each do |input, output|
|
209
|
+
context "when #{input} given" do
|
210
|
+
let(:input) { input }
|
211
|
+
it { should eq output }
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
describe '#translations' do
|
217
|
+
subject { test_mailer.send :translations }
|
218
|
+
it do
|
219
|
+
should eq translations[:mandrill_batch_mailer][:test_mailer][:testing]
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
describe '#shared_translations' do
|
224
|
+
subject { test_mailer.send :shared_translations }
|
225
|
+
it do
|
226
|
+
should eq translations[:mandrill_batch_mailer][:shared_translations]
|
227
|
+
.deep_merge(subject)
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
describe '#send_template' do
|
232
|
+
let(:params) { {} }
|
233
|
+
|
234
|
+
context 'when delivering', :deliver do
|
235
|
+
|
236
|
+
it "calls mandrill's endoint, when performing deliveries" do
|
237
|
+
expect(RestClient).to receive(:post)
|
238
|
+
.with(MandrillBatchMailer::ENDPOINT, params.to_json)
|
239
|
+
test_mailer.send :send_template, params
|
240
|
+
end
|
241
|
+
|
242
|
+
context 'when there happens an exception' do
|
243
|
+
before do
|
244
|
+
allow(RestClient).to receive(:post).and_raise(RestClient::Exception)
|
245
|
+
end
|
246
|
+
|
247
|
+
it 'raises exception' do
|
248
|
+
expect { test_mailer.send :send_template, params }.to raise_exception
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
context 'when not performing deliveries', deliver: false do
|
254
|
+
after { test_mailer.send :send_template, params }
|
255
|
+
it 'just logs something' do
|
256
|
+
expect(MandrillBatchMailer.logger).to receive(:info)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path '../../lib', __FILE__
|
2
|
+
require 'mandrill_batch_mailer'
|
3
|
+
require 'mandrill_batch_mailer/base_mailer'
|
4
|
+
|
5
|
+
require 'pry'
|
6
|
+
require 'faker'
|
7
|
+
require 'simplecov'
|
8
|
+
require 'coveralls'
|
9
|
+
|
10
|
+
SimpleCov.start
|
11
|
+
|
12
|
+
Coveralls.wear!
|
13
|
+
|
14
|
+
# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
|
15
|
+
|
16
|
+
RSpec.configure do |config|
|
17
|
+
config.order = 'random'
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,180 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mandrill_batch_mailer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- schasse
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.0.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: faker
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: travis
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: coveralls
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: cane
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pry
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description: Send batched Mails via Mandrill API
|
140
|
+
email:
|
141
|
+
- sebastian.schasse@gapfish.com
|
142
|
+
executables: []
|
143
|
+
extensions: []
|
144
|
+
extra_rdoc_files: []
|
145
|
+
files:
|
146
|
+
- MIT-LICENSE
|
147
|
+
- README.md
|
148
|
+
- Rakefile
|
149
|
+
- lib/mandrill_batch_mailer.rb
|
150
|
+
- lib/mandrill_batch_mailer/base_mailer.rb
|
151
|
+
- lib/mandrill_batch_mailer/version.rb
|
152
|
+
- spec/mandrill_batch_mailer/base_mailer_spec.rb
|
153
|
+
- spec/spec_helper.rb
|
154
|
+
homepage: http://github.com/schasse/mandrill_batch_mailer
|
155
|
+
licenses:
|
156
|
+
- MIT
|
157
|
+
metadata: {}
|
158
|
+
post_install_message:
|
159
|
+
rdoc_options: []
|
160
|
+
require_paths:
|
161
|
+
- lib
|
162
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
requirements: []
|
173
|
+
rubyforge_project:
|
174
|
+
rubygems_version: 2.2.2
|
175
|
+
signing_key:
|
176
|
+
specification_version: 4
|
177
|
+
summary: Send batched Mails via Mandrill API
|
178
|
+
test_files:
|
179
|
+
- spec/spec_helper.rb
|
180
|
+
- spec/mandrill_batch_mailer/base_mailer_spec.rb
|