Module: Omnizip::Pipe

Defined in:
lib/omnizip/pipe.rb,
lib/omnizip/pipe/stream_compressor.rb,
lib/omnizip/pipe/stream_decompressor.rb

Overview

Unix pipe operations for stdin/stdout integration

Enables compression and decompression through Unix pipes without temporary files, supporting container workflows, CI/CD pipelines, and stream processing scenarios.

Examples:

Compress stdin to stdout

Omnizip::Pipe.compress($stdin, $stdout, format: :zip)

Decompress stdin to directory

Omnizip::Pipe.decompress($stdin, output_dir: 'extracted/')

File-to-file via pipe

File.open('input.txt', 'rb') do |input|
  File.open('output.zip', 'wb') do |output|
    Omnizip::Pipe.compress(input, output, format: :zip)
  end
end

Defined Under Namespace

Classes: StreamCompressor, StreamDecompressor

Class Method Summary collapse

Class Method Details

.compress(input, output, format: :zip, compression: nil, **options) ⇒ Integer

Compress from input stream to output stream

Examples:

Compress stdin to stdout

Omnizip::Pipe.compress($stdin, $stdout, format: :zip)

Compress file with custom options

File.open('data.txt', 'rb') do |input|
  File.open('data.zip', 'wb') do |output|
    Omnizip::Pipe.compress(
      input, output,
      format: :zip,
      compression: :deflate,
      level: 9,
      entry_name: 'data.txt'
    )
  end
end

Parameters:

  • input (IO)

    Input stream (stdin, File, Socket, etc.)

  • output (IO)

    Output stream (stdout, File, network, etc.)

  • format (Symbol) (defaults to: :zip)

    Archive format (:zip, :seven_zip)

  • compression (Symbol) (defaults to: nil)

    Compression algorithm

  • options (Hash)

    Additional compression options

Options Hash (**options):

  • :entry_name (String)

    Name for entry in archive

  • :chunk_size (Integer)

    Read buffer size (default 64KB)

  • :level (Integer)

    Compression level (1-9)

Returns:

  • (Integer)

    Number of bytes written



53
54
55
56
57
58
59
60
61
62
# File 'lib/omnizip/pipe.rb', line 53

def compress(input, output, format: :zip, compression: nil, **options)
  compressor = Pipe::StreamCompressor.new(
    input,
    output,
    format,
    compression: compression,
    **options,
  )
  compressor.compress
end

.decompress(input, output_dir: nil, output: nil, **options) ⇒ Integer, Hash

Decompress from input stream

Examples:

Extract to directory

Omnizip::Pipe.decompress($stdin, output_dir: 'extracted/')

Extract to stdout (single file)

Omnizip::Pipe.decompress($stdin, output: $stdout)

Parameters:

  • input (IO)

    Input stream containing archive

  • output_dir (String, nil) (defaults to: nil)

    Directory to extract to (nil = stdout)

  • options (Hash)

    Extraction options

Returns:

  • (Integer, Hash)

    Bytes written or extracted files hash



76
77
78
79
80
81
82
83
84
# File 'lib/omnizip/pipe.rb', line 76

def decompress(input, output_dir: nil, output: nil, **options)
  decompressor = Pipe::StreamDecompressor.new(
    input,
    output_dir: output_dir,
    output: output,
    **options,
  )
  decompressor.decompress
end

.pipe_mode?Boolean

Check if running in pipe mode

Detects if stdin/stdout are pipes (not TTY), indicating the program is being used in a Unix pipeline.

Examples:

if Omnizip::Pipe.pipe_mode?
  # Process stdin to stdout
else
  # Show interactive help
end

Returns:

  • (Boolean)

    True if stdin and stdout are pipes



99
100
101
# File 'lib/omnizip/pipe.rb', line 99

def pipe_mode?
  !$stdin.tty? && !$stdout.tty?
end

.stdin?(input) ⇒ Boolean

Detect if input is stdin

Parameters:

  • input (String, IO)

    Input path or IO object

Returns:

  • (Boolean)

    True if input is stdin



107
108
109
# File 'lib/omnizip/pipe.rb', line 107

def stdin?(input)
  ["-", $stdin].include?(input)
end

.stdout?(output) ⇒ Boolean

Detect if output is stdout

Parameters:

  • output (String, IO)

    Output path or IO object

Returns:

  • (Boolean)

    True if output is stdout



115
116
117
# File 'lib/omnizip/pipe.rb', line 115

def stdout?(output)
  ["-", $stdout].include?(output)
end