aboutsummaryrefslogtreecommitdiffstats
path: root/activestorage/lib/active_storage/downloader.rb
diff options
context:
space:
mode:
authorGeorge Claghorn <george@basecamp.com>2019-03-28 18:47:42 -0400
committerGeorge Claghorn <george@basecamp.com>2019-03-28 18:47:42 -0400
commit562f3a2d21de52872ccd9a2c8b734e30ec63430b (patch)
tree54b75b83739e9efa3d19a0f88ed3b1f5193fe367 /activestorage/lib/active_storage/downloader.rb
parente3f5f1c936869b81b01835adc9c683e058edfeaf (diff)
downloadrails-562f3a2d21de52872ccd9a2c8b734e30ec63430b.tar.gz
rails-562f3a2d21de52872ccd9a2c8b734e30ec63430b.tar.bz2
rails-562f3a2d21de52872ccd9a2c8b734e30ec63430b.zip
Add ActiveStorage::Service#open
Diffstat (limited to 'activestorage/lib/active_storage/downloader.rb')
-rw-r--r--activestorage/lib/active_storage/downloader.rb29
1 files changed, 14 insertions, 15 deletions
diff --git a/activestorage/lib/active_storage/downloader.rb b/activestorage/lib/active_storage/downloader.rb
index 87be6efb05..4d7e832af5 100644
--- a/activestorage/lib/active_storage/downloader.rb
+++ b/activestorage/lib/active_storage/downloader.rb
@@ -2,24 +2,23 @@
module ActiveStorage
class Downloader #:nodoc:
- def initialize(blob, tempdir: nil)
- @blob = blob
- @tempdir = tempdir
+ attr_reader :service
+
+ def initialize(service)
+ @service = service
end
- def download_blob_to_tempfile
- open_tempfile do |file|
- download_blob_to file
- verify_integrity_of file
+ def open(key, checksum:, name: "ActiveStorage-", tmpdir: nil)
+ open_tempfile(name, tmpdir) do |file|
+ download key, file
+ verify_integrity_of file, checksum: checksum
yield file
end
end
private
- attr_reader :blob, :tempdir
-
- def open_tempfile
- file = Tempfile.open([ "ActiveStorage-#{blob.id}-", blob.filename.extension_with_delimiter ], tempdir)
+ def open_tempfile(name, tmpdir = nil)
+ file = Tempfile.open(name, tmpdir)
begin
yield file
@@ -28,15 +27,15 @@ module ActiveStorage
end
end
- def download_blob_to(file)
+ def download(key, file)
file.binmode
- blob.download { |chunk| file.write(chunk) }
+ service.download(key) { |chunk| file.write(chunk) }
file.flush
file.rewind
end
- def verify_integrity_of(file)
- unless Digest::MD5.file(file).base64digest == blob.checksum
+ def verify_integrity_of(file, checksum:)
+ unless Digest::MD5.file(file).base64digest == checksum
raise ActiveStorage::IntegrityError
end
end