lib/tryouts/cli.rb



# lib/tryouts/cli.rb

require 'optparse'

require_relative 'cli/opts'
require_relative 'cli/formatters'
require_relative 'test_runner'

class Tryouts
  class CLI
    def initialize
      @options = {
        framework: :direct,
        verbose: false,
        inspect: false,
      }
    end

    def run(files, **options)
      @options.merge!(options)

      output_manager = FormatterFactory.create_output_manager(@options)

      handle_version_flag(@options, output_manager)
      validate_files_exist(files, output_manager)

      runner = TestRunner.new(
        files: files,
        options: @options,
        output_manager: output_manager,
      )

      runner.run
    end

    private

    def handle_version_flag(options, output_manager)
      return unless options[:version]

      output_manager.raw("Tryouts version #{Tryouts::VERSION}")
      exit 0
    end

    def validate_files_exist(files, output_manager)
      missing_files = files.reject { |file| File.exist?(file) }

      unless missing_files.empty?
        missing_files.each { |file| output_manager.error("File not found: #{file}") }
        exit 1
      end
    end
  end
end