Class: Dir

Inherits:
Object
  • Object
show all
Defined in:
lib/rd2odt/compat/ruby-1.8.6.rb

Overview

This part is from Ruby 1.8.7's tmpdir.rb.

Class Method Summary collapse

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



48
49
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
# File 'lib/rd2odt/compat/ruby-1.8.6.rb', line 48

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