Class: Tempfiles

Inherits:
Object show all
Defined in:
lib/drx/tempfiles.rb

Overview

Holds a set of related temporary file names. When it goes out of scope, the files are deleted.

files = Tempfiles.new('foo')
puts files['gif']
puts files['xml']

Instance Method Summary collapse

Constructor Details

#initialize(basename = nil) ⇒ Tempfiles

Returns a new instance of Tempfiles.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/drx/tempfiles.rb', line 11

def initialize(basename=nil)
  if basename.nil?
    basename = $0.tr('^a-z', '_').tr('_', '') + 'xyzzy'
  end

  @refs = []
  @paths = Hash.new do |h, suffix|
    tf = Tempfile.new([basename, '.' + suffix])
    tf.close
    @refs << tf  # We must keep a ref to this object or its finalizer will delete the temp file.
    h[suffix] = tf.path
  end

  if block_given?
    begin
      yield self
    ensure
      unlink
    end
  end
end

Instance Method Details

#[](suffix) ⇒ Object



33
34
35
# File 'lib/drx/tempfiles.rb', line 33

def [](suffix)
  @paths[suffix]
end

This method shouldn’t be needed, as files are supposed to get deleted when Tempfile instances are GC’ed. But it seems they aren’t always.



40
41
42
# File 'lib/drx/tempfiles.rb', line 40

def unlink
  @refs.each { |tf| tf.unlink }
end