class CreateZipCommand
def call(files)
# Create temp directory for files
tmp_dir = Dir.mktmpdir
tmp_zip_path = File.join(tmp_dir, "files.zip")
# Move files to the temporary folder you created above
files.map do |file|
download_file(file, tmp_dir)
end
# Go to the folder and archive the entire contents
`cd #{tmp_dir} && zip #{tmp_zip_path} ./*`
# Return zip path
tmp_zip_path
end
end
> CreateZipCommand.new.call(files)
=> "/var/folders/bk/0c864z710654sx555jpdpx9c0000gn/T/d20190126-7447-d27fpl/files.zip")
Most gems for working with archives eat a lot of memory when working with large files. This solution does not have these problems.
Make sure that the zip utility is installed on your computer - it don't work without it
Top comments (0)