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