Class: RailsDrips::DeliveryJob

Inherits:
ActiveJob::Base
  • Object
show all
Defined in:
app/jobs/rails_drips/delivery_job.rb

Instance Method Summary collapse

Instance Method Details

#perform(delivery_id) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'app/jobs/rails_drips/delivery_job.rb', line 9

def perform(delivery_id)
  delivery = Delivery.includes(enrollment: :campaign).find(delivery_id)
  return unless prepare?(delivery)

  message = RailsDrips.configuration.mailers.fetch(delivery.email_key).call(delivery).message
  message = RailsDrips.configuration..call(message: message, delivery: delivery)
  snapshot = MailSnapshot.call(message)

  delivery.with_lock do
    return unless delivery.scheduled?
    delivery.update!(
      subject_snapshot: snapshot[:subject],
      html_body_snapshot: snapshot[:html_body],
      text_body_snapshot: snapshot[:text_body],
      data: delivery.data_value.merge("message_sha256" => snapshot[:sha256], "message_byte_size" => snapshot[:byte_size])
    )
    delivery.mark_sending!
  end

  message.deliver

  delivery.with_lock do
    delivery.mark_sent!(provider: "action_mailer", provider_message_id: message.message_id)
    RecordEvent.call(enrollment: delivery.enrollment, event_type: "delivery_sent",
      data: { "delivery_id" => delivery.id, "step_id" => delivery.step_id })
  end
  CompleteEnrollment.call(enrollment: delivery.enrollment)
  Instrumentation.instrument("delivery.sent", delivery_id: delivery.id,
    enrollment_id: delivery.enrollment_id, campaign_key: delivery.campaign_key)
rescue ActiveRecord::RecordNotFound
  nil
rescue StandardError => error
  record_failure(delivery, error) if delivery
  raise
end