Sha256: 627174efb81d7d3fe50c50a77fdc019eb9cd6b49d0646e5de4b34e466c9234b3

Contents?: true

Size: 1.06 KB

Versions: 2

Compression:

Stored size: 1.06 KB

Contents

require 'zip/zipfilesystem'

module CFoundry
  module Zip
    PACK_EXCLUSION_GLOBS = ['..', '.', '*~', '#*#', '*.log']

    module_function

    def entry_lines(file)
      entries = []
      ::Zip::ZipFile.foreach(file) do |zentry|
        entries << zentry
      end
      entries
    end

    def unpack(file, dest)
      ::Zip::ZipFile.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

    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

    def pack(dir, zipfile)
      files = files_to_pack(dir)
      return false if files.empty?

      ::Zip::ZipFile.open(zipfile, true) do |zf|
        files.each do |f|
          zf.add(f.sub("#{dir}/",''), f)
        end
      end

      true
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cfoundry-0.2.0 lib/cfoundry/zip.rb
cfoundry-0.1.2 lib/cfoundry/zip.rb