From: "mame (Yusuke Endoh)" Date: 2012-03-28T01:05:46+09:00 Subject: [ruby-core:43763] [ruby-trunk - Feature #5707][Assigned] temporary file creation without finalizer and delegate. Issue #5707 has been updated by mame (Yusuke Endoh). Status changed from Open to Assigned Assignee set to akr (Akira Tanaka) What's the status? How can we move on? The easiest way I think is to become the maintainer of tempfile and to accept the ticket by yourself. -- Yusuke Endoh ---------------------------------------- Feature #5707: temporary file creation without finalizer and delegate. https://bugs.ruby-lang.org/issues/5707#change-25272 Author: akr (Akira Tanaka) Status: Assigned Priority: Normal Assignee: akr (Akira Tanaka) Category: Target version: Tempfile always uses finalizer and delegate. Sometimes we don't need them. For example, following test creates a temporary file using Tempfile.open but the file is used only in the block. The file is removed when the Tempfile object is collected but it is possible to remove just after the block return. test/ruby/test_io.rb: def test_fcntl_dupfd Tempfile.open(self.class.name) do |f| fd = f.fcntl(Fcntl::F_DUPFD, 63) begin assert_operator(fd, :>=, 63) ensure IO.for_fd(fd).close end end end So I propose a method, Tempfile.open2, to create temporary file without finalizer and delegate. The arguments of Tempfile.open2 is same as Tempfile.open. The return value is File object instead of Tempfile object. If a block is given, the temporary file is removed after the block returns. If a block is not given, the temporary file is not removed. It should be removed using File.unlink. Non-block form can be used to create non-temporary file. If you need to change temporary file to non-temporary file, File.rename can be used. I made a patch to implement Tempfile.open2. I also made a patch to change tests to use Tempfile.open2 to show usage of it. A problem of this proposal is the method name. Tempfile.open2 is not a good name. Better idea is welcome. -- http://bugs.ruby-lang.org/