Class: Spree::Images::SaveFromUrlJob

Inherits:
BaseJob
  • Object
show all
Defined in:
app/jobs/spree/images/save_from_url_job.rb

Instance Method Summary collapse

Instance Method Details

#perform(viewable_id, viewable_type, external_url, external_id = nil, position = nil) ⇒ Object



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 'app/jobs/spree/images/save_from_url_job.rb', line 14

def perform(viewable_id, viewable_type, external_url, external_id = nil, position = nil)
  viewable = viewable_type.safe_constantize.find(viewable_id)

  Spree::Image.ensure_metafield_definition_exists!(Spree::Image::EXTERNAL_URL_METAFIELD_KEY)

  external_url = external_url.strip
  external_id = external_id.to_s.downcase.strip if external_id.present?

  image = find_or_initialize_image(viewable, external_url, external_id)

  image.set_default_values_for_import if image.new_record? && image.respond_to?(:set_default_values_for_import)

  return if image.skip_import?

  image.restore if image.respond_to?(:deleted?) && image.deleted?
  image.position = position if position.present?

  # don't re-download the image if it's already been downloaded
  # still trigger save! if position has changed
  image.save! and return if image_already_saved?(image, external_url)

  download_and_attach_image(external_url, image, external_id)
rescue ActiveStorage::IntegrityError => e
  raise e unless Rails.env.test?
end