lib/tryouts/cli/run.rb



class Tryouts; module CLI
  
# = Run
#
# The logic bin/tryouts uses for running tryouts. 
class Run < Drydock::Command

  def init
    @tryouts_globs = [GYMNASIUM_GLOB, File.join(Dir.pwd, '*_tryouts.rb')]
  end
  
  # $ sergeant dreams [path/2/tryouts]
  # Display the dreams from all known tryouts
  def dreams
    load_available_tryouts_files
    if @global.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
  
  # $ sergeant run [path/2/tryouts]
  # Executes all tryouts that can be found from the current working directory. 
  def run
    if @global.verbose > 0
      puts "#{Tryouts.sysinfo.to_s} (#{RUBY_VERSION})"
    end
    
    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 @global.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 @global.verbose > 4
        msg = " You didn't even try to acheive your dreams :[ "
      elsif failed == 0
        puts PUG if @global.verbose > 4
        msg = " All %s dreams came true ".color(:green)
        msg = msg % [passed+failed]
      else
        puts BUG if @global.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
  
  # $ sergeant list 
  # Displays all known tryouts from the current working directory
  def list
    load_available_tryouts_files
    Tryouts.instances.each_pair do |n,tryouts_inst|
      puts n
      if @global.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
  
private 

  # 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 @global.verbose > 0
    @tryouts_files.each { |file| Tryouts.parse_file file }
  end
end
end; end

class Tryouts::CLI::Run
  DEV = %q{
          ^^             @@@@@@@@@
     ^^       ^^      @@@@@@@@@@@@@@@
                    @@@@@@@@@@@@@@@@@@              ^^
                   @@@@@@@@@@@@@@@@@@@@
   ~~~ ~~~~~~~~ ~~ &&&&&&&&&&&&&&&&&&&& ~~~~~~~ ~~~~~~~~~~~ ~~
   ~~   ~  ~       ~~~~~~~~~~~~~~~~~~~~ ~       ~~     ~~ ~
   ~      ~~ ~~ ~~  ~~~~~~~~~~~~~ ~~~~  ~     ~~~    ~ ~~~  ~
     ~         ~      ~~~~~~  ~~ ~~~       ~~ ~ ~~  ~~ ~
    ~ ~      ~           ~~ ~~~~~~  ~      ~~  ~           ~~~
             ~        ~      ~      ~~   ~             ~
  }
  BUG = %q{
     ,--.____                                     ____.--.
    /  .'.'"``--...----------.___.----------...--''"`.`.  \
    | .'.'         .                       .         `.`. |
    `. .'|     . ' - . _    `-----'    _ . - ' .     |`. .'
     `.' `|   .'   _     "-._     _.-"     _   `.   |' `.'
          |  |        " -.           .- "        |  |
           \|        ;;..  "|i. .i|"  ..;;        |/
           `|      ,---.``.   ' '   .'',---.      |'        
            |    <'(__.'>.'---` '---`.<`.__)`>    | 
            |   `. `~  .'  ,-------.  `.  ~'.'    |
            |  |=_"`=.'  . `-.___.-' .  `.='"_=|  |
            |  |  ==/  : ` :   i   : ' :  \==  |  |
            |  | ==/      /\___|___/\      \== |  |
             `.| =Y      .' """_""" `.      Y= |.'
               L ||      ;  .=="==.  ;      || J 
                \ ;     .' '       ` `.     ; /
                 `.     ;             ;     .'
                  ;    ;'\           /`;    ;
                  `;  .'.'/.       ,\`.`.  ;' 
                   `-=;_-'  `-----'  `-_;=-'        -bodom-
}
PUG = %q{
                  __,-----._                       ,-. 
                ,'   ,-.    \`---.          ,-----<._/ 
               (,.-. o:.`    )),"\\\-._    ,'         `. 
              ('"-` .\       \`:_ )\  `-;'-._          \ 
             ,,-.    \` ;  :  \( `-'     ) -._     :   `: 
            (    \ `._\\\ ` ;             ;    `    :    ) 
             \`.  `-.    __   ,         /  \        ;, ( 
              `.`-.___--'  `-          /    ;     | :   | 
                `-' `-.`--._          '           ;     | 
                      (`--._`.                ;   /\    | 
                       \     '                \  ,  )   : 
                       |  `--::----            \'   ;  ;| 
                       \    .__,-      (        )   :  :| 
                        \    : `------; \      |    |   ; 
                         \   :       / , )     |    |  ( 
                          \   \      `-^-|     |   / , ,\ 
                           )  )          | -^- ;   `-^-^' 
                        _,' _ ;          |    | 
                       / , , ,'         /---. : 
                       `-^-^'          (  :  :,'    
                                        `-^--'      -hrr- 
}
end