class FileComposer::Documents::Zip
Can compress documents together into a zip file.
Attributes
blueprint[R]
Public Class Methods
new(filename:, blueprint: {})
click to toggle source
Calls superclass method
FileComposer::Documents::Base::new
# File lib/file_composer/documents/zip.rb, line 18 def initialize(filename:, blueprint: {}) super(filename: filename) @blueprint = Blueprint.make(blueprint) end
Public Instance Methods
write!(temp_root = '', store = Stores::Null.new)
click to toggle source
# File lib/file_composer/documents/zip.rb, line 24 def write!(temp_root = '', store = Stores::Null.new) results = blueprint.write!(temp_root) write_time_in_seconds = results.sum(&:time_in_seconds) physical_filename = nil zip_time_in_seconds = Benchmark.measure do physical_filename = zip!(temp_root, results) end.real total_time_in_seconds = write_time_in_seconds + zip_time_in_seconds cleanup(results) final_filename = store.move!(physical_filename) file_result = FileResult.new(filename, final_filename) Result.new(file_result, total_time_in_seconds) end
Private Instance Methods
cleanup(results)
click to toggle source
# File lib/file_composer/documents/zip.rb, line 57 def cleanup(results) results.each do |result| result.file_results.each do |file_result| FileUtils.rm(file_result.physical_filename, force: true) end end end
zip!(temp_root, results)
click to toggle source
# File lib/file_composer/documents/zip.rb, line 45 def zip!(temp_root, results) make_temp_filename(temp_root).tap do |physical_filename| ::Zip::File.open(physical_filename, ::Zip::File::CREATE) do |zipfile| results.each do |result| result.file_results.each do |file_result| zipfile.add(file_result.logical_filename, file_result.physical_filename) end end end end end