Sha256: eea1892472a5beac97684a9c61683e114c347a8b4c0f2da5fe30bbfd0c3ad720

Contents?: true

Size: 1.55 KB

Versions: 3

Compression:

Stored size: 1.55 KB

Contents

require_relative "cmdline"
require_relative "core"
require_relative "utils"

module Giblish
  # The 'main' class of giblish
  class Application
    # does not return, exits with status code
    def run_from_cmd_line
      status = run(ARGV)
      exit(status)
    end

    # return exit status (0 for success)
    def run(args)
      # force immediate output
      $stdout.sync = true

      # setup logging
      Giblog.setup

      # Parse cmd line
      cmdline = CmdLineParser.new args
      Giblog.logger.debug { "cmd line args: #{cmdline.args}" }

      exit_code = execute_conversion(cmdline)
      Giblog.logger.info { "Giblish is done!" } if exit_code.zero?
      exit_code
    end

    private

    # Convert using given args
    # return exit code (0 for success)
    def execute_conversion(cmdline)
      conv_error = false
      begin
        conv_error = converter_factory(cmdline).convert
      rescue StandardError => e
        log_error e
        conv_error = true
      end
      conv_error ? 1 : 0
    end

    # return the converter corresponding to the given cmd line
    # options
    def converter_factory(cmdline)
      if cmdline.args[:gitRepoRoot]
        Giblog.logger.info { "User asked to parse a git repo" }
        GitRepoConverter.new(cmdline.args)
      else
        FileTreeConverter.new(cmdline.args)
      end
    end

    def log_error(exc)
      Giblog.logger.error do
        <<~ERR_MSG
          Error: #{exc.message}
          Backtrace:
          \t#{exc.backtrace.join("\n\t")}

          cmdline.usage
        ERR_MSG
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
giblish-0.8.2 lib/giblish/application.rb
giblish-0.8.1 lib/giblish/application.rb
giblish-0.8.0 lib/giblish/application.rb