From 7aa69d890cfcd8b847814d1ee2223b5228d2b90b Mon Sep 17 00:00:00 2001 From: Jonathan Rochkind Date: Sun, 28 Apr 2024 13:41:27 -0400 Subject: [PATCH] UploadedFile#close should leave UploadedFile in a state where #opened? is false (#656) This means removing the reference to the now-closed (and unusable) IO object. Which meant refactoring an existing test slightly, as it tried to refer to the IO object after UploadedFile#close. --- lib/shrine/uploaded_file.rb | 1 + test/plugin/rack_response_test.rb | 5 ++++- test/uploaded_file_test.rb | 8 ++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/shrine/uploaded_file.rb b/lib/shrine/uploaded_file.rb index b15471171..60a6cc2ef 100644 --- a/lib/shrine/uploaded_file.rb +++ b/lib/shrine/uploaded_file.rb @@ -170,6 +170,7 @@ def rewind # opened IO object. def close io.close if opened? + @io = nil end # Returns whether the file has already been opened. diff --git a/test/plugin/rack_response_test.rb b/test/plugin/rack_response_test.rb index a0cdb4492..b3a5386c4 100644 --- a/test/plugin/rack_response_test.rb +++ b/test/plugin/rack_response_test.rb @@ -106,8 +106,11 @@ uploaded_file = @uploader.upload(fakeio) uploaded_file.open response = uploaded_file.to_rack_response + + existing_io = uploaded_file.to_io + response[2].close - assert uploaded_file.to_io.closed? + assert existing_io.closed? end it "returns ranged responses when :range is given" do diff --git a/test/uploaded_file_test.rb b/test/uploaded_file_test.rb index da52e9920..eb8ad4ff4 100644 --- a/test/uploaded_file_test.rb +++ b/test/uploaded_file_test.rb @@ -241,6 +241,14 @@ def uploaded_file(data = {}) uploaded_file.storage.expects(:open).never uploaded_file.close end + + it "leaves the UploadedFile no longer #opened?" do + uploaded_file = @uploader.upload(fakeio) + uploaded_file.open + uploaded_file.close + + refute uploaded_file.opened? + end end describe "#url" do