Sha256: 29774ed181204c53ff61eccf53219718047b796d9e6c64bfd6f3014ee8072095

Contents?: true

Size: 1.21 KB

Versions: 21

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

module Nextgen
  module ThorExtensions
    def self.extended(base)
      super
      base.check_unknown_options!
    end

    def start(given_args = ARGV, config = {})
      config[:shell] ||= Thor::Base.shell.new
      handle_help_switches(given_args) do |args|
        dispatch(nil, args, nil, config)
      end
    rescue Exception => e # rubocop:disable Lint/RescueException
      handle_exception_on_start(e, config)
    end

    private

    def handle_help_switches(given_args)
      yield(given_args.dup)
    rescue Thor::UnknownArgumentError => e
      retry_with_args = []

      if given_args.first == "help"
        retry_with_args = ["help"] if given_args.length > 1
      elsif e.unknown.intersect?(%w[-h --help])
        retry_with_args = ["help", (given_args - e.unknown).first]
      end
      raise unless retry_with_args.any?

      yield(retry_with_args)
    end

    def handle_exception_on_start(error, config)
      case error
      when Errno::EPIPE
        # Ignore
      when Thor::Error, Interrupt
        raise unless config.fetch(:exit_on_failure, true)

        config[:shell]&.say_error(error.message, :red)
        exit(false)
      else
        raise
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
nextgen-0.31.1 lib/nextgen/thor_extensions.rb
nextgen-0.31.0 lib/nextgen/thor_extensions.rb
nextgen-0.30.0 lib/nextgen/thor_extensions.rb
nextgen-0.29.0 lib/nextgen/thor_extensions.rb
nextgen-0.28.2 lib/nextgen/thor_extensions.rb
nextgen-0.28.1 lib/nextgen/thor_extensions.rb
nextgen-0.28.0 lib/nextgen/thor_extensions.rb
nextgen-0.27.1 lib/nextgen/thor_extensions.rb
nextgen-0.27.0 lib/nextgen/thor_extensions.rb
nextgen-0.26.0 lib/nextgen/thor_extensions.rb
nextgen-0.25.0 lib/nextgen/thor_extensions.rb
nextgen-0.24.0 lib/nextgen/thor_extensions.rb
nextgen-0.23.0 lib/nextgen/thor_extensions.rb
nextgen-0.22.0 lib/nextgen/thor_extensions.rb
nextgen-0.21.0 lib/nextgen/thor_extensions.rb
nextgen-0.20.0 lib/nextgen/thor_extensions.rb
nextgen-0.19.0 lib/nextgen/thor_extensions.rb
nextgen-0.18.0 lib/nextgen/thor_extensions.rb
nextgen-0.17.1 lib/nextgen/thor_extensions.rb
nextgen-0.17.0 lib/nextgen/thor_extensions.rb