Sha256: aee044ba91d535a7b554866df1e85e6aff19eb0556adda94e955e6aa08c0bd0c

Contents?: true

Size: 1.13 KB

Versions: 5

Compression:

Stored size: 1.13 KB

Contents

require 'zip'

module Stevenson
  module OutputFilter
    class Zip < Base

      def output
        "#{directory}.zip".tap do |dir|
          # Zip up the output directory
          write directory, dir
        end
      end

      private

      def write(inputDir, outputFile)
        @inputDir = inputDir
        @outputFile = outputFile

        entries = Dir.entries(@inputDir)
        entries.delete(".")
        entries.delete("..")
        io = ::Zip::File.open(@outputFile, ::Zip::File::CREATE)

        writeEntries(entries, "", io)
        io.close()
      end

      def writeEntries(entries, path, io)
        entries.each do |entry|
          zipFilePath = path == "" ? entry : File.join(path, entry)
          diskFilePath = File.join(@inputDir, zipFilePath)
          if File.directory?(diskFilePath)
            io.mkdir(zipFilePath)
            subdir = Dir.entries(diskFilePath); subdir.delete("."); subdir.delete("..")
            writeEntries(subdir, zipFilePath, io)
          else
            io.get_output_stream(zipFilePath) { |f| f.puts(File.open(diskFilePath, "rb").read()) }
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
stevenson-2.2.2 lib/stevenson/output_filters/zip.rb
stevenson-2.2.1 lib/stevenson/output_filters/zip.rb
stevenson-2.2.0 lib/stevenson/output_filters/zip.rb
stevenson-2.1.0 lib/stevenson/output_filters/zip.rb
stevenson-2.0.0 lib/stevenson/output_filters/zip.rb