Module: Dir::Tmpname

Defined in:
lib/tmpdir.rb

Overview

:nodoc:

Class Method Summary collapse

Class Method Details

.create(basename, tmpdir = nil, max_try: nil, **opts) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/tmpdir.rb', line 120

def create(basename, tmpdir=nil, max_try: nil, **opts)
  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
# File 'lib/tmpdir.rb', line 108

def make_tmpname((prefix, suffix), n)
  prefix = (String.try_convert(prefix) or
            raise ArgumentError, "unexpected prefix: #{prefix.inspect}")
  suffix &&= (String.try_convert(suffix) or
              raise ArgumentError, "unexpected suffix: #{suffix.inspect}")
  t = Time.now.strftime("%Y%m%d")
  path = "#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
  path << "-#{n}" if n
  path << suffix if suffix
  path
end

.tmpdirObject



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

def tmpdir
  Dir.tmpdir
end