Class: ActiveStorage::AsyncVariants::ProcessJob

Inherits:
ActiveJob::Base
  • Object
show all
Defined in:
lib/active_storage/async_variants/process_job.rb

Instance Method Summary collapse

Instance Method Details

#perform(record, attachment_name, variant_name) ⇒ Object



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
# File 'lib/active_storage/async_variants/process_job.rb', line 10

def perform(record, attachment_name, variant_name)
  attachment = record.public_send(attachment_name)
  @variant = attachment.variant(variant_name.to_sym)
  variation = @variant.variation
  @async_options = variation.async_options
  transformer_class = @async_options[:transformer]
  blob = @variant.blob

  @variant_record = blob.variant_records.create_or_find_by!(variation_digest: variation.digest)
  @variant_record.update!(state: "processing")

  if transformer_class
    transformer = transformer_class.new
    if transformer.inline?
      process_inline(blob, @variant_record, transformer, variation)
    else
      process_external(blob, @variant_record, transformer, variation)
    end
  else
    process_default(blob, @variant_record, variation)
  end
rescue => e
  @variant_record&.update!(
    state: "failed",
    error: e.message.to_s.truncate(16_000),
    attempts: (@variant_record&.attempts || 0) + 1,
  )
  raise
end