class MultiThink

Constants

DEFAULTS
VERSION

Public Class Methods

new(options = {}) click to toggle source
# File lib/multithink.rb, line 17
def initialize(options = {})
  options = DEFAULTS.merge(options)

  @size = options.fetch(:size)
  @timeout = options.fetch(:timeout)
  servers = options.fetch(:servers)
  conn_options = options.fetch(:conn_options)
  conn_options[:servers] = servers

  @available = TimedStack.new(@size, conn_options)
  @key = :"current-#{@available.object_id}"
end

Public Instance Methods

checkin() click to toggle source
# File lib/multithink.rb, line 53
def checkin
  stack = ::Thread.current[@key]
  conn = stack.pop
  if stack.empty?
    @available << conn
  end
  nil
end
checkout(options = {}) click to toggle source
# File lib/multithink.rb, line 39
def checkout(options = {})
  stack = ::Thread.current[@key] ||= []

  if stack.empty?
    timeout = options[:timeout] || @timeout
    conn = @available.pop(timeout)
  else
    conn = stack.last
  end

  stack.push conn
  conn
end
shutdown() click to toggle source
# File lib/multithink.rb, line 62
def shutdown
  @available.shutdown
end
with(options = {}) { |conn| ... } click to toggle source
# File lib/multithink.rb, line 30
def with(options = {})
  conn = checkout(options)
  begin
    yield conn
  ensure
    checkin
  end
end