README.md

    Timeouter

    Gem Version Gem YARD

    Coverage Quality Outdated Vulnerabilities

    Timeouter is advisory timeout helper without any background threads.

    Usage

    Typical usage scenario:

    require 'timeouter'
    
    Timeouter::run(3) do |t|
      sleep 1 # do some work
    
      puts t.elapsed    # 1.00011811
      puts t.left       # 1.99985717 or nil if timeout was 0
      puts t.exhausted? # false or nil if timeout was 0
      puts t.running?   # true
      puts t.running!   # true
    
      sleep 3 # do another work
    
      puts t.elapsed    # 4.000177464
      puts t.left       # 0 or nil if timeout was 0
      puts t.exhausted? # true or nil if timeout was 0
      puts t.running?   # false
      puts t.running!   # raise Timeouter::TimeoutError.new('execution expired')
    end
    

    You can pass exception class and message on creation or on checking:

    Timeouter::run(1, eclass: RuntimeError, message: 'error') do |t|
      sleep 2
      puts t.running!(eclass: MyError, message: 'myerror')
    end
    

    Loop helper:

    # just loop 3 seconds
    Timeouter::loop(3) do |t|
      puts "i'am in loop"
      sleep 1
    end
    
    # just loop 3 seconds and raise exception then
    Timeouter::loop!(3, eclass: MyError) do |t|
      puts "i'am in loop and not raised yet"
      sleep 1
    end
    
    # Break the loop after some success and retuel value
    result = Timeouter::loop!(3) do |t|
      puts "i'am in loop and not raised yet"
      if t.elapsed > 1
        puts "work done breaking loop"
        break "RESULT"
      end
      sleep 1
    end
    

    Installation

    It’s a gem:

      gem install timeouter
    

    There’s also the wonders of the Gemfile:

      gem 'timeouter'
    
    Описание

    Timeouter is advisory timeout helper without any background threads.

    Конвейеры
    0 успешных
    0 с ошибкой