Class: Dir

Inherits:
Object
  • Object
show all
Defined in:
lib/rubysl/tmpdir/tmpdir.rb

Defined Under Namespace

Modules: Tmpname

Class Method Summary collapse

Class Method Details

.mktmpdir(prefix_suffix = nil, *rest) ⇒ 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


79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/rubysl/tmpdir/tmpdir.rb', line 79

def Dir.mktmpdir(prefix_suffix=nil, *rest)
  path = Tmpname.create(prefix_suffix || "d", *rest) {|n| mkdir(n, 0700)}
  if block_given?
    begin
      yield path
    ensure
      FileUtils.remove_entry_secure path
    end
  else
    path
  end
end

.tmpdirObject

Returns the operating system’s temporary file path.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/rubysl/tmpdir/tmpdir.rb', line 20

def Dir::tmpdir
  tmp = '.'
  if $SAFE > 0
    tmp = @@systmpdir
  else
    for dir in [ENV['TMPDIR'], ENV['TMP'], ENV['TEMP'], @@systmpdir, '/tmp']
	if dir and stat = File.stat(dir) and stat.directory? and stat.writable?
 tmp = dir
 break
	end rescue nil
    end
    File.expand_path(tmp)
  end
end