class Bundler::Persistent::Net::HTTP::Persistent::TimedStackMulti
:nodoc:
def self.hash_of_arrays # :nodoc:
def self.hash_of_arrays # :nodoc: Hash.new { |h,k| h[k] = [] } end
def connection_stored? options = {} # :nodoc:
def connection_stored? options = {} # :nodoc: !@ques[options[:connection_args]].empty? end
def empty?
def empty? (@created - @enqueued) >= @max end
def fetch_connection options = {} # :nodoc:
def fetch_connection options = {} # :nodoc: connection_args = options[:connection_args] @enqueued -= 1 lru_update connection_args @ques[connection_args].pop end
def initialize(size = 0, &block)
def initialize(size = 0, &block) super @enqueued = 0 @ques = self.class.hash_of_arrays @lru = {} @key = :"connection_args-#{object_id}" end
def length
def length @max - @created + @enqueued end
def lru_update connection_args # :nodoc:
def lru_update connection_args # :nodoc: @lru.delete connection_args @lru[connection_args] = true end
def shutdown_connections # :nodoc:
def shutdown_connections # :nodoc: @ques.each_key do |key| super connection_args: key end end
def store_connection obj, options = {} # :nodoc:
def store_connection obj, options = {} # :nodoc: @ques[options[:connection_args]].push obj @enqueued += 1 end
def try_create options = {} # :nodoc:
def try_create options = {} # :nodoc: connection_args = options[:connection_args] if @created >= @max && @enqueued >= 1 oldest, = @lru.first @lru.delete oldest @ques[oldest].pop @created -= 1 end if @created < @max @created += 1 lru_update connection_args return @create_block.call(connection_args) end end