Sha256: 8133216c16b83dbe4a975c316b33cf37911a4d6f9bd4868d3a6f01f518538446

Contents?: true

Size: 1.27 KB

Versions: 10

Compression:

Stored size: 1.27 KB

Contents

require 'zip'

class ZipFileGenerator
  # Initialize with the directory to zip and the location of the output archive.
  def initialize(input_dir, output_file)
    @input_dir = input_dir
    @output_file = output_file
  end

  # Zip the input directory.
  def write
    entries = Dir.entries(@input_dir) - %w(. ..)

    ::Zip::File.open(@output_file, ::Zip::File::CREATE) do |io|
      write_entries entries, '', io
    end
  end

  private

  # A helper method to make the recursion work.
  def write_entries(entries, path, io)
    entries.each do |e|
      zip_file_path = path == '' ? e : File.join(path, e)
      disk_file_path = File.join(@input_dir, zip_file_path)
      puts "Deflating #{disk_file_path}"

      if File.directory? disk_file_path
        recursively_deflate_directory(disk_file_path, io, zip_file_path)
      else
        put_into_archive(disk_file_path, io, zip_file_path)
      end
    end
  end

  def recursively_deflate_directory(disk_file_path, io, zip_file_path)
    io.mkdir zip_file_path
    subdir = Dir.entries(disk_file_path) - %w(. ..)
    write_entries subdir, zip_file_path, io
  end

  def put_into_archive(disk_file_path, io, zip_file_path)
    io.get_output_stream(zip_file_path) do |f|
      f.puts(File.open(disk_file_path, 'rb').read)
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
comfortable_mexican_loveseat-0.1.1 lib/tasks/zip_file_generator.rb
comfortable_mexican_loveseat-0.1.0 lib/tasks/zip_file_generator.rb
comfortable_mexican_loveseat-0.0.23 lib/tasks/zip_file_generator.rb
comfortable_mexican_loveseat-0.0.22 lib/tasks/zip_file_generator.rb
comfortable_mexican_loveseat-0.0.21 lib/tasks/zip_file_generator.rb
comfortable_mexican_loveseat-0.0.20 lib/tasks/zip_file_generator.rb
comfortable_mexican_loveseat-0.0.19 lib/tasks/zip_file_generator.rb
comfortable_mexican_loveseat-0.0.18 lib/tasks/zip_file_generator.rb
comfortable_mexican_loveseat-0.0.17 lib/tasks/zip_file_generator.rb
comfortable_mexican_loveseat-0.0.16 lib/tasks/zip_file_generator.rb