Class: Omnizip::Cli

Inherits:
Thor
  • Object
show all
Includes:
Shared
Defined in:
lib/omnizip/cli.rb,
lib/omnizip/cli/shared.rb

Overview

Command-line interface for Omnizip.

Provides Thor-based CLI commands for compressing and decompressing files using various compression algorithms.

Defined Under Namespace

Modules: Shared

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Shared

#format_bytes, #handle_error

Class Method Details

.exit_on_failure?Boolean

Returns:

  • (Boolean)


304
305
306
# File 'lib/omnizip/cli.rb', line 304

def exit_on_failure?
  true
end

Instance Method Details

#compress(input, output) ⇒ Object



342
343
344
345
346
347
348
349
350
351
# File 'lib/omnizip/cli.rb', line 342

def compress(input, output)
  # Pipe mode: use streaming compression
  if Omnizip::Pipe.stdin?(input) || Omnizip::Pipe.stdout?(output)
    compress_pipe(input, output)
  else
    Commands::CompressCommand.new(options).run(input, output)
  end
rescue StandardError => e
  handle_error(e)
end

#convert(source, target) ⇒ Object



454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
# File 'lib/omnizip/cli.rb', line 454

def convert(source, target)
  puts "Converting #{source} to #{target}..." if options[:verbose]

  result = Omnizip::Converter.convert(
    source,
    target,
    compression: options[:compression]&.to_sym,
    compression_level: options[:level],
    filter: options[:filter]&.to_sym,
    solid: options[:solid],
    preserve_metadata: options[:preserve_metadata],
    delete_source: options[:delete_source],
  )

  puts "Conversion complete!"
  puts "Source: #{result.source_path} (#{format_bytes(result.source_size)})"
  puts "Target: #{result.target_path} (#{format_bytes(result.target_size)})"
  puts "Size change: #{result.size_reduction.round(1)}%"
  puts "Duration: #{result.duration.round(2)}s"
  puts "Entries: #{result.entry_count}"

  if result.warnings?
    puts "\nWarnings:"
    result.warnings.each { |w| puts "  - #{w}" }
  end
rescue StandardError => e
  handle_error(e)
end

#decompress(input, output) ⇒ Object



380
381
382
383
384
385
386
387
388
389
# File 'lib/omnizip/cli.rb', line 380

def decompress(input, output)
  # Pipe mode: use streaming decompression
  if Omnizip::Pipe.stdin?(input) || Omnizip::Pipe.stdout?(output)
    decompress_pipe(input, output)
  else
    Commands::DecompressCommand.new(options).run(input, output)
  end
rescue StandardError => e
  handle_error(e)
end

#listObject



404
405
406
407
408
# File 'lib/omnizip/cli.rb', line 404

def list
  Commands::ListCommand.new(options).run
rescue StandardError => e
  handle_error(e)
end

#versionObject



411
412
413
414
# File 'lib/omnizip/cli.rb', line 411

def version
  puts "Omnizip v#{Omnizip::VERSION}"
  puts "Pure Ruby implementation of LZMA compression"
end