mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Permit opening a blob in a custom tempdir
This commit is contained in:
parent
f018d4e118
commit
9f95767979
5 changed files with 26 additions and 9 deletions
|
@ -167,8 +167,8 @@ class ActiveStorage::Blob < ActiveRecord::Base
|
|||
end
|
||||
|
||||
# Downloads the blob to a tempfile on disk. Yields the tempfile.
|
||||
def open(&block)
|
||||
ActiveStorage::Downloader.new(self).download_blob_to_tempfile(&block)
|
||||
def open(tempdir: nil, &block)
|
||||
ActiveStorage::Downloader.new(self, tempdir: tempdir).download_blob_to_tempfile(&block)
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -24,11 +24,15 @@ module ActiveStorage
|
|||
private
|
||||
# Downloads the blob to a tempfile on disk. Yields the tempfile.
|
||||
def download_blob_to_tempfile(&block) #:doc:
|
||||
blob.open(&block)
|
||||
blob.open tempdir: tempdir, &block
|
||||
end
|
||||
|
||||
def logger #:doc:
|
||||
ActiveStorage.logger
|
||||
end
|
||||
|
||||
def tempdir #:doc:
|
||||
Dir.tmpdir
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module ActiveStorage
|
||||
class Downloader
|
||||
def initialize(blob)
|
||||
@blob = blob
|
||||
class Downloader #:nodoc:
|
||||
def initialize(blob, tempdir: nil)
|
||||
@blob = blob
|
||||
@tempdir = tempdir
|
||||
end
|
||||
|
||||
def download_blob_to_tempfile
|
||||
|
@ -14,10 +15,10 @@ module ActiveStorage
|
|||
end
|
||||
|
||||
private
|
||||
attr_reader :blob
|
||||
attr_reader :blob, :tempdir
|
||||
|
||||
def open_tempfile
|
||||
file = Tempfile.open([ "ActiveStorage", tempfile_extension_with_delimiter ])
|
||||
file = Tempfile.open([ "ActiveStorage", tempfile_extension_with_delimiter ], tempdir)
|
||||
|
||||
begin
|
||||
yield file
|
||||
|
|
|
@ -26,7 +26,7 @@ module ActiveStorage
|
|||
private
|
||||
# Downloads the blob to a tempfile on disk. Yields the tempfile.
|
||||
def download_blob_to_tempfile(&block) #:doc:
|
||||
blob.open(&block)
|
||||
blob.open tempdir: tempdir, &block
|
||||
end
|
||||
|
||||
# Executes a system command, capturing its binary output in a tempfile. Yields the tempfile.
|
||||
|
|
|
@ -93,6 +93,18 @@ class ActiveStorage::BlobTest < ActiveSupport::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
test "open in a custom tempdir" do
|
||||
tempdir = Dir.mktmpdir
|
||||
|
||||
create_file_blob(filename: "racecar.jpg").open(tempdir: tempdir) do |file|
|
||||
assert file.binmode?
|
||||
assert_equal 0, file.pos
|
||||
assert_match(/\.jpg\z/, file.path)
|
||||
assert file.path.starts_with?(tempdir)
|
||||
assert_equal file_fixture("racecar.jpg").binread, file.read, "Expected downloaded file to match fixture file"
|
||||
end
|
||||
end
|
||||
|
||||
test "urls expiring in 5 minutes" do
|
||||
blob = create_blob
|
||||
|
||||
|
|
Loading…
Reference in a new issue