The base connection pool class, which all other connection pools are built on. This class is not instantiated directly, but subclasses should at the very least implement the following API:
initialize(Hash, &block) - The block is used as the connection proc, which should accept a single symbol argument.
hold(Symbol, &block) - yield a connection object (obtained from calling the block passed to initialize) to the current block. For sharded connection pools, the Symbol passed is the shard/server to use.
disconnect(Symbol, &block) - disconnect the connection object. If a block is given, pass the connection option to it, otherwise use the :disconnection_proc option in the hash passed to initialize. For sharded connection pools, the Symbol passed is the shard/server to use.
servers - an array of shard/server symbols for all shards/servers that this connection pool recognizes.
size - an integer representing the total number of connections in the pool, or for the given shard/server if sharding is supported.
For sharded connection pools, the sharded API: