Sha256: b661d1f81991eb229633393e9df2d9872ded4d4d8e17aca54c870e8fc035abb1

Contents?: true

Size: 1.59 KB

Versions: 155

Compression:

Stored size: 1.59 KB

Contents

require 'fileutils'

module TmpFile

  TMPDIR = "/tmp/#{ENV['USER']}/tmpfiles" 
  FileUtils.mkdir_p TMPDIR unless File.exist? TMPDIR

  def self.tmpdir=(tmpdir)
    TMPDIR.replace tmpdir
    FileUtils.mkdir_p TMPDIR unless File.exist? TMPDIR
  end

  def self.tmpdir
    TMPDIR
  end


  # Creates a random file name, with the given suffix and a random number
  # up to +max+
  def self.random_name(s = "tmp-", max = 1_000_000_000)
    n = rand(max)
    s + n.to_s
  end

  # Creates a random filename in the temporary directory
  def self.tmp_file(s = "tmp-", max=1_000_000_000, dir = TMPDIR)
    File.expand_path(File.join(dir, random_name(s, max)))
  end

  def self.with_file(content = nil, erase = true, options = {})
    options, content, erase = content, nil, true if Hash === content
    options, erase = erase, true if Hash === erase 

    prefix = options[:prefix] || "tmp-"
    tmpdir = options[:tmpdir] || TMPDIR
    max = options[:max] || 1_000_000_000
    tmpfile = tmp_file prefix, max, tmpdir
    if options[:extension]
      tmpfile += ".#{options[:extension]}"
    end

    if IO === content
      Misc.consume_stream(content, false, tmpfile)
    else
      File.open(tmpfile, 'w') do |f| f.write content end if content != nil
    end

    result = yield(tmpfile)

    FileUtils.rm_rf tmpfile if File.exist?(tmpfile) and erase

    result
  end

  def self.with_dir(erase = true, options = {})
    prefix = options[:prefix] || "tmpdir-"
    tmpdir = tmp_file prefix

    FileUtils.mkdir_p tmpdir

    result = yield(tmpdir)

    FileUtils.rm_rf tmpdir if File.exist?(tmpdir) and erase

    result
  end
end

Version data entries

155 entries across 155 versions & 1 rubygems

Version Path
rbbt-util-5.44.1 lib/rbbt/util/tmpfile.rb
rbbt-util-5.43.0 lib/rbbt/util/tmpfile.rb
rbbt-util-5.42.0 lib/rbbt/util/tmpfile.rb
rbbt-util-5.41.1 lib/rbbt/util/tmpfile.rb
rbbt-util-5.41.0 lib/rbbt/util/tmpfile.rb
rbbt-util-5.40.5 lib/rbbt/util/tmpfile.rb
rbbt-util-5.40.4 lib/rbbt/util/tmpfile.rb
rbbt-util-5.40.3 lib/rbbt/util/tmpfile.rb
rbbt-util-5.40.0 lib/rbbt/util/tmpfile.rb
rbbt-util-5.39.0 lib/rbbt/util/tmpfile.rb
rbbt-util-5.38.1 lib/rbbt/util/tmpfile.rb
rbbt-util-5.38.0 lib/rbbt/util/tmpfile.rb
rbbt-util-5.37.16 lib/rbbt/util/tmpfile.rb
rbbt-util-5.37.15 lib/rbbt/util/tmpfile.rb
rbbt-util-5.37.14 lib/rbbt/util/tmpfile.rb
rbbt-util-5.37.13 lib/rbbt/util/tmpfile.rb
rbbt-util-5.37.12 lib/rbbt/util/tmpfile.rb
rbbt-util-5.37.11 lib/rbbt/util/tmpfile.rb
rbbt-util-5.37.10 lib/rbbt/util/tmpfile.rb
rbbt-util-5.37.9 lib/rbbt/util/tmpfile.rb