Class: CreateObjectFromUrlJob

Inherits:
ApplicationJob show all
Defined in:
app/jobs/create_object_from_url_job.rb

Instance Method Summary collapse

Instance Method Details

#perform(url:, collection_id: nil, owner: nil) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'app/jobs/create_object_from_url_job.rb', line 5

def perform(url:, collection_id: nil, owner: nil)
  return if Link.find_by(url: url)
  # Get deserializer
  deserializer = Link.deserializer_for(url: url)
  # Set up create options common to all
  common_options = {
    name: "Importing from #{url.split("://").last} ...",
    links_attributes: [{url: url}],
    owner: owner,
    permission_preset: :private
  }.compact
  # Create new object
  object = case deserializer&.capabilities&.dig(:class)&.name
  when "Model"
    Model.create(common_options.merge({
      library: Library.default,
      path: SecureRandom.uuid,
      collections: collection_id ? [Collection.find(collection_id)] : nil
    }.compact))
  when "Creator"
    Creator.create(common_options)
  when "Collection"
    Collection.create(common_options)
  end
  object.links.first.(organize: true, apply_permissions_after_sync: SiteSettings.default_viewer_role) if object
end