Sha256: b59bbed3bdff1f4e18828b149212bd9b6225aff4f9da028d0be8be3420e9fe60

Contents?: true

Size: 1.24 KB

Versions: 5

Compression:

Stored size: 1.24 KB

Contents

require 'timeout'

module RSpactor
  class Interactor
    def initialize
      ticker
    end

    def wait_for_enter_key(msg, seconds_to_wait)
      begin
        Timeout::timeout(seconds_to_wait) do
          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 $stdin.gets
            if wait_for_enter_key("** Running all specs.. Hit <enter> again to exit RSpactor", 3)
              @main_thread.exit
              exit
            end
            Runner.run_all_specs
          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

5 entries across 5 versions & 2 rubygems

Version Path
lacomartincik-rspactor-0.3.3.1 lib/rspactor/interactor.rb
lacomartincik-rspactor-0.3.3.2 lib/rspactor/interactor.rb
mislav-rspactor-0.3.2 lib/rspactor/interactor.rb
mislav-rspactor-0.3.3 lib/rspactor/interactor.rb
mislav-rspactor-0.4.0 lib/rspactor/interactor.rb