Class: ImportUrlJob

Inherits:
ActiveFedoraIdBasedJob show all
Defined in:
app/jobs/import_url_job.rb

Instance Attribute Summary

Attributes inherited from ActiveFedoraIdBasedJob

#id

Instance Method Summary collapse

Methods inherited from ActiveFedoraIdBasedJob

#initialize, #object

Constructor Details

This class inherits a constructor from ActiveFedoraIdBasedJob

Instance Method Details

#copy_remote_file(_import_url, f) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'app/jobs/import_url_job.rb', line 30

def copy_remote_file(_import_url, f)
  f.binmode
  # download file from url
  uri = URI(generic_file.import_url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = uri.scheme == "https" # enable SSL/TLS
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  mime_type = nil

  http.start do
    http.request_get(uri.request_uri) do |resp|
      mime_type = resp.content_type
      resp.read_body do |segment|
        f.write(segment)
      end
    end
  end

  f.rewind
  [uri.path, mime_type]
end

#job_userObject



52
53
54
# File 'app/jobs/import_url_job.rb', line 52

def job_user
  User.batchuser
end

#queue_nameObject



6
7
8
# File 'app/jobs/import_url_job.rb', line 6

def queue_name
  :import_url
end

#runObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'app/jobs/import_url_job.rb', line 10

def run
  user = User.find_by_user_key(generic_file.depositor)

  Tempfile.open(id.tr('/', '_')) do |f|
    path, mime_type = copy_remote_file(generic_file.import_url, f)

    # reload the generic file once the data is copied since this is a long running task
    generic_file.reload

    # attach downloaded file to generic file stubbed out
    if Sufia::GenericFile::Actor.new(generic_file, user).create_content(f, path, 'content', mime_type)
      # add message to user for downloaded file
      message = "The file (#{generic_file.label}) was successfully imported."
      job_user.send_message(user, message, 'File Import')
    else
      job_user.send_message(user, generic_file.errors.full_messages.join(', '), 'File Import Error')
    end
  end
end