mandrill_batch_mailer 0.0.1
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 +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
|
+
[](https://coveralls.io/r/schasse/mandrill_batch_mailer)
|
4
|
+
[](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
|