class Tryouts::CLI::Run

The logic bin/tryouts uses for running tryouts.
= Run

def dreams

Display the dreams from all known tryouts
$ sergeant dreams [path/2/tryouts]
def dreams
  load_available_tryouts_files
  if Tryouts.verbose > 0
    puts Tryouts.dreams.to_yaml
  else
    Tryouts.dreams.each_pair do |n,dreams|
      puts n
      dreams.each_pair do |n, dream|
        puts "  " << n
        dream.each_pair do |n, drill|
          puts "    " << n
        end
      end
    end
  end
end

def init

def init
  @tryouts_globs = [GYMNASIUM_GLOB, File.join(Dir.pwd, '*_tryouts.rb')]
end

def list

Displays all known tryouts from the current working directory
$ sergeant list
def list
  load_available_tryouts_files
  Tryouts.instances.each_pair do |n,tryouts_inst|
    puts n
    if Tryouts.verbose > 0
      puts "  #{tryouts_inst.paths.join("\n  ")}"
    end
    tryouts_inst.tryouts.each_pair do |t2,tryout|
      puts "  " << tryout.name
      tryout.drills.each do |drill|
        puts "    " << drill.name
      end
    end
  end
end

def load_available_tryouts_files

Find and load all tryouts files
def load_available_tryouts_files
  @tryouts_files = []
  # If file paths were given, check those only. 
  unless @argv.empty?
    @argv.each do |file|
      file = File.join(file, '**', '*_tryouts.rb') if File.directory?(file)
      @tryouts_files += Dir.glob file
    end
  # Otherwise check the default globs
  else
    @tryouts_globs.each do |glob|
      @tryouts_files += Dir.glob glob
    end
  end
  @tryouts_files.uniq!  # Don't load the same file twice
  @tryouts_files.each { |f| puts "LOADING: #{f}"} if Tryouts.verbose > 1
  @tryouts_files.each { |file| Tryouts.parse_file file }
end

def run

Executes all tryouts that can be found from the current working directory.
$ sergeant run [path/2/tryouts]
def run
  
  Tryouts.enable_debug if Drydock.debug?
  Tryouts.verbose = @global.verbose
  
  puts "#{Tryouts.sysinfo.to_s} (#{RUBY_VERSION})" if Tryouts.verbose > 0
  
  load_available_tryouts_files
  passed, failed = 0, 0
  Tryouts.instances.each_pair do |group,tryouts_inst|
    puts '', ' %-60s'.att(:reverse) % group
    puts "  #{tryouts_inst.paths.join("\n  ")}" if Tryouts.verbose > 0
    tryouts_inst.tryouts.each_pair do |name,to|
      to.run
      to.report
      STDOUT.flush
      passed += to.passed
      failed += to.failed
    end
  end
  unless @global.quiet
    if (passed == 0 && failed == 0)
      puts DEV if Tryouts.verbose > 4
      msg = " You didn't even try to acheive your dreams :[ "
    elsif failed == 0
      puts PUG if Tryouts.verbose > 4
      msg = passed > 1 ? "All %s dreams" : "Your only dream"
      msg = (" #{msg} came true " % [passed+failed]).color(:green)
    else
      puts BUG if Tryouts.verbose > 4
      score = (passed.to_f / (passed.to_f+failed.to_f)) * 100
      msg = " %s of %s dreams came true (%d%%) ".color(:red)
      msg = msg % [passed, passed+failed, score.to_i]
    end
    puts $/, msg.att(:reverse)
  end
end