Sha256: d13dfe22ea0aef988b78633b252863506b7e1885fd35913ed206dac22ebdc4af

Contents?: true

Size: 1.84 KB

Versions: 3

Compression:

Stored size: 1.84 KB

Contents

=begin
MailerWorker has a bit more to do than EventWorker. It has to run the event, then if the
output is a Mail::Message or the like it needs to deliver it like ActionMailer would
=end
module Reactor
  module Workers
    class MailerWorker

      include Sidekiq::Worker

      CONFIG = [:source, :action, :async, :delay]

      class_attribute *CONFIG

      def self.configured?
        CONFIG.all? {|field| field.present? }
      end

      def self.perform_where_needed(data)
        if delay > 0
          perform_in(delay, data)
        elsif async
          perform_async(data)
        else
          new.perform(data)
        end
        source
      end

      def configured?
        self.class.configured?
      end

      def perform(data)
        raise_unconfigured! unless configured?
        return :__perform_aborted__ unless should_perform?
        event = Reactor::Event.new(data)

        msg = if action.is_a?(Symbol)
          source.send(action, event)
        else
          source.class_exec event, &action
        end

        deliverable?(msg) ? deliver(msg) : msg
      end

      def deliver(msg)
        if msg.respond_to?(:deliver_now)
          # Rails 4.2/5.0
          msg.deliver_now
        else
          # Rails 3.2/4.0/4.1 + Generic Mail::Message
          msg.deliver
        end
      end

      def deliverable?(msg)
        msg.respond_to?(:deliver_now) || msg.respond_to?(:deliver)
      end

      def should_perform?
        if Reactor.test_mode?
          Reactor.test_mode_subscriber_enabled? source
        else
          true
        end
      end

      private

      def raise_unconfigured!
        settings = Hash[CONFIG.map {|s| [s, self.class.send(s)] }]
        raise UnconfiguredWorkerError.new(
          "#{self.class.name} is not properly configured! Here are the settings: #{settings}"
        )
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
reactor-0.15.1 lib/reactor/workers/mailer_worker.rb
reactor-0.15.0 lib/reactor/workers/mailer_worker.rb
reactor-0.14.0 lib/reactor/workers/mailer_worker.rb