* 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:
parent
8c77e58b97
commit
5388fb64d9
@ -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>
|
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.
|
* marshal.c (w_object): dump no ivars to the original by marshal_dump.
|
||||||
|
4
NEWS
4
NEWS
@ -70,5 +70,9 @@ with all sufficient information, see the ChangeLog file.
|
|||||||
* Rinda now supports multicast sockets. See Rinda::RingServer and
|
* Rinda now supports multicast sockets. See Rinda::RingServer and
|
||||||
Rinda::RingFinger for details.
|
Rinda::RingFinger for details.
|
||||||
|
|
||||||
|
* Tempfile
|
||||||
|
* New methods:
|
||||||
|
* Tempfile.create
|
||||||
|
|
||||||
=== Stdlib compatibility issues (excluding feature bug fixes)
|
=== Stdlib compatibility issues (excluding feature bug fixes)
|
||||||
=== C API updates
|
=== C API updates
|
||||||
|
@ -332,6 +332,51 @@ class Tempfile < DelegateClass(File)
|
|||||||
end
|
end
|
||||||
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
|
if __FILE__ == $0
|
||||||
# $DEBUG = true
|
# $DEBUG = true
|
||||||
f = Tempfile.new("foo")
|
f = Tempfile.new("foo")
|
||||||
|
@ -304,5 +304,26 @@ puts Tempfile.new('foo').path
|
|||||||
assert_equal(0600, t.stat.mode & 0777)
|
assert_equal(0600, t.stat.mode & 0777)
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user