module FakeFS::Dir::Tmpname
def create(basename, *rest)
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) else opts = {} end tmpdir, = *rest tmpdir ||= self.tmpdir Dir.mkdir(tmpdir) unless Dir.exist?(tmpdir) 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 || n < max_try raise "cannot generate temporary name using `#{basename}' " \ "under `#{tmpdir}'" end path end
def make_tmpname(prefix_suffix, suffix)
def make_tmpname(prefix_suffix, suffix) 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 << "-#{suffix}" if suffix path << suffix end
def tmpdir
def tmpdir Dir.tmpdir end