Sha256: 1b443c5df4f47168ab15423906090ac3dedcc2b390494c30f4c0a6066435e1f0

Contents?: true

Size: 1.47 KB

Versions: 8

Compression:

Stored size: 1.47 KB

Contents

require "zip/zipfilesystem"

module JFoundry
  # Generic Zpi API. Uses rubyzip underneath, but may be changed in the future
  # to use system zip command if necessary.
  module Zip
    # Directory entries to exclude from packing.
    PACK_EXCLUSION_GLOBS = %w(.. . *~ #*# *.log)

    module_function

    # Get the entries in the zip file. Returns an array of the entire
    # contents, recursively (not just top-level).
    def entry_lines(file)
      entries = []
      ::Zip::ZipFile.foreach(file) do |zentry|
        entries << zentry
      end
      entries
    end

    # Unpack a zip +file+ to directory +dest+.
    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

    # Determine what files in +dir+ to pack.
    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

    # Package directory +dir+ as file +zipfile+.
    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

8 entries across 8 versions & 1 rubygems

Version Path
jfoundry-0.1.7 lib/jfoundry/zip.rb
jfoundry-0.1.6 lib/jfoundry/zip.rb
jfoundry-0.1.4 lib/jfoundry/zip.rb
jfoundry-0.1.3 lib/jfoundry/zip.rb
jfoundry-0.1.2 lib/jfoundry/zip.rb
jfoundry-0.1.1 lib/jfoundry/zip.rb
jfoundry-0.1.0.pre lib/jfoundry/zip.rb
jfoundry-0.1.0 lib/jfoundry/zip.rb