Sha256: 1899ca3aedbc32ce79ceca8ae111ddf7db718da89f1e6c130d205497e0032f4c

Contents?: true

Size: 1.66 KB

Versions: 2

Compression:

Stored size: 1.66 KB

Contents

require 'timeout'

module RSpactor
  class Interactor
    
    attr_reader :runner
    
    def initialize(runner)
      @runner = runner
      ticker
    end
    
    def wait_for_enter_key(msg, seconds_to_wait)
      begin
        Timeout::timeout(seconds_to_wait) do
          system("clear;") if runner.options[:clear]
          ticker(:start => true, :msg => msg)
          $stdin.gets
          return true
        end
      rescue Timeout::Error
        false
      ensure
        ticker(:stop => true)
      end
    end
    
    def start_termination_handler
      @main_thread = Thread.current
      Thread.new do
        loop do
          sleep 0.5
          if entry = $stdin.gets
            case entry
            when "c\n" # Cucumber: current tagged feature
              runner.run_cucumber_command
            when "ca\n" # Cucumber All: ~pending tagged feature
              runner.run_cucumber_command('~pending')
            else
              if wait_for_enter_key("** Running all specs.. Hit <enter> again to exit RSpactor", 1)
                @main_thread.exit
                exit
              end
              runner.run_all_specs
            end
          end
        end
      end
    end
    
    private
    
    def ticker(opts = {})
      if opts[:stop]
        $stdout.puts "\n"
        @pointer_running = false
      elsif opts[:start]
        @pointer_running = true
        write(opts[:msg]) if opts[:msg]
      else
        Thread.new do
          loop do
            write('.') if @pointer_running == true
            sleep 1.0
          end
        end
      end
    end
    
    def write(msg)
      $stdout.print(msg)
      $stdout.flush
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
guillaumegentil-rspactor-0.4.2 lib/rspactor/interactor.rb
guillaumegentil-rspactor-0.4.3 lib/rspactor/interactor.rb