Module: RubyLens::AtomicOutput
- Defined in:
- lib/rubylens/atomic_output.rb
Overview
Owner-only atomic replacement shared by every writer: outputs are staged in a 0600 temporary alongside the target and renamed into place, so a partial write never becomes visible and permissions never loosen mid-write.
Class Method Summary collapse
Class Method Details
.replace(output) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/rubylens/atomic_output.rb', line 13 def replace(output) output = File.(output) FileUtils.mkdir_p(File.dirname(output), mode: 0o700) temporary = File.join(File.dirname(output), ".#{File.basename(output)}.#{SecureRandom.hex(6)}.tmp") File.open(temporary, File::WRONLY | File::CREAT | File::EXCL, 0o600).close yield temporary File.chmod(0o600, temporary) File.rename(temporary, output) File.chmod(0o600, output) output ensure FileUtils.rm_f(temporary) if temporary && File.exist?(temporary) end |