class IOSIconGenerator::CLI::Runner

Public Class Methods

new(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel) click to toggle source
# File lib/ios_icon_generator/cli/runner.rb, line 22
def initialize(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel)
  @argv = argv
  @trace_enabled = argv.include?('--trace')
  @argv.reject! { |v| v == '--trace' }
  @argv = argv
  @stdin = stdin
  @stdout = stdout
  @stderr = stderr
  @kernel = kernel
end

Public Instance Methods

execute!() click to toggle source
# File lib/ios_icon_generator/cli/runner.rb, line 33
def execute!
  exit_code =
    begin
      $stderr = @stderr
      $stdin = @stdin
      $stdout = @stdout

      Hanami::CLI.new(IOSIconGenerator::CLI::Commands).call(arguments: @argv)

      0
    rescue StandardError => e
      if @trace_enabled
        @stderr.puts "ERROR: #{e.message}".red
      else
        @stderr.puts("#{e.backtrace.shift}: #{e.message} (#{e.class})")
        @stderr.puts(e.backtrace.map { |s| "\tfrom #{s}" }.join("\n"))
      end
      1
    rescue SystemExit => e
      e.status
    ensure
      $stderr = STDERR
      $stdin = STDIN
      $stdout = STDOUT
    end

  # Proxy our exit code back to the injected kernel.
  @kernel.exit(exit_code)
end