Sha256: 5f323669ced156c5abac4333d4c02d5e0919b160274cc9d6d373402ec7c143ba

Contents?: true

Size: 1.65 KB

Versions: 1

Compression:

Stored size: 1.65 KB

Contents

# Innertube

Innertube is a thread-safe, re-entrant resource pool, extracted from
the [Riak Ruby Client](/basho/riak-ruby-client), where it was used to
pool connections to [Riak](/basho/riak). It is free to use and modify,
licensed under the Apache 2.0 License.

## Example

```ruby
# -------------------------------------------------------
# Basics
# -------------------------------------------------------

# Create a pool with open/close callables
pool = Innertube::Pool.new(proc { Connection.new },
                           proc {|c| c.disconnect })

# Grab a connection from the pool, returns the same value 
# as the block
pool.take {|conn| conn.ping } # => true    

# Raise the BadResource exception if the resource is no 
# longer good
pool.take do |conn|
  raise Innertube::Pool::BadResource unless conn.connected?
  conn.ping
end

# Innertube helps your code be re-entrant! Take more resources 
# while you have one checked out.
pool.take do |conn|
  conn.stream_tweets do |tweet|
    pool.take {|conn2| conn2.increment :tweets }
  end
end

# -------------------------------------------------------
# Iterations: These are slow because they have guarantees
# about visiting all current elements of the pool.
# -------------------------------------------------------

# Do something with every connection in the pool
pool.each {|conn| puts conn.get_stats }

# Expunge some expired connections from the pool
pool.delete_if {|conn| conn.idle_time > 5 }
```

## Credits

The pool was originally implemented by [Kyle Kingsbury](/aphyr) and
extracted by [Sean Cribbs](/seancribbs), when bugged about it by
[Pat Allan](/freelancing-god) at
[EuRuKo 2012](http://www.euruko2012.org/).

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
innertube-1.0.0 README.md