class DockerHelper::Pool
Constants
- DEFAULT_BASENAME
- DEFAULT_SIZE
Attributes
          basename[R]
        
        
          docker[R]
        
        
          image[RW]
        
        
          path[RW]
        
        
          pool[R]
        
        
          port[RW]
        
        Public Class Methods
          new(size = nil, basename = nil, docker = nil) { |self| ... }
          
          click to toggle source
          
        
        
        # File lib/docker_helper/pool.rb, line 35 def initialize(size = nil, basename = nil, docker = nil) @docker, @previous_name, @basename = docker ||= DockerHelper.proxy, nil, basename ||= self.class::DEFAULT_BASENAME yield self if block_given? @pool = Array.new(size ||= self.class::DEFAULT_SIZE) { |i| spawn_thread("#{basename}-#{$$}-#{i}") } extend(SinglePool) if size == 1 end
Public Instance Methods
          clean(name = @previous_name)
          
          click to toggle source
          
        
        
        # File lib/docker_helper/pool.rb, line 59 def clean(name = @previous_name) pool.map { |t| clean_thread(t.value) }.tap { |clean| clean << clean_thread(name) if name }.each(&:join) end
          fetch(name = @previous_name)
          
          click to toggle source
          
        
        
        # File lib/docker_helper/pool.rb, line 55 def fetch(name = @previous_name) pool.shift.tap { reclaim(name) }.value end
          fetch_url(name = @previous_name)
          
          click to toggle source
          
        
        
        # File lib/docker_helper/pool.rb, line 51 def fetch_url(name = @previous_name) docker.url(port, @previous_name = fetch(name)) + path.to_s end
          inspect()
          
          click to toggle source
          
        
        
        # File lib/docker_helper/pool.rb, line 65 def inspect '#<%s:0x%x %s@%d>' % [self.class, object_id, basename, pool.size] end
Private Instance Methods
          clean_thread(name)
          
          click to toggle source
          
        
        
        # File lib/docker_helper/pool.rb, line 83 def clean_thread(name) Thread.new { docker.clean(name) } end
          reclaim(name)
          
          click to toggle source
          
        
        
        # File lib/docker_helper/pool.rb, line 87 def reclaim(name) pool << spawn_thread(name, true) if name end
          spawn_thread(name, clean = false)
          
          click to toggle source
          
        
        
        # File lib/docker_helper/pool.rb, line 73 def spawn_thread(name, clean = false) Thread.new { docker.clean(name) if clean docker.start(name, image) if image docker.ready(docker.port(port, name), path) if port name } end