resque_mail_queue 0.2.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/.gitignore +3 -0
- data/.rbenv-gemsets +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +83 -0
- data/Rakefile +1 -0
- data/lib/resque_mail_queue.rb +47 -0
- data/readme.md +40 -0
- data/resque_mail_queue.gemspec +26 -0
- data/spec/resque_mail_queue_spec.rb +41 -0
- metadata +88 -0
data/.gitignore
ADDED
data/.rbenv-gemsets
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
resque_mail_queue global
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
resque_mail_queue (0.0.10)
|
5
|
+
actionmailer (>= 3.0.0)
|
6
|
+
resque (>= 1.1.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
abstract (1.0.0)
|
12
|
+
actionmailer (3.0.10)
|
13
|
+
actionpack (= 3.0.10)
|
14
|
+
mail (~> 2.2.19)
|
15
|
+
actionpack (3.0.10)
|
16
|
+
activemodel (= 3.0.10)
|
17
|
+
activesupport (= 3.0.10)
|
18
|
+
builder (~> 2.1.2)
|
19
|
+
erubis (~> 2.6.6)
|
20
|
+
i18n (~> 0.5.0)
|
21
|
+
rack (~> 1.2.1)
|
22
|
+
rack-mount (~> 0.6.14)
|
23
|
+
rack-test (~> 0.5.7)
|
24
|
+
tzinfo (~> 0.3.23)
|
25
|
+
activemodel (3.0.10)
|
26
|
+
activesupport (= 3.0.10)
|
27
|
+
builder (~> 2.1.2)
|
28
|
+
i18n (~> 0.5.0)
|
29
|
+
activesupport (3.0.10)
|
30
|
+
builder (2.1.2)
|
31
|
+
diff-lcs (1.1.3)
|
32
|
+
erubis (2.6.6)
|
33
|
+
abstract (>= 1.0.0)
|
34
|
+
i18n (0.5.0)
|
35
|
+
mail (2.2.19)
|
36
|
+
activesupport (>= 2.3.6)
|
37
|
+
i18n (>= 0.4.0)
|
38
|
+
mime-types (~> 1.16)
|
39
|
+
treetop (~> 1.4.8)
|
40
|
+
mime-types (1.16)
|
41
|
+
multi_json (1.0.3)
|
42
|
+
polyglot (0.3.2)
|
43
|
+
rack (1.2.3)
|
44
|
+
rack-mount (0.6.14)
|
45
|
+
rack (>= 1.0.0)
|
46
|
+
rack-test (0.5.7)
|
47
|
+
rack (>= 1.0)
|
48
|
+
redis (2.2.2)
|
49
|
+
redis-namespace (1.0.3)
|
50
|
+
redis (< 3.0.0)
|
51
|
+
resque (1.19.0)
|
52
|
+
multi_json (~> 1.0)
|
53
|
+
redis-namespace (~> 1.0.2)
|
54
|
+
sinatra (>= 0.9.2)
|
55
|
+
vegas (~> 0.1.2)
|
56
|
+
resque_spec (0.7.0)
|
57
|
+
resque (>= 1.15.0)
|
58
|
+
rspec (>= 2.5.0)
|
59
|
+
rspec (2.6.0)
|
60
|
+
rspec-core (~> 2.6.0)
|
61
|
+
rspec-expectations (~> 2.6.0)
|
62
|
+
rspec-mocks (~> 2.6.0)
|
63
|
+
rspec-core (2.6.4)
|
64
|
+
rspec-expectations (2.6.0)
|
65
|
+
diff-lcs (~> 1.1.2)
|
66
|
+
rspec-mocks (2.6.0)
|
67
|
+
sinatra (1.2.6)
|
68
|
+
rack (~> 1.1)
|
69
|
+
tilt (>= 1.2.2, < 2.0)
|
70
|
+
tilt (1.3.3)
|
71
|
+
treetop (1.4.10)
|
72
|
+
polyglot
|
73
|
+
polyglot (>= 0.3.1)
|
74
|
+
tzinfo (0.3.29)
|
75
|
+
vegas (0.1.8)
|
76
|
+
rack (>= 1.0.0)
|
77
|
+
|
78
|
+
PLATFORMS
|
79
|
+
ruby
|
80
|
+
|
81
|
+
DEPENDENCIES
|
82
|
+
resque_mail_queue!
|
83
|
+
resque_spec (>= 0.7.0)
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'resque'
|
2
|
+
require 'action_mailer'
|
3
|
+
|
4
|
+
module Resque
|
5
|
+
module MailQueue
|
6
|
+
|
7
|
+
include Resque::Helpers
|
8
|
+
extend self
|
9
|
+
|
10
|
+
def queue
|
11
|
+
:mail
|
12
|
+
end
|
13
|
+
|
14
|
+
def perform(options = {})
|
15
|
+
mailer = constantize(options['klass'])
|
16
|
+
method = options['method']
|
17
|
+
mailer.send(method, *options['args']).deliver
|
18
|
+
end
|
19
|
+
|
20
|
+
def enqueue()
|
21
|
+
EnqueueProxy.new(self)
|
22
|
+
end
|
23
|
+
|
24
|
+
class EnqueueProxy
|
25
|
+
|
26
|
+
def initialize(klass)
|
27
|
+
@klass = klass
|
28
|
+
end
|
29
|
+
|
30
|
+
def method_missing(m, *args, &block)
|
31
|
+
if @klass.respond_to? m
|
32
|
+
options = {'klass' => @klass.to_s, 'method' => m, 'args' => args}
|
33
|
+
Resque.enqueue(@klass, options)
|
34
|
+
else
|
35
|
+
super
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
VERSION = '0.2.0'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class ActionMailer::Base
|
46
|
+
extend Resque::MailQueue
|
47
|
+
end
|
data/readme.md
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# Resque Mail Queue
|
2
|
+
|
3
|
+
This gem makes it very easy to send emails asynchronously with [Resque](http://github.com/defunkt/resque).
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
Add the gem to your gemfile:
|
8
|
+
|
9
|
+
gem 'resque_mail_queue'
|
10
|
+
|
11
|
+
Then anytime you want to push an email asynchronously add _enqueue_ before the mailer method.
|
12
|
+
|
13
|
+
UserMailer.enqueue.welcome_email(1)
|
14
|
+
|
15
|
+
## Notes
|
16
|
+
|
17
|
+
1. As with most things Resque, your parameters should be simple objects (ids, strings, etc). Or put another way, do not pass your models directly.
|
18
|
+
1. You do not have to call deliver
|
19
|
+
1. By default, all messages will be placed on a queue called "mail". You can change this by adding a class method called queue on any mailer.
|
20
|
+
|
21
|
+
class MyMailer < ActionMailer::Base
|
22
|
+
|
23
|
+
def self.queue
|
24
|
+
:high_priority
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
## Why use this instead of ResqueMailer
|
31
|
+
|
32
|
+
I initially started using [ResqueMailer](https://github.com/zapnap/resque_mailer) and it worked well. However, I preferred being more explicit (and simple) on when emails where being sent asynchronously (by calling enqueue).
|
33
|
+
|
34
|
+
More clearly, if ResqueMailer works for you and you like it, stick with it.
|
35
|
+
|
36
|
+
|
37
|
+
## License
|
38
|
+
|
39
|
+
Provided under the Do Whatever You Want With This Code License.
|
40
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "resque_mail_queue"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "resque_mail_queue"
|
7
|
+
s.version = Resque::MailQueue::VERSION
|
8
|
+
s.authors = ["Scott Watermasysk"]
|
9
|
+
s.email = ["scottwater@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/scottwater/resque_mail_queue"
|
11
|
+
s.summary = 'Simple asynchronous emails with Resque'
|
12
|
+
s.description = 'Simple asynchronous emails with Resque'
|
13
|
+
|
14
|
+
s.rubyforge_project = "resque_mail_queue"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency 'actionmailer', '>= 3.0.0'
|
22
|
+
|
23
|
+
s.add_dependency 'resque', '>= 1.1.0'
|
24
|
+
s.add_development_dependency 'resque_spec', '>= 0.7.0'
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
$:.push File.expand_path('../lib', __FILE__)
|
2
|
+
require 'resque_mail_queue'
|
3
|
+
require 'resque_spec'
|
4
|
+
|
5
|
+
class DumbMailer
|
6
|
+
extend Resque::MailQueue
|
7
|
+
def self.send_mail(user_id)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class DumbMailer2 < DumbMailer
|
12
|
+
def self.queue
|
13
|
+
:not_default
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
describe Resque::MailQueue do
|
19
|
+
|
20
|
+
before(:each) do
|
21
|
+
ResqueSpec.reset!
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should find a dummy mail in the default queue' do
|
25
|
+
DumbMailer.enqueue.send_mail(3)
|
26
|
+
DumbMailer.should have_queued('klass' => 'DumbMailer', 'method' => :send_mail, 'args' => [3]).in(:default)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should be able to override the queue (not default)' do
|
30
|
+
DumbMailer2.enqueue.send_mail(3)
|
31
|
+
DumbMailer2.should have_queued('klass' => 'DumbMailer2', 'method'=> :send_mail, 'args' => [3]).in(:not_default)
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should call deliver when pulling an item from the queue' do
|
36
|
+
mail_message = double('mail_message')
|
37
|
+
DumbMailer.stub(:send_mail).and_return(mail_message)
|
38
|
+
mail_message.should_receive(:deliver)
|
39
|
+
Resque::MailQueue.perform('klass' => 'DumbMailer', 'method' => :send_mail, 'args' => [3])
|
40
|
+
end
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: resque_mail_queue
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Scott Watermasysk
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-09-05 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: actionmailer
|
16
|
+
requirement: &70272696466380 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70272696466380
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: resque
|
27
|
+
requirement: &70272696464360 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.1.0
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70272696464360
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: resque_spec
|
38
|
+
requirement: &70272696463180 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.7.0
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70272696463180
|
47
|
+
description: Simple asynchronous emails with Resque
|
48
|
+
email:
|
49
|
+
- scottwater@gmail.com
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- .gitignore
|
55
|
+
- .rbenv-gemsets
|
56
|
+
- Gemfile
|
57
|
+
- Gemfile.lock
|
58
|
+
- Rakefile
|
59
|
+
- lib/resque_mail_queue.rb
|
60
|
+
- readme.md
|
61
|
+
- resque_mail_queue.gemspec
|
62
|
+
- spec/resque_mail_queue_spec.rb
|
63
|
+
homepage: https://github.com/scottwater/resque_mail_queue
|
64
|
+
licenses: []
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options: []
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
requirements: []
|
82
|
+
rubyforge_project: resque_mail_queue
|
83
|
+
rubygems_version: 1.8.7
|
84
|
+
signing_key:
|
85
|
+
specification_version: 3
|
86
|
+
summary: Simple asynchronous emails with Resque
|
87
|
+
test_files:
|
88
|
+
- spec/resque_mail_queue_spec.rb
|