diff options
Diffstat (limited to 'actionmailer/lib/action_mailer/queued_message.rb')
-rw-r--r-- | actionmailer/lib/action_mailer/queued_message.rb | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/actionmailer/lib/action_mailer/queued_message.rb b/actionmailer/lib/action_mailer/queued_message.rb new file mode 100644 index 0000000000..8d200617c4 --- /dev/null +++ b/actionmailer/lib/action_mailer/queued_message.rb @@ -0,0 +1,37 @@ +require 'delegate' + +module ActionMailer + class QueuedMessage < ::Delegator + attr_reader :queue + + def initialize(queue, mailer_class, method_name, *args) + @queue = queue + @job = DeliveryJob.new(mailer_class, method_name, args) + end + + def __getobj__ + @job.message + end + + # Queues the message for delivery. + def deliver + tap { @queue.push @job } + end + + 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 |