Class: Pitchfork::TmpIO

Inherits:
File
  • Object
show all
Defined in:
lib/pitchfork/tmpio.rb

Overview

some versions of Ruby had a broken Tempfile which didn’t work well with unlinked files. This one is much shorter, easier to understand, and slightly faster.

Class Method Summary collapse

Class Method Details

.newObject

creates and returns a new File object. The File is unlinked immediately, switched to binary mode, and userspace output buffering is disabled



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/pitchfork/tmpio.rb', line 14

def self.new
  path = nil

  # workaround File#path being tainted:
  # https://bugs.ruby-lang.org/issues/14485
  fp = begin
    path = "#{Dir::tmpdir}/#{rand}"
    super(path, RDWR|CREAT|EXCL, 0600)
  rescue Errno::EEXIST
    retry
  end

  unlink(path)
  fp.binmode
  fp.sync = true
  fp
end