Sha256: a8f7ec3b9ff2221436af830f8866361887797e0e0ed77fa08571a0292607ca07

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true

require "active_support/concern"

module AcidicJob
  module Extensions
    module ActionMailer
      extend ActiveSupport::Concern

      def deliver_acidicly(_options = {}, idempotency_key: nil, unique_by: nil)
        job_class = ::ActionMailer::MailDeliveryJob

        job_args = [@mailer_class.name, @action.to_s, "deliver_now", @params, *@args]
        # for Sidekiq, this depends on the Sidekiq::Serialization extension
        serialized_job = job_class.new(job_args).serialize
        acidic_identifier = job_class.respond_to?(:acidic_identifier) ? job_class.acidic_identifier : :job_id
        # use either [1] provided key, [2] provided uniqueness constraint, or [3] computed key
        key = if idempotency_key
                idempotency_key
              elsif unique_by
                IdempotencyKey.generate(unique_by: unique_by, job_class: job_class.name)
              else
                IdempotencyKey.new(acidic_identifier).value_for(serialized_job)
              end

        AcidicJob::Run.create!(
          staged: true,
          job_class: job_class.name,
          serialized_job: serialized_job,
          idempotency_key: key
        )
      end
      alias deliver_transactionally deliver_acidicly
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
acidic_job-1.0.0.pre10 lib/acidic_job/extensions/action_mailer.rb