Sha256: 10693f7bc809628ddfdb9b76bce83b6fe63ed5d3f61bccfc46e51c19cbbb4b16

Contents?: true

Size: 870 Bytes

Versions: 2

Compression:

Stored size: 870 Bytes

Contents

# frozen_string_literal: true

require 'sidekiq'

module SidekiqSimpleDelay
  # Worker that handles the simple_delayed functionality for ActionMailers
  class SimpleDelayedMailer
    include Sidekiq::Worker

    def perform(args)
      target_klass = Object.const_get(args.fetch('target_klass'))

      method_name = args['m']
      method_args = args['args']

      msg = target_klass.__send__(method_name, *method_args)

      # The email method can return nil, which causes ActionMailer to return
      # an undeliverable empty message.
      raise "#{target.name}##{method_name} returned an undeliverable mail object" unless msg

      deliver(msg)
    end

    private

    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
        msg.deliver
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sidekiq_simple_delay-0.2.1 lib/sidekiq_simple_delay/delayed_mailer.rb
sidekiq_simple_delay-0.2.0 lib/sidekiq_simple_delay/delayed_mailer.rb