Module: Dir::Tmpname
- Defined in:
- lib/tmpdir.rb
Overview
:nodoc:
Class Method Summary collapse
- .create(basename, tmpdir = nil, max_try: nil, **opts) ⇒ Object
- .make_tmpname(prefix, suffix, n) ⇒ Object
- .tmpdir ⇒ Object
Class Method Details
.create(basename, tmpdir = nil, max_try: nil, **opts) ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/tmpdir.rb', line 121 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
109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/tmpdir.rb', line 109 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)}".dup path << "-#{n}" if n path << suffix if suffix path end |