class RuPol::Pool

Attributes

cache[RW]
clearable[RW]
instance_class[RW]
max_size[RW]
recycledable[RW]
stats[RW]

Public Class Methods

new(max, klass) click to toggle source
# File lib/pool.rb, line 6
def initialize(max, klass)
  self.max_size = max
  self.instance_class = klass
  self.cache = []
  self.stats = empty_stats
  self.recycledable = class_has_method?(:_recycled)
  self.clearable = class_has_method?(:clear)
end

Public Instance Methods

<<(value)
Alias for: push
available?() click to toggle source
# File lib/pool.rb, line 43
def available?
  size < max_size
end
class_has_method?(meth) click to toggle source
# File lib/pool.rb, line 15
def class_has_method?(meth)
  instance_class.instance_methods.include?(meth.to_s)
end
empty!() click to toggle source
# File lib/pool.rb, line 60
def empty!
  self.stats = empty_stats
  cache.clear
end
empty_stats() click to toggle source
# File lib/pool.rb, line 19
def empty_stats
  {
    :gets => 0,
    :pushes => 0,
    :overage => 0
  }
end
get()
Alias for: shift
include?(value) click to toggle source
# File lib/pool.rb, line 47
def include?(value)
  cache.include?(value)
end
push(value) click to toggle source
# File lib/pool.rb, line 31
def push(value)
  if available?
    stats[:pushes] += 1 
    value.clear if clearable
    value._recycled = true if recycledable
    cache.push( value )
  else
    stats[:overage] += 1
  end
  value 
end
Also aliased as: <<
shift() click to toggle source
# File lib/pool.rb, line 51
def shift
  instance = cache.shift
  if instance
    stats[:gets] += 1
    instance._recycled = false if instance.respond_to?(:_recycled)
    instance
  end
end
Also aliased as: get
size() click to toggle source
# File lib/pool.rb, line 27
def size
  cache.size
end