Class: Dir
Class Method Summary collapse
-
.mktmpdir(prefix_suffix = nil, tmpdir = nil) ⇒ Object
Dir.mktmpdir creates a temporary directory.
Class Method Details
.mktmpdir(prefix_suffix = nil, tmpdir = nil) ⇒ Object
Dir.mktmpdir creates a temporary directory.
The directory is created with 0700 permission.
The prefix and suffix of the name of the directory is specified by the optional first argument, prefix_suffix.
-
If it is not specified or nil, “d” is used as the prefix and no suffix is used.
-
If it is a string, it is used as the prefix and no suffix is used.
-
If it is an array, first element is used as the prefix and second element is used as a suffix.
Dir.mktmpdir {|dir| dir is ".../d..." }
Dir.mktmpdir("foo") {|dir| dir is ".../foo..." }
Dir.mktmpdir(["foo", "bar"]) {|dir| dir is ".../foo...bar" }
The directory is created under Dir.tmpdir or the optional second argument tmpdir if non-nil value is given.
Dir.mktmpdir {|dir| dir is "#{Dir.tmpdir}/d..." }
Dir.mktmpdir(nil, "/var/tmp") {|dir| dir is "/var/tmp/d..." }
If a block is given, it is yielded with the path of the directory. The directory and its contents are removed using FileUtils.remove_entry_secure before Dir.mktmpdir returns. The value of the block is returned.
Dir.mktmpdir {|dir|
# use the directory...
open("#{dir}/foo", "w") { ... }
}
If a block is not given, The path of the directory is returned. In this case, Dir.mktmpdir doesn’t remove the directory.
dir = Dir.mktmpdir
begin
# use the directory...
open("#{dir}/foo", "w") { ... }
ensure
# remove the directory.
FileUtils.remove_entry_secure dir
end
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/crazy_ivan/vendor/core_ext/tmpdir.rb', line 50 def Dir.mktmpdir(prefix_suffix=nil, tmpdir=nil) case prefix_suffix when nil prefix = "d" suffix = "" when String prefix = prefix_suffix suffix = "" when Array prefix = prefix_suffix[0] suffix = prefix_suffix[1] else raise ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}" end tmpdir ||= Dir.tmpdir t = Time.now.strftime("%Y%m%d") n = nil begin path = "#{tmpdir}/#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}" path << "-#{n}" if n path << suffix Dir.mkdir(path, 0700) rescue Errno::EEXIST n ||= 0 n += 1 retry end if block_given? begin yield path ensure FileUtils.remove_entry_secure path end else path end end |