Module: Roo::Tempdir

Included in:
Excelx, OpenOffice
Defined in:
lib/roo/tempdir.rb

Instance Method Summary collapse

Instance Method Details

#finalize_tempdirs(object_id) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
# File 'lib/roo/tempdir.rb', line 3

def finalize_tempdirs(object_id)
  if @tempdirs && (dirs_to_remove = @tempdirs[object_id])
    @tempdirs.delete(object_id)
    dirs_to_remove.each do |dir|
      # Pass force=true to avoid an exception (and thus warnings in Ruby 3.1) if dir has
      # already been removed. This can occur when the finalizer is called both in a forked
      # child process and in the parent.
      ::FileUtils.remove_entry(dir, true)
    end
  end
end

#make_tempdir(object, prefix, root) ⇒ Object



15
16
17
18
19
20
21
22
# File 'lib/roo/tempdir.rb', line 15

def make_tempdir(object, prefix, root)
  root ||= ENV["ROO_TMP"]
  # NOTE: This folder is cleaned up by finalize_tempdirs.
  ::Dir.mktmpdir("#{Roo::TEMP_PREFIX}#{prefix}", root).tap do |tmpdir|
    @tempdirs ||= Hash.new { |h, k| h[k] = [] }
    @tempdirs[object.object_id] << tmpdir
  end
end