zerobearing2/qc-mailer

View on GitHub
lib/qc-mailer/message_decoy.rb

Summary

Maintainability
A
0 mins
Test Coverage
require "queue_classic"

module QC
  module Mailer

    class MessageDecoy
      delegate :to_s, :to => :actual_message

      def initialize(mailer_class, method_name, *args)
        @mailer_class   = mailer_class
        @method_name    = method_name.to_s
        *@args          = *args
      end

      def actual_message
        @actual_message ||= @mailer_class.send(:new, @method_name, *@args).message
      end

      def deliver
        @mailer_class.queue.enqueue("#{@mailer_class}.deliver", @method_name, *@args)
      end

      def deliver!
        actual_message.deliver
      end

      def method_missing(method_name, *args)
        actual_message.send(method_name, *args)
      end
    end
  
  end
end