Method: Atomos.atomic_write
- Defined in:
- lib/atomos.rb
.atomic_write(dest, contents = nil, tmpdir: nil, &block) ⇒ Object
rubocop:disable Metrics/MethodLength
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/atomos.rb', line 9 def atomic_write(dest, contents = nil, tmpdir: nil, &block) unless contents.nil? ^ block.nil? raise ArgumentError, 'must provide either contents or a block' end tmpdir = Atomos.default_tmpdir_for_file(dest, tmpdir) require 'tempfile' Tempfile.open(".atomos.#{File.basename(dest)}", tmpdir) do |tmpfile| if contents tmpfile << contents else retval = yield tmpfile end tmpfile.close File.rename(tmpfile.path, dest) retval end end |