alvinsj/delivery_uncle

View on GitHub
app/services/delivery_uncle/email_queue.rb

Summary

Maintainability
A
0 mins
Test Coverage
module DeliveryUncle
  class EmailQueue
    module ClassMethods
      def queue(request)
        return if not_allowed?(request)
        
        QueueRequest.new(request)
      end

      def pause(request)
        return if not_allowed?(request)
        
        request.save_status!(:paused)
      end

      def retry(request)
        return if not_allowed?(request)
        
        RetryRequest.new(request)
      end
 
      def not_allowed?(request)
        return true if request.blank? || request.sent?

        if Activity.blocked_mailers.include?(request.mailer)
          request.save_status!(:blocked)
          return true
        end

        return false
      end
    end
    extend ClassMethods 
     
    protected
    class QueueRequest
      def initialize(request)
        request.save_status!(:enqueue)
        begin
          Resque.enqueue(DeliveryUncle::SendEmailRequest, request.id)
        rescue => e
          Rails.logger.error e.message
          Rails.logger.error e.backtrace.join("\n")
          request.save_status!(:error_on_enqueue)
        end
      end
    end
    
    class RetryRequest
      def initialize(request)
        request.save_status!(:retrying)
        QueueRequest.new(request)
      end
    end  
  end
end