mandrill_mailer 0.1.10 → 0.2.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.
- data/.rspec +1 -0
- data/Gemfile.lock +9 -2
- data/README.md +0 -1
- data/lib/mandrill_mailer.rb +15 -8
- data/lib/mandrill_mailer/mock.rb +1 -0
- data/lib/mandrill_mailer/railtie.rb +6 -5
- data/lib/mandrill_mailer/template_mailer.rb +6 -2
- data/lib/mandrill_mailer/version.rb +1 -1
- data/mandrill_mailer.gemspec +3 -0
- data/spec/fake_rails/fake_rails.rb +71 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/{mandrill_mailer_spec.rb → template_mailer_spec.rb} +73 -10
- metadata +23 -4
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
mandrill_mailer (0.0
|
4
|
+
mandrill_mailer (0.2.0)
|
5
5
|
actionpack
|
6
6
|
activesupport
|
7
|
+
mailchimp (= 0.0.7.alpha)
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: http://rubygems.org/
|
@@ -29,10 +30,16 @@ GEM
|
|
29
30
|
diff-lcs (1.1.3)
|
30
31
|
erubis (2.7.0)
|
31
32
|
hike (1.2.1)
|
33
|
+
httparty (0.9.0)
|
34
|
+
multi_json (~> 1.0)
|
35
|
+
multi_xml
|
32
36
|
i18n (0.6.1)
|
33
37
|
journey (1.0.4)
|
38
|
+
mailchimp (0.0.7.alpha)
|
39
|
+
httparty
|
34
40
|
method_source (0.8)
|
35
41
|
multi_json (1.3.6)
|
42
|
+
multi_xml (0.5.1)
|
36
43
|
pry (0.9.10)
|
37
44
|
coderay (~> 1.0.5)
|
38
45
|
method_source (~> 0.8)
|
@@ -40,7 +47,7 @@ GEM
|
|
40
47
|
rack (1.4.1)
|
41
48
|
rack-cache (1.2)
|
42
49
|
rack (>= 0.4)
|
43
|
-
rack-test (0.6.
|
50
|
+
rack-test (0.6.2)
|
44
51
|
rack (>= 1.0)
|
45
52
|
rspec (2.11.0)
|
46
53
|
rspec-core (~> 2.11.0)
|
data/README.md
CHANGED
data/lib/mandrill_mailer.rb
CHANGED
@@ -5,15 +5,22 @@ require 'mandrill_mailer/template_mailer'
|
|
5
5
|
require 'mandrill_mailer/version'
|
6
6
|
|
7
7
|
module MandrillMailer
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
if defined?(Rails)
|
9
|
+
def self.configure(&block)
|
10
|
+
if block_given?
|
11
|
+
block.call(MandrillMailer::Railtie.config.mandrill_mailer)
|
12
|
+
else
|
13
|
+
MandrillMailer::Railtie.config.mandrill_mailer
|
14
|
+
end
|
13
15
|
end
|
14
|
-
end
|
15
16
|
|
16
|
-
|
17
|
-
|
17
|
+
def self.config
|
18
|
+
MandrillMailer::Railtie.config.mandrill_mailer
|
19
|
+
end
|
20
|
+
else
|
21
|
+
def self.config
|
22
|
+
@@config ||= OpenStruct.new(api_key: nil)
|
23
|
+
@@config
|
24
|
+
end
|
18
25
|
end
|
19
26
|
end
|
data/lib/mandrill_mailer/mock.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
module MandrillMailer
|
4
|
-
|
5
|
-
|
1
|
+
if defined?(Rails)
|
2
|
+
require 'rails'
|
3
|
+
module MandrillMailer
|
4
|
+
class Railtie < Rails::Railtie
|
5
|
+
config.mandrill_mailer = ActiveSupport::OrderedOptions.new
|
6
|
+
end
|
6
7
|
end
|
7
8
|
end
|
@@ -251,7 +251,11 @@ module MandrillMailer
|
|
251
251
|
end
|
252
252
|
|
253
253
|
def image_path(image)
|
254
|
-
|
254
|
+
if defined? Rails
|
255
|
+
ActionController::Base.helpers.asset_path(image)
|
256
|
+
else
|
257
|
+
method_missing(:image_path, image)
|
258
|
+
end
|
255
259
|
end
|
256
260
|
|
257
261
|
def image_url(image)
|
@@ -278,7 +282,7 @@ module MandrillMailer
|
|
278
282
|
|
279
283
|
# single to params item
|
280
284
|
def to_params_item(item)
|
281
|
-
return {"email" => item, "name" =>
|
285
|
+
return {"email" => item, "name" => item} unless item.kind_of? Hash
|
282
286
|
item
|
283
287
|
end
|
284
288
|
|
data/mandrill_mailer.gemspec
CHANGED
@@ -0,0 +1,71 @@
|
|
1
|
+
# Public: This fake rails class is used to test things such as the method_missing route proxy
|
2
|
+
# and image_url helpers
|
3
|
+
#
|
4
|
+
# Use Rails.unload! to 'unrequire' this class, you should call this after every test
|
5
|
+
# which uses it so other tests aren't polluted by having a Rails class defined
|
6
|
+
#
|
7
|
+
# You can define routes to be used in testing by doing:
|
8
|
+
#
|
9
|
+
# Rails.application.routes.draw do |builder|
|
10
|
+
# builder.course_url "/course/1"
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# So then sending the course url helper to the mailer will return the desired url.
|
14
|
+
#
|
15
|
+
# In order to use the url helpers, the MandrillMailer.config.default_url_options[:host]
|
16
|
+
# option needs to be set. So you can set it to something like:
|
17
|
+
#
|
18
|
+
# MandrillMailer.config.default_url_options[:host] = 'localhost'
|
19
|
+
#
|
20
|
+
class Rails
|
21
|
+
def self.unload!
|
22
|
+
Object.send(:remove_const, :Rails)
|
23
|
+
Object.send(:remove_const, :ActionController)
|
24
|
+
end
|
25
|
+
# Rails.application.routes.url_helpers
|
26
|
+
def self.application
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.routes
|
31
|
+
self
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.url_helpers
|
35
|
+
@@url_helpers
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.draw(&block)
|
39
|
+
@@url_helpers = RouteBuilder.new(block)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.default_url_options
|
43
|
+
@@url_options ||= {}
|
44
|
+
end
|
45
|
+
|
46
|
+
class RouteBuilder
|
47
|
+
def initialize(routes_proc)
|
48
|
+
routes_proc.call(self)
|
49
|
+
end
|
50
|
+
|
51
|
+
def method_missing(method, *args)
|
52
|
+
define_singleton_method(method) do |*method_args|
|
53
|
+
internal_args = args || ['']
|
54
|
+
"http://#{method_args.extract_options![:host]}#{internal_args.first}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# ActionController::Base.helpers.asset_path(image)
|
61
|
+
module ActionController
|
62
|
+
class Base
|
63
|
+
def self.helpers
|
64
|
+
self
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.asset_path(asset)
|
68
|
+
"http://#{Rails.default_url_options[:host]}assets/#{asset}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -12,14 +12,37 @@ describe MandrillMailer::TemplateMailer do
|
|
12
12
|
MandrillMailer.config.any_instance.stub(:image_path).and_return(image_path)
|
13
13
|
end
|
14
14
|
|
15
|
-
#
|
16
|
-
|
17
|
-
|
15
|
+
describe '#image_path' do
|
16
|
+
subject { mailer.image_path('logo.png') }
|
17
|
+
|
18
|
+
context 'Rails exists' do
|
19
|
+
let(:image) { 'image.png' }
|
20
|
+
let(:host) { 'codeschool.com' }
|
21
|
+
let(:router) { Rails.application.routes.url_helpers }
|
22
|
+
|
23
|
+
before do
|
24
|
+
# use load instead of require since we have to reload for every test
|
25
|
+
mailer.send(:load, 'fake_rails/fake_rails.rb')
|
26
|
+
MandrillMailer.config.default_url_options[:host] = host
|
27
|
+
end
|
28
|
+
|
29
|
+
# Essentially un-requiring the fake rails class so it doesn't pollute
|
30
|
+
# the rest of the tests
|
31
|
+
after do
|
32
|
+
Rails.unload!
|
33
|
+
end
|
18
34
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
35
|
+
it 'should return the image url' do
|
36
|
+
mailer.send(:image_path, image).should eq ActionController::Base.asset_path(image)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'Rails does not exist' do
|
41
|
+
it 'should raise exception' do
|
42
|
+
->{ subject }.should raise_error
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
23
46
|
|
24
47
|
describe '#mandrill_args' do
|
25
48
|
let(:arg_name) { 'USER_NAME' }
|
@@ -35,13 +58,12 @@ describe MandrillMailer::TemplateMailer do
|
|
35
58
|
describe '#format_to_params' do
|
36
59
|
let(:email) { 'bob@email.com' }
|
37
60
|
let(:name) { 'bob' }
|
38
|
-
let(:default_name) { 'Code School Customer' }
|
39
61
|
|
40
62
|
context 'with a single email string' do
|
41
63
|
subject { mailer.send(:format_to_params, email) }
|
42
64
|
|
43
65
|
it 'should format args to a format mandrill likes' do
|
44
|
-
should eq [{"email" => email, "name" =>
|
66
|
+
should eq [{"email" => email, "name" => email}]
|
45
67
|
end
|
46
68
|
end
|
47
69
|
|
@@ -49,7 +71,7 @@ describe MandrillMailer::TemplateMailer do
|
|
49
71
|
subject { mailer.send(:format_to_params, [email]) }
|
50
72
|
|
51
73
|
it 'should format args to a format mandrill likes' do
|
52
|
-
should eq [{"email" => email, "name" =>
|
74
|
+
should eq [{"email" => email, "name" => email}]
|
53
75
|
end
|
54
76
|
end
|
55
77
|
|
@@ -129,4 +151,45 @@ describe MandrillMailer::TemplateMailer do
|
|
129
151
|
})
|
130
152
|
end
|
131
153
|
end
|
154
|
+
|
155
|
+
describe 'url helpers in mailer' do
|
156
|
+
subject { mailer.send(:course_url) }
|
157
|
+
|
158
|
+
context 'Rails is defined (Rails app)' do
|
159
|
+
let(:url) { '/courses/1' }
|
160
|
+
let(:host) { 'codeschool.com' }
|
161
|
+
let(:router) { Rails.application.routes.url_helpers }
|
162
|
+
|
163
|
+
before do
|
164
|
+
# use load since we are loading multiple times
|
165
|
+
mailer.send(:load, 'fake_rails/fake_rails.rb')
|
166
|
+
MandrillMailer.config.default_url_options[:host] = host
|
167
|
+
Rails.application.routes.draw do |builder|
|
168
|
+
builder.course_url "#{url}"
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
# Essentially un-requiring the fake rails class so it doesn't pollute
|
173
|
+
# the rest of the tests
|
174
|
+
after do
|
175
|
+
Rails.unload!
|
176
|
+
end
|
177
|
+
|
178
|
+
it 'should return the correct route' do
|
179
|
+
subject.should eq router.course_url(host: host)
|
180
|
+
end
|
181
|
+
|
182
|
+
context 'route helper with an argument' do
|
183
|
+
it 'should return the correct route' do
|
184
|
+
subject.should eq router.course_url({id: 1, title: 'zombies'}, host: host)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
context 'Rails is not defined' do
|
190
|
+
it 'should raise an exception' do
|
191
|
+
->{subject}.should raise_error
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
132
195
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mandrill_mailer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -43,6 +43,22 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: mailchimp
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - '='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.0.7.alpha
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.0.7.alpha
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
63
|
name: pry
|
48
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,6 +99,7 @@ extensions: []
|
|
83
99
|
extra_rdoc_files: []
|
84
100
|
files:
|
85
101
|
- .gitignore
|
102
|
+
- .rspec
|
86
103
|
- Gemfile
|
87
104
|
- Gemfile.lock
|
88
105
|
- README.md
|
@@ -93,8 +110,9 @@ files:
|
|
93
110
|
- lib/mandrill_mailer/version.rb
|
94
111
|
- mandrill_mailer-0.0.2.gem
|
95
112
|
- mandrill_mailer.gemspec
|
96
|
-
- spec/
|
113
|
+
- spec/fake_rails/fake_rails.rb
|
97
114
|
- spec/spec_helper.rb
|
115
|
+
- spec/template_mailer_spec.rb
|
98
116
|
homepage: https://github.com/renz45/mandrill_mailer
|
99
117
|
licenses: []
|
100
118
|
post_install_message:
|
@@ -120,5 +138,6 @@ signing_key:
|
|
120
138
|
specification_version: 3
|
121
139
|
summary: Transactional Mailer for Mandrill
|
122
140
|
test_files:
|
123
|
-
- spec/
|
141
|
+
- spec/fake_rails/fake_rails.rb
|
124
142
|
- spec/spec_helper.rb
|
143
|
+
- spec/template_mailer_spec.rb
|