class Morpheus::Morpkg::ZipFileGenerator
This is a simple example which uses rubyzip to recursively generate a zip file from the contents of a specified directory. The directory itself is not included in the archive, rather just its contents.
Usage:
directoryToZip = "/tmp/input" outputFile = "/tmp/out.zip" zf = ZipFileGenerator.new(directoryToZip, outputFile) zf.write()
Public Class Methods
new(inputDir, outputFile)
click to toggle source
Initialize with the directory to zip and the location of the output archive.
# File lib/morpheus/morpkg.rb, line 85 def initialize(inputDir, outputFile) @inputDir = inputDir @outputFile = outputFile end
Public Instance Methods
write()
click to toggle source
Zip the input directory.
# File lib/morpheus/morpkg.rb, line 91 def write() entries = Dir.entries(@inputDir); entries.delete("."); entries.delete("..") io = Zip::File.open(@outputFile, Zip::File::CREATE); writeEntries(entries, "", io) io.close(); end
Private Instance Methods
writeEntries(entries, path, io)
click to toggle source
A helper method to make the recursion work.
# File lib/morpheus/morpkg.rb, line 100 def writeEntries(entries, path, io) entries.each { |e| zipFilePath = path == "" ? e : File.join(path, e) diskFilePath = File.join(@inputDir, zipFilePath) puts "Deflating " + diskFilePath # remove me if File.directory?(diskFilePath) io.mkdir(zipFilePath) subdir =Dir.entries(diskFilePath); subdir.delete("."); subdir.delete("..") writeEntries(subdir, zipFilePath, io) else io.get_output_stream(zipFilePath) { |f| f.puts(File.open(diskFilePath, "rb").read())} end } end