Sha256: 011acecb47830e83b9f50fa364669fc7f030db0a97072dbdec9ba7f06bd860bd

Contents?: true

Size: 1.2 KB

Versions: 7

Compression:

Stored size: 1.2 KB

Contents

require "thor"

require_relative "../excavate"

module Excavate
  class CLI < Thor
    STATUS_SUCCESS = 0
    STATUS_UNKNOWN_ERROR = 1
    STATUS_TARGET_EXISTS = 2
    STATUS_TARGET_NOT_EMPTY = 3

    def self.exit_on_failure?
      false
    end

    def self.start(given_args = ARGV, config = {})
      args = if all_commands.key?(given_args[0])
               given_args
             else
               given_args.dup.unshift("extract")
             end

      super(args, config)
    end

    desc "extract ARCHIVE", "Extract ARCHIVE to a new directory"
    option :recursive, aliases: :r, type: :boolean, default: false, desc: "Also extract all nested archives."
    def extract(archive)
      target = Excavate::Archive.new(archive).extract(recursive_packages: options[:recursive])
      success("Successfully extracted to #{File.basename(target)}/")
    rescue TargetExistsError => e
      error(e.message, STATUS_TARGET_EXISTS)
    rescue TargetNotEmptyError => e
      error(e.message, STATUS_TARGET_NOT_EMPTY)
    end
    default_task :extract

    private

    def success(message)
      say(message)
      STATUS_SUCCESS
    end

    def error(message, status)
      say(message, :red)
      status
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
excavate-0.2.5 lib/excavate/cli.rb
excavate-0.2.4 lib/excavate/cli.rb
excavate-0.2.3 lib/excavate/cli.rb
excavate-0.2.2 lib/excavate/cli.rb
excavate-0.2.1 lib/excavate/cli.rb
excavate-0.2.0 lib/excavate/cli.rb
excavate-0.1.1 lib/excavate/cli.rb