Sha256: 14b928cce07814d1dc2211eb1c283666a66a8ff5344a3aac6cd65d4ee01ed88c

Contents?: true

Size: 1.25 KB

Versions: 11

Compression:

Stored size: 1.25 KB

Contents

require 'zip'

module Epubber::Services
  class Compressor
    def compress(dir, file)
      FileUtils.rm file if File.exists?(file)
      generator = ZipFileGenerator.new dir, file
      generator.write
    end
  end

  # Helper class to create the actual zip file
  class ZipFileGenerator
    # Initialize with the directory to zip and the location of the output archive.
    def initialize(inputDir, outputFile)
      @inputDir   = inputDir
      @outputFile = outputFile
    end

    # Zip the input directory.
    def write()
      entries = Dir.entries(@inputDir); entries.delete("."); entries.delete("..")
      io = Zip::File.open(@outputFile, Zip::File::CREATE);

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

  private

    def writeEntries(entries, path, io)
      entries.each { |e|
        zipFilePath = path == "" ? e : File.join(path, e)
        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

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
epubber-0.2.0 lib/epubber/services/compressor.rb
epubber-0.1.5 lib/epubber/services/compressor.rb
epubber-0.1.4 lib/epubber/services/compressor.rb
epubber-0.1.3 lib/epubber/services/compressor.rb
epubber-0.1.2 lib/epubber/services/compressor.rb
epubber-0.1.1 lib/epubber/services/compressor.rb
epubber-0.1.0 lib/epubber/services/compressor.rb
epubber-0.0.4 lib/epubber/services/compressor.rb
epubber-0.0.3 lib/epubber/services/compressor.rb
epubber-0.0.2 lib/epubber/services/compressor.rb
epubber-0.0.1 lib/epubber/services/compressor.rb