1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* lib/tempfile.rb (Tempfile.create): New method.

The method name is proposed by Shugo Maeda.  [ruby-dev:47220]
  [ruby-core:41478] [Feature #5707]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40393 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2013-04-20 13:50:47 +00:00
parent 8c77e58b97
commit 5388fb64d9
4 changed files with 76 additions and 0 deletions

View file

@ -1,3 +1,9 @@
Sat Apr 20 22:47:48 2013 Tanaka Akira <akr@fsij.org>
* lib/tempfile.rb (Tempfile.create): New method.
The method name is proposed by Shugo Maeda. [ruby-dev:47220]
[ruby-core:41478] [Feature #5707]
Sat Apr 20 14:22:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* marshal.c (w_object): dump no ivars to the original by marshal_dump.

4
NEWS
View file

@ -70,5 +70,9 @@ with all sufficient information, see the ChangeLog file.
* Rinda now supports multicast sockets. See Rinda::RingServer and
Rinda::RingFinger for details.
* Tempfile
* New methods:
* Tempfile.create
=== Stdlib compatibility issues (excluding feature bug fixes)
=== C API updates

View file

@ -332,6 +332,51 @@ class Tempfile < DelegateClass(File)
end
end
# Creates a temporally file as usual File object (not Tempfile).
# It don't use finalizer and delegation.
#
# If no block is given, this is similar to Tempfile.new except
# creating File instead of Tempfile.
# The created file is not removed automatically.
# You should use File.unlink to remove it.
#
# If a block is given, then a File object will be constructed,
# and the block is invoked with the object as the argument.
# The File object will be automatically closed and
# the temporally file is removed after the block terminates.
# The call returns the value of the block.
#
# In any case, all arguments (+*args+) will be treated as Tempfile.new.
#
# Tempfile.create('foo', '/home/temp') do |f|
# ... do something with f ...
# end
#
def Tempfile.create(basename, *rest)
tmpfile = nil
Dir::Tmpname.create(basename, *rest) do |tmpname, n, opts|
mode = File::RDWR|File::CREAT|File::EXCL
perm = 0600
if opts
mode |= opts.delete(:mode) || 0
opts[:perm] = perm
perm = nil
else
opts = perm
end
tmpfile = File.open(tmpname, mode, opts)
end
if block_given?
begin
yield tmpfile
ensure
File.unlink tmpfile
end
else
tmpfile
end
end
if __FILE__ == $0
# $DEBUG = true
f = Tempfile.new("foo")

View file

@ -304,5 +304,26 @@ puts Tempfile.new('foo').path
assert_equal(0600, t.stat.mode & 0777)
end
end
def test_create_with_block
path = nil
Tempfile.create("tempfile-create") {|f|
path = f.path
assert(File.exist?(path))
}
assert(!File.exist?(path))
end
def test_create_without_block
path = nil
f = Tempfile.create("tempfile-create")
path = f.path
assert(File.exist?(path))
f.close
assert(File.exist?(path))
ensure
f.close if f && !f.closed?
File.unlink path if path
end
end