module CFoundry::Zip
Generic Zpi API. Uses rubyzip underneath, but may be changed in the future to use system zip command if necessary.
Constants
- PACK_EXCLUSION_GLOBS
Directory entries to exclude from packing.
Public Instance Methods
entry_lines(file)
click to toggle source
Get the entries in the zip file. Returns an array of the entire contents, recursively (not just top-level).
# File lib/cfoundry/zip.rb, line 14 def entry_lines(file) entries = [] ::Zip::File.foreach(file) do |zentry| entries << zentry end entries end
files_to_pack(dir)
click to toggle source
Determine what files in dir
to pack.
# File lib/cfoundry/zip.rb, line 33 def files_to_pack(dir) Dir.glob("#{dir}/**/*", File::FNM_DOTMATCH).select do |f| File.exists?(f) && PACK_EXCLUSION_GLOBS.none? do |e| File.fnmatch(e, File.basename(f)) end end end
pack(dir, zipfile)
click to toggle source
Package directory dir
as file zipfile
.
# File lib/cfoundry/zip.rb, line 43 def pack(dir, zipfile) files = files_to_pack(dir) return false if files.empty? ::Zip::File.open(zipfile, true) do |zf| files.each do |f| zf.add(f.sub("#{dir}/",''), f) end end true end
unpack(file, dest)
click to toggle source
Unpack a zip file
to directory dest
.
# File lib/cfoundry/zip.rb, line 23 def unpack(file, dest) ::Zip::File.foreach(file) do |zentry| epath = "#{dest}/#{zentry}" dirname = File.dirname(epath) FileUtils.mkdir_p(dirname) unless File.exists?(dirname) zentry.extract(epath) unless File.exists?(epath) end end