Feature #504
closedTempfile.open should return the new tempfile rather than nil
Description
=begin
It seems like you ought to be able to do this
f = Tempfile.open("foo") do |f|
f.print("foo\n")
end
p f.path
but curretnly Tempfile.open returns nil.
I propose the following patch:
--- /usr/lib/ruby/1.9.0/tempfile.old.rb 2008-08-27 01:50:02.000000000 -0700
+++ /usr/lib/ruby/1.9.0/tempfile.rb 2008-08-27 01:51:03.000000000 -0700
@@ -182,15 +182,15 @@
tempfile = new(*args)
if block_given?
- begin
- yield(tempfile)
- ensure
- tempfile.close
- end
-
begin
-
yield(tempfile)
-
ensure
-
tempfile.close
-
end
- nil
-
tempfile else
- tempfile
-
tempfile end
end
end
@@ -204,5 +204,12 @@
f.open
p f.gets # => "foo\n"
f.close!
-end -
f = Tempfile.open("foo") do |f|
-
f.print("foo\n")
-
end
-
p f.path # => "/tmp/foo20080827-5200-7awus9-0"
-
f.open
-
p f.gets # => "foo\n"
-
f.close!
+end
=end
Updated by TylerRick (Tyler Rick) over 16 years ago
=begin
Currently, if you want to be able to do anything with the tempfile after the block ends, you have to do something like this, which isn't very elegant:
file = nil
Tempfile.open("foo") do |f|
file = nil
f.print("foo\n")
end
p file.path
=end
Updated by sandal (Gregory Brown) over 16 years ago
=begin
As far as I can tell, this is not a bug, as it is documented.
However, I would support a behavior change here. I can't think of very many uses of the block form in the current case, unless you want to do ugly workarounds.
It would be quite nice if it returned a closed filehandle.
=end
Updated by ko1 (Koichi Sasada) over 16 years ago
- Assignee set to matz (Yukihiro Matsumoto)
=begin
=end
Updated by matz (Yukihiro Matsumoto) over 16 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
Applied in changeset r19454.
=end