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
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
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