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?
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
|