Sha256: cc09e8c165d13a12dff9284a036bd7b59c79d6321c8422121b2be7f92d262049

Contents?: true

Size: 1.85 KB

Versions: 1

Compression:

Stored size: 1.85 KB

Contents

# frozen_string_literal: true

require 'dry/cli'
require 'forwardable'
require 'tty/box'

module Githuh
  module CLI
    class Launcher
      attr_accessor :argv, :stdin, :stdout, :stderr, :kernel

      def initialize(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = nil)
        if ::Githuh.launcher
          raise(ArgumentError, "Another instance of CLI Launcher was detected, aborting.")
        else
          Githuh.launcher = self
        end

        self.argv   = argv
        self.stdin  = stdin
        self.stdout = stdout
        self.stderr = stderr
        self.kernel = kernel
      end

      def execute!
        if argv.empty? || !(%w(--help -h) & argv).empty?
          stdout.puts <<~BANNER

            #{'Githuh CLI'.bold.yellow} #{::Githuh::VERSION.bold.green} — API client for Github.com.
            #{'© 2020 Konstantin Gredeskoul, All rights reserved.  MIT License.'.cyan}

          BANNER

          Githuh.configure_kernel_behavior! help: true
        else
          Githuh.configure_kernel_behavior!
        end

        ::Dry::CLI.new(Commands).call(arguments: argv, out: stdout, err: stderr)
      rescue StandardError => e
        box = TTY::Box.frame('ERROR:', ' ',
                             e.message,
                             padding: 1,
                             align:   :left,
                             title:   { top_center: Githuh::BANNER },
                             width:   80,
                             style:   {
                               bg:     :red,
                               border: {
                                 fg: :bright_yellow,
                                 bg: :red
                               }
                             })
        stderr.print box
      ensure
        Githuh.restore_kernel_behavior!
        exit(10) unless Githuh.in_test
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
githuh-0.1.2 lib/githuh/cli/launcher.rb