resque_mailer 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.
- data/.document +3 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +53 -0
- data/Rakefile +45 -0
- data/VERSION +1 -0
- data/lib/resque_mailer.rb +33 -0
- data/rails/init.rb +1 -0
- data/spec/resque_mailer_spec.rb +67 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +9 -0
- metadata +76 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Nick Plante
|
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.rdoc
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
= ResqueMailer
|
2
|
+
|
3
|
+
A gem plugin which allows messages prepared by ActionMailer to be delivered asynchronously.
|
4
|
+
Assumes that you are using Resque (http://github.com/defunkt/resque) for your background jobs.
|
5
|
+
|
6
|
+
== Usage
|
7
|
+
|
8
|
+
Include Resque::Mailer in your ActionMailer subclass(es) like this:
|
9
|
+
|
10
|
+
class MyMailer < ActionMailer::Base
|
11
|
+
include Resque::Mailer
|
12
|
+
end
|
13
|
+
|
14
|
+
Now, when MyMailer.deliver_subject_email is called, an entry will be created in the job queue.
|
15
|
+
Note that you can still have mail delivered synchronously by using the bang method variant:
|
16
|
+
MyMailer.deliver_subject_email!
|
17
|
+
|
18
|
+
To always use asynchronous delivery by default, create an initializer in your Rails project like so:
|
19
|
+
|
20
|
+
# config/initializers/resque_mailer.rb
|
21
|
+
class ActionMailer::Base
|
22
|
+
include Resque::Mailer
|
23
|
+
end
|
24
|
+
|
25
|
+
== Installation
|
26
|
+
|
27
|
+
Install it as a plugin or as a gem plugin.
|
28
|
+
|
29
|
+
script/plugin install git://github.com/zapnap/resque_mailer.git
|
30
|
+
|
31
|
+
config.gem 'resque_mailer'
|
32
|
+
|
33
|
+
== Testing
|
34
|
+
|
35
|
+
You don't want to be sending actual emails in the test environment, so you can configure the
|
36
|
+
environments that should be excluded.
|
37
|
+
|
38
|
+
# config/initializers/resque_mailer.rb
|
39
|
+
Resque::Mailer.excluded_environments = [:test, :cucumber]
|
40
|
+
|
41
|
+
== Note on Patches / Pull Requests
|
42
|
+
|
43
|
+
* Fork the project.
|
44
|
+
* Make your feature addition or bug fix.
|
45
|
+
* Add tests for it. This is important so I don't break it in a future version unintentionally.
|
46
|
+
* Commit, do not mess with rakefile, version, or history.
|
47
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
48
|
+
* Send me a pull request. Bonus points for topic branches.
|
49
|
+
|
50
|
+
== Credits
|
51
|
+
|
52
|
+
This work is basically a forked version of delayed_job_mailer http://github.com/andersondias/delayed_job_mailer) by Anderson Dias
|
53
|
+
(which in turn was inspired by Alexander Lang's workling_mailer). Enhanced and modified to work with Resque by Nick Plante.
|
data/Rakefile
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "resque_mailer"
|
8
|
+
gem.summary = %Q{Rails plugin for sending asynchronous email with ActionMailer and Resque}
|
9
|
+
gem.description = %Q{Rails plugin for sendings asynchronous email with ActionMailer and Resque}
|
10
|
+
gem.email = "nap@zerosum.org"
|
11
|
+
gem.homepage = "http://github.com/zapnap/resque_mailer"
|
12
|
+
gem.authors = ["Nick Plante"]
|
13
|
+
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
|
+
end
|
16
|
+
Jeweler::GemcutterTasks.new
|
17
|
+
rescue LoadError
|
18
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
19
|
+
end
|
20
|
+
|
21
|
+
require 'spec/rake/spectask'
|
22
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
23
|
+
spec.libs << 'lib' << 'spec'
|
24
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
25
|
+
end
|
26
|
+
|
27
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
28
|
+
spec.libs << 'lib' << 'spec'
|
29
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
30
|
+
spec.rcov = true
|
31
|
+
end
|
32
|
+
|
33
|
+
task :spec => :check_dependencies
|
34
|
+
|
35
|
+
task :default => :spec
|
36
|
+
|
37
|
+
require 'rake/rdoctask'
|
38
|
+
Rake::RDocTask.new do |rdoc|
|
39
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
40
|
+
|
41
|
+
rdoc.rdoc_dir = 'rdoc'
|
42
|
+
rdoc.title = "resque_mailer #{version}"
|
43
|
+
rdoc.rdoc_files.include('README*')
|
44
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
45
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Resque
|
2
|
+
module Mailer
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.extend(ClassMethods)
|
6
|
+
end
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
def method_missing(method_symbol, *params)
|
10
|
+
|
11
|
+
if ::Resque::Mailer.excluded_environments &&
|
12
|
+
::Resque::Mailer.excluded_environments.include?(::RAILS_ENV.to_sym)
|
13
|
+
return super(method_symbol, *params)
|
14
|
+
end
|
15
|
+
|
16
|
+
case method_symbol.id2name
|
17
|
+
when /^deliver_([_a-z]\w*)\!/ then super(method_symbol, *params)
|
18
|
+
when /^deliver_([_a-z]\w*)/ then Resque.enqueue("#{method_symbol}!", *params)
|
19
|
+
else super(method_symbol, *params)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.excluded_environments=(*environments)
|
25
|
+
@@excluded_environments = environments && environments.flatten.collect! { |env| env.to_sym }
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.excluded_environments
|
29
|
+
@@excluded_environments ||= []
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
data/rails/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib', 'resque_mailer'))
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
gem 'actionmailer', '>= 2.2.2'
|
5
|
+
require 'action_mailer'
|
6
|
+
|
7
|
+
ActionMailer::Base.delivery_method = :test
|
8
|
+
|
9
|
+
class AsynchTestMailer < ActionMailer::Base
|
10
|
+
include Resque::Mailer
|
11
|
+
|
12
|
+
def test_mail(from, to)
|
13
|
+
@subject = 'subject'
|
14
|
+
@body = 'mail body'
|
15
|
+
@recipients = to
|
16
|
+
@from = from
|
17
|
+
@sent_on = Time.now
|
18
|
+
@headers = {}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe AsynchTestMailer do
|
23
|
+
before do
|
24
|
+
Object.const_set 'RAILS_ENV', 'test' unless defined?(::RAILS_ENV)
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'deliver_test_mail' do
|
28
|
+
before(:each) do
|
29
|
+
@emails = ActionMailer::Base.deliveries
|
30
|
+
@emails.clear
|
31
|
+
@params = 'info@mogoterra.com', 'test@test.net'
|
32
|
+
Resque.stub(:enqueue)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should not deliver the email at this moment' do
|
36
|
+
AsynchTestMailer.deliver_test_mail *@params
|
37
|
+
@emails.size.should == 0
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should send deliver action to delayed job list' do
|
41
|
+
Resque.should_receive(:enqueue).with('deliver_test_mail!', *@params)
|
42
|
+
AsynchTestMailer.deliver_test_mail *@params
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should not send deliver action to delayed job list for environments where delayed job mailer is disabled' do
|
46
|
+
excluded_environments = [:cucumber, :foo, 'bar']
|
47
|
+
::Resque::Mailer.excluded_environments = excluded_environments
|
48
|
+
|
49
|
+
excluded_environments.each do |env|
|
50
|
+
Object.send :remove_const, 'RAILS_ENV'
|
51
|
+
Object.const_set 'RAILS_ENV', env.to_s
|
52
|
+
|
53
|
+
Resque.should_not_receive(:enqueue)
|
54
|
+
AsynchTestMailer.deliver_test_mail *@params
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe 'deliver_test_mail!' do
|
60
|
+
it 'should deliver the mail' do
|
61
|
+
emails = ActionMailer::Base.deliveries
|
62
|
+
emails.clear
|
63
|
+
AsynchTestMailer.deliver_test_mail! 'info@mogoterra.com', 'test@test.net'
|
64
|
+
emails.size.should == 1
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: resque_mailer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nick Plante
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-01-08 00:00:00 -05:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rspec
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.2.9
|
24
|
+
version:
|
25
|
+
description: Rails plugin for sendings asynchronous email with ActionMailer and Resque
|
26
|
+
email: nap@zerosum.org
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- LICENSE
|
33
|
+
- README.rdoc
|
34
|
+
files:
|
35
|
+
- .document
|
36
|
+
- .gitignore
|
37
|
+
- LICENSE
|
38
|
+
- README.rdoc
|
39
|
+
- Rakefile
|
40
|
+
- VERSION
|
41
|
+
- lib/resque_mailer.rb
|
42
|
+
- rails/init.rb
|
43
|
+
- spec/resque_mailer_spec.rb
|
44
|
+
- spec/spec.opts
|
45
|
+
- spec/spec_helper.rb
|
46
|
+
has_rdoc: true
|
47
|
+
homepage: http://github.com/zapnap/resque_mailer
|
48
|
+
licenses: []
|
49
|
+
|
50
|
+
post_install_message:
|
51
|
+
rdoc_options:
|
52
|
+
- --charset=UTF-8
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: "0"
|
60
|
+
version:
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: "0"
|
66
|
+
version:
|
67
|
+
requirements: []
|
68
|
+
|
69
|
+
rubyforge_project:
|
70
|
+
rubygems_version: 1.3.5
|
71
|
+
signing_key:
|
72
|
+
specification_version: 3
|
73
|
+
summary: Rails plugin for sending asynchronous email with ActionMailer and Resque
|
74
|
+
test_files:
|
75
|
+
- spec/resque_mailer_spec.rb
|
76
|
+
- spec/spec_helper.rb
|