Method: File.atomic_open

Defined in:
lib/core/facets/file/atomic_open.rb

.atomic_open(file_name, mode = "r", temp_dir = nil, &block) ⇒ Object

Same as File.open, but acts on a temporary copy of named file, copying the file back to the original on completion.

Uncommon:

  • require ‘facets/fileutils/atomic_open’



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/core/facets/file/atomic_open.rb', line 13

def self.atomic_open(file_name, mode="r", temp_dir=nil, &block)
  temp_dir  = temp_dir || Dir.tmpdir
  temp_file = Tempfile.new("#{atomic_id}-" + basename(file_name), temp_dir)

  if File.exist?(file_name)
    FileUtils.cp(file_name, temp_file)
  end

  open(temp_file, mode, &block)

  FileUtils.cp(temp_file, file_name)
end