Sha256: f08f82fc5ceee20201cfefd5e149cb208b4f61567c37f590954923b98b17ecf6

Contents?: true

Size: 1.49 KB

Versions: 2

Compression:

Stored size: 1.49 KB

Contents

# Timeouter

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

2 entries across 2 versions & 1 rubygems

Version Path
timeouter-0.1.1 README.md
timeouter-0.1.0 README.md