delayed_mailer 1.0.2 → 1.0.3
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/README.rdoc +44 -0
- data/VERSION +1 -1
- data/delayed_mailer.gemspec +4 -4
- data/lib/delayed/mailer.rb +16 -8
- data/spec/delayed_mailer_spec.rb +11 -13
- metadata +5 -5
- data/README +0 -56
data/README.rdoc
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
= delayed_mailer
|
2
|
+
|
3
|
+
This gem hooks in Rails ActionMailer::Base and change the behavior of deliver_* methods to allways delegate the sending taks
|
4
|
+
to DelayedJob. With this in mind all your emails will be sent asynchronous instead of sycnhronous.
|
5
|
+
|
6
|
+
== Download
|
7
|
+
|
8
|
+
Gem:
|
9
|
+
gem install delayed_mailer
|
10
|
+
|
11
|
+
== Installation
|
12
|
+
|
13
|
+
Load the gem in the appropriate environments using Rails' 2.1+ gem support. For example, I'm loading this in
|
14
|
+
config/environments/production.rb and config/environments/staging.rb:
|
15
|
+
|
16
|
+
config.gem 'delayed_mailer'
|
17
|
+
|
18
|
+
== How it works
|
19
|
+
|
20
|
+
When the gem is loaded it change the ActionMailer::Base method_missing to use send_later method of DelayedJob instead of
|
21
|
+
normal deliver_*. If you want synchronous send you just call deliver_*!. The deliver with bang (!) will
|
22
|
+
send the message using default ActionMailer method.
|
23
|
+
|
24
|
+
== Version Compatibility
|
25
|
+
|
26
|
+
specs.should pass if RUBY_VERSION =~ /^1.(8.6|8.7|9.1)$/ && Rails.version =~ /^(1.2.6|2.\d.\d)$/
|
27
|
+
|
28
|
+
== Author
|
29
|
+
|
30
|
+
* Anderson Dias - http://github.com/andersondias
|
31
|
+
|
32
|
+
== Contributors
|
33
|
+
|
34
|
+
* Daniel Lopes - http://github.com/danielvlopes
|
35
|
+
* Overbryd - http://github.com/Overbryd
|
36
|
+
* Grimen - http://github.com/grimen
|
37
|
+
|
38
|
+
== Copyright
|
39
|
+
|
40
|
+
Copyright (c) 2009 Anderson Dias, released under the MIT license
|
41
|
+
|
42
|
+
Email: andersondaraujo[at]gmail.com
|
43
|
+
Twitter: extendsmymind
|
44
|
+
Blog: http://extendsmymind.wordpress.com
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.3
|
data/delayed_mailer.gemspec
CHANGED
@@ -5,22 +5,22 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{delayed_mailer}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Anderson Ara\303\272jo"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-04-12}
|
13
13
|
s.description = %q{Change the behavior of ActionMailer::Base in Rails to allways use delayed_job's send_later method.}
|
14
14
|
s.email = %q{andersondaraujo@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
"README"
|
17
|
+
"README.rdoc"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
21
|
".gitignore",
|
22
22
|
"LICENSE",
|
23
|
-
"README",
|
23
|
+
"README.rdoc",
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
26
|
"delayed_mailer.gemspec",
|
data/lib/delayed/mailer.rb
CHANGED
@@ -4,18 +4,26 @@ module Delayed
|
|
4
4
|
module Mailer
|
5
5
|
|
6
6
|
def self.included(base)
|
7
|
+
|
7
8
|
class << base
|
8
9
|
alias_method :original_method_missing, :method_missing
|
9
|
-
|
10
|
-
def method_missing(method_symbol, *params)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
|
11
|
+
def method_missing(method_symbol, *params, &block)
|
12
|
+
method_name = method_symbol.to_s
|
13
|
+
|
14
|
+
case method_name
|
15
|
+
when /^deliver_([_a-z]\w*)$/
|
16
|
+
send_later(method_name, *params, &block)
|
17
|
+
when /^deliver_([_a-z]\w*)!$/
|
18
|
+
original_method_missing(method_name.gsub(/!$/,""), *params, &block)
|
19
|
+
else
|
20
|
+
original_method_missing(method_name, *params, &block)
|
15
21
|
end
|
16
22
|
end
|
17
|
-
|
18
|
-
|
23
|
+
|
24
|
+
end #close eigen class
|
25
|
+
|
26
|
+
end #close hook
|
19
27
|
|
20
28
|
end
|
21
29
|
end
|
data/spec/delayed_mailer_spec.rb
CHANGED
@@ -20,31 +20,29 @@ describe AsynchTestMailer do
|
|
20
20
|
Object.const_set 'RAILS_ENV', 'test' unless defined?(::RAILS_ENV)
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
23
|
+
before(:each) do
|
24
|
+
@emails = ActionMailer::Base.deliveries
|
25
|
+
@emails.clear
|
26
|
+
@params = 'noreply@myapp.com', 'jonh@doe.com'
|
27
|
+
AsynchTestMailer.stub(:send_later)
|
28
|
+
end
|
30
29
|
|
30
|
+
describe 'deliver_test_mail' do
|
31
31
|
it 'should not deliver the email at this moment' do
|
32
32
|
AsynchTestMailer.deliver_test_mail *@params
|
33
33
|
@emails.size.should == 0
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'should send deliver action to delayed job list' do
|
37
|
-
AsynchTestMailer.should_receive(:send_later).with('deliver_test_mail
|
37
|
+
AsynchTestMailer.should_receive(:send_later).with('deliver_test_mail', *@params)
|
38
38
|
AsynchTestMailer.deliver_test_mail *@params
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
42
|
describe 'deliver_test_mail!' do
|
43
|
-
it 'should deliver the mail' do
|
44
|
-
|
45
|
-
emails.
|
46
|
-
AsynchTestMailer.deliver_test_mail!('noreply@autoki.de', 'joe@doe.com')
|
47
|
-
emails.size.should == 1
|
43
|
+
it 'should deliver the mail now' do
|
44
|
+
AsynchTestMailer.deliver_test_mail! *@params
|
45
|
+
@emails.size.should == 1
|
48
46
|
end
|
49
47
|
end
|
50
48
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 1.0.
|
8
|
+
- 3
|
9
|
+
version: 1.0.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- "Anderson Ara\xC3\xBAjo"
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-04-12 00:00:00 -03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -39,12 +39,12 @@ extensions: []
|
|
39
39
|
|
40
40
|
extra_rdoc_files:
|
41
41
|
- LICENSE
|
42
|
-
- README
|
42
|
+
- README.rdoc
|
43
43
|
files:
|
44
44
|
- .document
|
45
45
|
- .gitignore
|
46
46
|
- LICENSE
|
47
|
-
- README
|
47
|
+
- README.rdoc
|
48
48
|
- Rakefile
|
49
49
|
- VERSION
|
50
50
|
- delayed_mailer.gemspec
|
data/README
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
DelayedJobMailer
|
2
|
-
==============
|
3
|
-
|
4
|
-
This plugin provides a module which - when included into an ActionMailer subclass - pushes all emails that would
|
5
|
-
normally be delivered synchronously into a queue for asynchronous processing. For queuing it relies on the delayed_job
|
6
|
-
plugin ( http://github.com/tobi/delayed_job ).
|
7
|
-
|
8
|
-
How it works
|
9
|
-
============
|
10
|
-
|
11
|
-
The plugin provides a module Delayed::Mailer. To make a mailer use a queue simply include it into the class like this:
|
12
|
-
|
13
|
-
class MyMailer < ActionMailer::Base
|
14
|
-
include Delayed::Mailer
|
15
|
-
end
|
16
|
-
|
17
|
-
From now on all MyMailer.deliver_whatever_email calls create an entry delayed_job queue.
|
18
|
-
If you still want to deliver mail sycnhronously add a bang to the method call: MyMailer.deliver_whatever_email!
|
19
|
-
|
20
|
-
To set asynchronous mailing as project default, you need to create an initializer file as follows:
|
21
|
-
|
22
|
-
# config/initializers/delayed_mailer.rb
|
23
|
-
class ActionMailer::Base
|
24
|
-
include Delayed::Mailer
|
25
|
-
end
|
26
|
-
|
27
|
-
Installation
|
28
|
-
============
|
29
|
-
|
30
|
-
script/plugin install git://github.com/andersondias/delayed_job_mailer.git
|
31
|
-
|
32
|
-
Configuration
|
33
|
-
=============
|
34
|
-
|
35
|
-
Delayed e-mails is an awesome thing in production environments, but for e-mail specs/tests in testing environments it can be a mess causing specs/tests to fail because the e-mail haven't been sent directly. Therefore you can configure what environments that should be excluded like so:
|
36
|
-
|
37
|
-
# config/initializers/delayed_mailer.rb
|
38
|
-
|
39
|
-
Delayed::Mailer.excluded_environments = [:test, :cucumber] # etc.
|
40
|
-
|
41
|
-
...
|
42
|
-
|
43
|
-
Credits
|
44
|
-
=======
|
45
|
-
|
46
|
-
This plugin is a delayed job plugin based on langalex workling_mailer
|
47
|
-
plugin that can be found at http://github.com/langalex/workling_mailer
|
48
|
-
|
49
|
-
Contact
|
50
|
-
=======
|
51
|
-
|
52
|
-
Copyright (c) 2009 Anderson Dias, released under the MIT license
|
53
|
-
|
54
|
-
Email: andersondaraujo[at]gmail.com
|
55
|
-
Twitter: extendsmymind
|
56
|
-
Blog: http://extendsmymind.wordpress.com
|