diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2012-09-16 18:30:23 -0700 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2012-09-16 22:37:47 -0700 |
commit | 2a301505ece91b1bf317c6627aaba7ec0cea43e9 (patch) | |
tree | ca01f2d6bf360fe884721ee48a19f3b2a2aaed1c /actionmailer/lib | |
parent | b881be7331339d7eab50ccf0512de3ab4e49a896 (diff) | |
download | rails-2a301505ece91b1bf317c6627aaba7ec0cea43e9.tar.gz rails-2a301505ece91b1bf317c6627aaba7ec0cea43e9.tar.bz2 rails-2a301505ece91b1bf317c6627aaba7ec0cea43e9.zip |
Use synchronous queue by default. Separate queued message delivery jobs from the queued message wrappers so the queue itself needn't be marshaled (due to queue reference QueuedMessage).
Diffstat (limited to 'actionmailer/lib')
-rw-r--r-- | actionmailer/lib/action_mailer/base.rb | 2 | ||||
-rw-r--r-- | actionmailer/lib/action_mailer/queued_message.rb | 30 |
2 files changed, 22 insertions, 10 deletions
diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index 26787c9b5e..1676c23856 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -4,6 +4,7 @@ require 'action_mailer/collector' require 'active_support/core_ext/string/inflections' require 'active_support/core_ext/hash/except' require 'active_support/core_ext/module/anonymous' +require 'active_support/queueing' require 'action_mailer/log_subscriber' module ActionMailer #:nodoc: @@ -393,6 +394,7 @@ module ActionMailer #:nodoc: }.freeze class_attribute :queue + self.queue = ActiveSupport::SynchronousQueue.new class << self # Register one or more Observers which will be notified when mail is delivered. diff --git a/actionmailer/lib/action_mailer/queued_message.rb b/actionmailer/lib/action_mailer/queued_message.rb index e5868ab43b..8d200617c4 100644 --- a/actionmailer/lib/action_mailer/queued_message.rb +++ b/actionmailer/lib/action_mailer/queued_message.rb @@ -5,23 +5,33 @@ module ActionMailer attr_reader :queue def initialize(queue, mailer_class, method_name, *args) - @queue = queue - @mailer_class = mailer_class - @method_name = method_name - @args = args + @queue = queue + @job = DeliveryJob.new(mailer_class, method_name, args) end def __getobj__ - @actual_message ||= @mailer_class.send(:new, @method_name, *@args).message + @job.message end - def run - __getobj__.deliver + # Queues the message for delivery. + def deliver + tap { @queue.push @job } end - # Will push the message onto the Queue to be processed - def deliver - @queue << self + class DeliveryJob + def initialize(mailer_class, method_name, args) + @mailer_class = mailer_class + @method_name = method_name + @args = args + end + + def message + @message ||= @mailer_class.send(:new, @method_name, *@args).message + end + + def run + message.deliver + end end end end |