Module: Dir::Tmpname

Defined in:
lib/tmpdir.rb

Overview

:nodoc:

Class Method Summary collapse

Class Method Details

.create(basename, *rest) ⇒ Object



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/tmpdir.rb', line 125

def create(basename, *rest)
  if opts = Hash.try_convert(rest[-1])
    opts = opts.dup if rest.pop.equal?(opts)
    max_try = opts.delete(:max_try)
    opts = [opts]
  else
    opts = []
  end
  tmpdir, = *rest
  if $SAFE > 0 and tmpdir.tainted?
    tmpdir = '/tmp'
  else
    tmpdir ||= tmpdir()
  end
  n = nil
  begin
    path = File.join(tmpdir, make_tmpname(basename, n))
    yield(path, n, *opts)
  rescue Errno::EEXIST
    n ||= 0
    n += 1
    retry if !max_try or n < max_try
    raise "cannot generate temporary name using `#{basename}' under `#{tmpdir}'"
  end
  path
end

.make_tmpname(prefix_suffix, n) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/tmpdir.rb', line 108

def make_tmpname(prefix_suffix, n)
  case prefix_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
  t = Time.now.strftime("%Y%m%d")
  path = "#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
  path << "-#{n}" if n
  path << suffix
end

.tmpdirObject



104
105
106
# File 'lib/tmpdir.rb', line 104

def tmpdir
  Dir.tmpdir
end