Module: AcidicJob::Extensions::ActionMailer

Extended by:
ActiveSupport::Concern
Defined in:
lib/acidic_job/extensions/action_mailer.rb

Instance Method Summary collapse

Instance Method Details

#deliver_acidicly(_options = {}, idempotency_key: nil, unique_by: nil) ⇒ Object Also known as: deliver_transactionally



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/acidic_job/extensions/action_mailer.rb', line 10

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