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