module Ronin::Support::Archive::Zip

Handles zip archive reading/writing.

@api public

@since 1.0.0

Public Class Methods

new(path, mode: 'r', &block) click to toggle source

Creates a zip archive reader or writer object.

@param [String] path

The path of the zip archive.

@param [String] mode

The mode to open the zip archive in.

@yield [zip]

If a block is given, it will be passed the zip stream object.

@yieldparam [Reader, Writer] zip

The zip reader or writer object.

@return [Reader, Writer]

The zip reader or writer object.

@raise [ArgumentError]

The mode must include either `r`, `w`, or `a`.

@api public

# File lib/ronin/support/archive/zip.rb, line 56
def self.new(path, mode: 'r', &block)
  zip_class = if mode.include?('w') || mode.include?('a')
                Writer
              elsif mode.include?('r')
                Reader
              else
                raise(ArgumentError,"mode argument must include either 'r', 'w', or 'a': #{mode.inspect}")
              end

  return zip_class.new(path,&block)
end
open(path, mode: 'r', &block) click to toggle source

Opens a zip file for reading or writing.

@param [String] path

The path to the zip file.

@param [String] mode

The mode to open the zip file in.

@yield [gz]

If a block is given, it will be passed the zip writer object.

@yieldparam [Reader, Writer] gz

The zip writer object.

@return [Reader, Writer]

The zip writer object.

@raise [ArgumentError]

The mode must include either `r`, `w`, or `a`.

@api public

# File lib/ronin/support/archive/zip.rb, line 91
def self.open(path, mode: 'r', &block)
  zip_class = if mode.include?('w') || mode.include?('a')
                Writer
              elsif mode.include?('r')
                Reader
              else
                raise(ArgumentError,"mode argument must include either 'r', 'w', or 'a'")
              end

  return zip_class.open(path,&block)
end