Class: Geoblacklight::Download
- Inherits:
-
Object
- Object
- Geoblacklight::Download
show all
- Defined in:
- lib/geoblacklight/download.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(document, options = {}) ⇒ Download
Returns a new instance of Download.
5
6
7
8
|
# File 'lib/geoblacklight/download.rb', line 5
def initialize(document, options = {})
@document = document
@options = options
end
|
Class Method Details
.file_path ⇒ Object
18
19
20
|
# File 'lib/geoblacklight/download.rb', line 18
def self.file_path
Settings.DOWNLOAD_PATH || Rails.root.join("tmp", "cache", "downloads")
end
|
Instance Method Details
#create_download_file ⇒ String
Creates temporary file on file system and renames it if download completes successfully. Will raise and rescue if the wrong file format is downloaded
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/geoblacklight/download.rb', line 42
def create_download_file
download = initiate_download
File.open("#{file_path_and_name}.tmp", "wb") do |file|
fail Geoblacklight::Exceptions::WrongDownloadFormat unless matches_mimetype?(download)
file.write download.body
end
File.rename("#{file_path_and_name}.tmp", file_path_and_name)
file_name
rescue Geoblacklight::Exceptions::WrongDownloadFormat => error
Geoblacklight.logger.error "#{error} expected #{@options[:content_type]} " \
"received #{download.headers["content-type"]}"
File.delete("#{file_path_and_name}.tmp")
raise Geoblacklight::Exceptions::ExternalDownloadFailed, message: "Wrong download type"
end
|
#download_exists? ⇒ Boolean
26
27
28
|
# File 'lib/geoblacklight/download.rb', line 26
def download_exists?
File.file?(file_path_and_name)
end
|
#downloadable? ⇒ Boolean
10
11
12
|
# File 'lib/geoblacklight/download.rb', line 10
def downloadable?
@document.downloadable?
end
|
#file_name ⇒ Object
14
15
16
|
# File 'lib/geoblacklight/download.rb', line 14
def file_name
"#{@document.id}-#{@options[:type]}.#{@options[:extension]}"
end
|
#file_path_and_name ⇒ Object
22
23
24
|
# File 'lib/geoblacklight/download.rb', line 22
def file_path_and_name
"#{self.class.file_path}/#{file_name}"
end
|
#get ⇒ Object
30
31
32
33
34
35
36
|
# File 'lib/geoblacklight/download.rb', line 30
def get
if download_exists?
file_name
else
create_download_file
end
end
|
#initiate_download ⇒ Faraday::Request
Initiates download from a remote source url using the request_params. Will catch Faraday::ConnectionFailed and Faraday::TimeoutError
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/geoblacklight/download.rb', line 63
def initiate_download
conn = Faraday.new(url: url)
conn.get do |request|
request.params = @options[:request_params]
request.options.timeout = timeout
request.options.open_timeout = timeout
end
rescue Faraday::ConnectionFailed
raise Geoblacklight::Exceptions::ExternalDownloadFailed,
message: "Download connection failed",
url: conn.url_prefix.to_s
rescue Faraday::TimeoutError
raise Geoblacklight::Exceptions::ExternalDownloadFailed,
message: "Download timed out",
url: conn.url_prefix.to_s
end
|
#url_with_params ⇒ String
Creates a download url for the object
83
84
85
|
# File 'lib/geoblacklight/download.rb', line 83
def url_with_params
url + "/?" + URI.encode_www_form(@options[:request_params])
end
|