Sha256: fac3d7c95ffee8134bb1a54b6f345ea78586a82f5a5572580dce837dbf395b07

Contents?: true

Size: 1.68 KB

Versions: 1

Compression:

Stored size: 1.68 KB

Contents

# Timeouter

[![Gem Version](https://badge.fury.io/rb/timeouter.svg)](https://rubygems.org/gems/timeouter)
[![Gem](https://img.shields.io/gem/dt/timeouter.svg)](https://rubygems.org/gems/timeouter/versions)

Timeouter is advisory timeout helper without any background threads.

# Usage

Typical usage scenario:

```ruby
require 'timeouter'

Timeouter::run(3) do |t|
  sleep 1 # do some work

  puts t.elapsed    # 1.00011811
  puts t.left       # 3.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:

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

Loop helper:

```ruby
# 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:
```bash
  gem install timeouter
```
There's also the wonders of [the Gemfile](http://bundler.io):
```ruby
  gem 'timeouter'
```


Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
timeouter-0.1.1.16489 README.md