aboutsummaryrefslogtreecommitdiffstats
path: root/activestorage
diff options
context:
space:
mode:
authorGeorge Claghorn <george@basecamp.com>2018-05-30 20:01:07 -0400
committerGeorge Claghorn <george@basecamp.com>2018-05-30 20:05:39 -0400
commita6d80e164f2f5566472370a84ab7cd98736666c4 (patch)
treebde6f7b857255fd12d81702d23debd7b995876c2 /activestorage
parente2e053608ed71d22d7f3e22af605ab284ef00f05 (diff)
downloadrails-a6d80e164f2f5566472370a84ab7cd98736666c4.tar.gz
rails-a6d80e164f2f5566472370a84ab7cd98736666c4.tar.bz2
rails-a6d80e164f2f5566472370a84ab7cd98736666c4.zip
Include blob ID in tempfile name for debugging convenience
Diffstat (limited to 'activestorage')
-rw-r--r--activestorage/app/models/active_storage/blob.rb10
-rw-r--r--activestorage/lib/active_storage/downloader.rb6
-rw-r--r--activestorage/test/models/blob_test.rb14
3 files changed, 20 insertions, 10 deletions
diff --git a/activestorage/app/models/active_storage/blob.rb b/activestorage/app/models/active_storage/blob.rb
index d36c951292..203e4118c5 100644
--- a/activestorage/app/models/active_storage/blob.rb
+++ b/activestorage/app/models/active_storage/blob.rb
@@ -168,6 +168,16 @@ class ActiveStorage::Blob < ActiveRecord::Base
# Downloads the blob to a tempfile on disk. Yields the tempfile.
#
+ # The tempfile's name is prefixed with +ActiveStorage-+ and the blob's ID. Its extension matches that of the blob.
+ #
+ # By default, the tempfile is created in <tt>Dir.tmpdir</tt>. Pass +tempdir:+ to create it in a different directory:
+ #
+ # blob.open(tempdir: "/path/to/tmp") do |file|
+ # # ...
+ # end
+ #
+ # The tempfile is automatically closed and unlinked after the given block is executed.
+ #
# Raises ActiveStorage::IntegrityError if the downloaded data does not match the blob's checksum.
def open(tempdir: nil, &block)
ActiveStorage::Downloader.new(self, tempdir: tempdir).download_blob_to_tempfile(&block)
diff --git a/activestorage/lib/active_storage/downloader.rb b/activestorage/lib/active_storage/downloader.rb
index 2aa56a729a..87be6efb05 100644
--- a/activestorage/lib/active_storage/downloader.rb
+++ b/activestorage/lib/active_storage/downloader.rb
@@ -19,7 +19,7 @@ module ActiveStorage
attr_reader :blob, :tempdir
def open_tempfile
- file = Tempfile.open([ "ActiveStorage", tempfile_extension_with_delimiter ], tempdir)
+ file = Tempfile.open([ "ActiveStorage-#{blob.id}-", blob.filename.extension_with_delimiter ], tempdir)
begin
yield file
@@ -40,9 +40,5 @@ module ActiveStorage
raise ActiveStorage::IntegrityError
end
end
-
- def tempfile_extension_with_delimiter
- blob.filename.extension_with_delimiter
- end
end
end
diff --git a/activestorage/test/models/blob_test.rb b/activestorage/test/models/blob_test.rb
index 2d1857041d..788e9af7b8 100644
--- a/activestorage/test/models/blob_test.rb
+++ b/activestorage/test/models/blob_test.rb
@@ -85,11 +85,15 @@ class ActiveStorage::BlobTest < ActiveSupport::TestCase
end
test "open with integrity" do
- create_file_blob(filename: "racecar.jpg").open do |file|
- assert file.binmode?
- assert_equal 0, file.pos
- assert_match(/\.jpg\z/, file.path)
- assert_equal file_fixture("racecar.jpg").binread, file.read, "Expected downloaded file to match fixture file"
+ create_file_blob(filename: "racecar.jpg").tap do |blob|
+ blob.open do |file|
+ assert file.binmode?
+ assert_equal 0, file.pos
+ byebug
+ assert File.basename(file.path).starts_with?("ActiveStorage-#{blob.id}-")
+ assert file.path.ends_with?(".jpg")
+ assert_equal file_fixture("racecar.jpg").binread, file.read, "Expected downloaded file to match fixture file"
+ end
end
end