resque_mailer 2.0.0 → 2.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.
@@ -1,4 +1,9 @@
1
- ### 2.0.0
1
+ ### 2.0.1 / 2011-08-19
2
+
3
+ * Restore the mailer proxy object so mailer method bodies never get
4
+ invoked more than once accidentally (not required to be idempotent)
5
+
6
+ ### 2.0.0 / 2011-06-24
2
7
 
3
8
  * Removed support for legacy Rails 2.x applications (please use v1.x)
4
9
  * Removed mailer proxy, return Mail::Message object
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0
1
+ 2.0.1
@@ -26,16 +26,7 @@ module Resque
26
26
  return super if environment_excluded?
27
27
 
28
28
  if action_methods.include?(method_name.to_s)
29
- resque = self.resque
30
- mailer_class = self
31
- super.tap do |resque_mail|
32
- resque_mail.class_eval do
33
- define_method(:deliver) do
34
- resque.enqueue(mailer_class, method_name, *args)
35
- self
36
- end
37
- end
38
- end
29
+ MessageDecoy.new(self, method_name, *args)
39
30
  else
40
31
  super
41
32
  end
@@ -61,5 +52,33 @@ module Resque
61
52
  ::Resque::Mailer.excluded_environments && ::Resque::Mailer.excluded_environments.include?(name.to_sym)
62
53
  end
63
54
  end
55
+
56
+ class MessageDecoy
57
+ def initialize(mailer_class, method_name, *args)
58
+ @mailer_class = mailer_class
59
+ @method_name = method_name
60
+ *@args = *args
61
+ end
62
+
63
+ def resque
64
+ ::Resque::Mailer.default_queue_target
65
+ end
66
+
67
+ def actual_message
68
+ @actual_message ||= @mailer_class.send(:new, @method_name, *@args).message
69
+ end
70
+
71
+ def deliver
72
+ resque.enqueue(@mailer_class, @method_name, *@args)
73
+ end
74
+
75
+ def deliver!
76
+ actual_message.deliver
77
+ end
78
+
79
+ def method_missing(method_name, *args)
80
+ actual_message.send(method_name, *args)
81
+ end
82
+ end
64
83
  end
65
84
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{resque_mailer}
8
- s.version = "2.0.0"
8
+ s.version = "2.0.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Nick Plante"]
12
- s.date = %q{2011-06-24}
12
+ s.date = %q{2011-08-19}
13
13
  s.description = %q{Rails plugin for sending asynchronous email with ActionMailer and Resque}
14
14
  s.email = %q{nap@zerosum.org}
15
15
  s.extra_rdoc_files = [
@@ -10,6 +10,7 @@ class Rails3Mailer < ActionMailer::Base
10
10
  MAIL_PARAMS = { :to => "crafty@example.org" }
11
11
 
12
12
  def test_mail(*params)
13
+ Resque::Mailer.success!
13
14
  mail(*params)
14
15
  end
15
16
  end
@@ -19,6 +20,7 @@ describe Resque::Mailer do
19
20
 
20
21
  before do
21
22
  Resque::Mailer.default_queue_target = resque
23
+ Resque::Mailer.stub(:success!)
22
24
  Rails3Mailer.stub(:current_env => :test)
23
25
  end
24
26
 
@@ -64,6 +66,11 @@ describe Resque::Mailer do
64
66
  @delivery.call
65
67
  end
66
68
  end
69
+
70
+ it 'should not invoke the method body more than once' do
71
+ Resque::Mailer.should_not_receive(:success!)
72
+ Rails3Mailer.test_mail(Rails3Mailer::MAIL_PARAMS).deliver
73
+ end
67
74
  end
68
75
 
69
76
  describe '#deliver!' do
@@ -72,7 +79,7 @@ describe Resque::Mailer do
72
79
  end
73
80
  end
74
81
 
75
- describe "perform" do
82
+ describe 'perform' do
76
83
  it 'should perform a queued mailer job' do
77
84
  lambda {
78
85
  Rails3Mailer.perform(:test_mail, Rails3Mailer::MAIL_PARAMS)
@@ -80,11 +87,16 @@ describe Resque::Mailer do
80
87
  end
81
88
  end
82
89
 
83
- describe "original mail methods" do
84
- it "should be preserved" do
90
+ describe 'original mail methods' do
91
+ it 'should be preserved' do
85
92
  Rails3Mailer.test_mail(Rails3Mailer::MAIL_PARAMS).subject.should == 'Subject'
86
93
  Rails3Mailer.test_mail(Rails3Mailer::MAIL_PARAMS).from.should include('from@example.org')
87
94
  Rails3Mailer.test_mail(Rails3Mailer::MAIL_PARAMS).to.should include('crafty@example.org')
88
95
  end
96
+
97
+ it 'should require execution of the method body prior to queueing' do
98
+ Resque::Mailer.should_receive(:success!).once
99
+ Rails3Mailer.test_mail(Rails3Mailer::MAIL_PARAMS).subject
100
+ end
89
101
  end
90
102
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque_mailer
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 13
5
5
  prerelease: false
6
6
  segments:
7
7
  - 2
8
8
  - 0
9
- - 0
10
- version: 2.0.0
9
+ - 1
10
+ version: 2.0.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nick Plante
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-06-24 00:00:00 -04:00
18
+ date: 2011-08-19 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency