Module: Flipbook::Output

Defined in:
lib/flipbook/output.rb

Class Method Summary collapse

Class Method Details

.finish(io, target, mode) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/flipbook/output.rb', line 28

def finish(io, target, mode)
  io.close unless io.closed?
  File.chmod(mode, io.path)
  File.rename(io.path, target)
rescue Exception
  io.close!
  raise
end

.open(writer_class, path, **options) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/flipbook/output.rb', line 9

def open(writer_class, path, **options)
  target = File.expand_path(path)
  mode = File.exist?(target) ? File.stat(target).mode & 0o777 : 0o666 & ~File.umask
  io = Tempfile.new(".flipbook-", File.dirname(target))
  io.binmode
  writer = writer_class.new(io, **options)
  writer.instance_variable_set(:@owns_io, true)
  writer.instance_variable_set(:@target_path, target)
  writer.instance_variable_set(:@target_mode, mode)
  return writer unless block_given?

  yield writer
  writer.close
  path
rescue Exception
  io&.close!
  raise
end