class Roku::Zip
Public Class Methods
generate(input, output)
click to toggle source
# File lib/roku/zip.rb, line 14 def self.generate(input, output); new(input, output).write; end
new(inputDir, outputFile)
click to toggle source
Initialize with the directory to zip and the location of the output archive.
# File lib/roku/zip.rb, line 25 def initialize(inputDir, outputFile) @inputDir = inputDir @outputFile = outputFile end
Public Instance Methods
files_in(dir)
click to toggle source
# File lib/roku/zip.rb, line 16 def files_in(dir) Dir.entries(dir).select {|file| file =~ /^[^\.]/ && !is_build_directory?(dir, file) } end
is_build_directory?(current_directory, file)
click to toggle source
# File lib/roku/zip.rb, line 20 def is_build_directory?(current_directory, file) !!(@outputFile =~ Regexp.new(current_directory + "/#{file}/(?:[^\/]*)\.zip")) end
write()
click to toggle source
Zip
the input directory.
# File lib/roku/zip.rb, line 31 def write entries = files_in(@inputDir) 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/roku/zip.rb, line 41 def writeEntries(entries, path, io) entries.each { |e| zipFilePath = path == "" ? e : ::File.join(path, e) diskFilePath = ::File.join(@inputDir, zipFilePath) puts "Deflating " + diskFilePath if File.directory?(diskFilePath) io.mkdir(zipFilePath) subdir = files_in(diskFilePath) writeEntries(subdir, zipFilePath, io) else io.get_output_stream(zipFilePath) { |f| f.puts(File.open(diskFilePath, "rb").read())} end } end