Class: Dir
- Inherits:
-
Object
- Object
- Dir
- Defined in:
- lib/tmpdir.rb
Constant Summary collapse
- @@systmpdir =
'/tmp'
Class Method Summary collapse
-
.mktmpdir(prefix_suffix = nil, tmpdir = nil) ⇒ Object
Dir.mktmpdir creates a temporary directory.
-
.tmpdir ⇒ Object
Returns the operating system's temporary file path.
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
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/tmpdir.rb', line 99 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 |
.tmpdir ⇒ Object
Returns the operating system's temporary file path.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/tmpdir.rb', line 39 def Dir::tmpdir tmp = '.' if $SAFE > 0 tmp = @@systmpdir else for dir in [ENV['TMPDIR'], ENV['TMP'], ENV['TEMP'], ENV['USERPROFILE'], @@systmpdir, '/tmp'] if dir and File.directory?(dir) and File.writable?(dir) tmp = dir break end end File.(tmp) end end |