Sha256: 4d8e722ea5e105e3c83f2a00bd3a74c6da4eac48449e10ed2d8a55ac0a10188d

Contents?: true

Size: 1.31 KB

Versions: 11

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

module Nonnative
  class Pool
    def initialize(configuration)
      @configuration = configuration
    end

    def start(&block)
      [servers, processes].each { |t| process(t, :start, :open?, &block) }
    end

    def stop(&block)
      [processes, servers].each { |t| process(t, :stop, :closed?, &block) }
    end

    def server_by_name(name)
      index = configuration.servers.find_index { |s| s.name == name }
      servers[index].first
    end

    private

    attr_reader :configuration

    def processes
      @processes ||= configuration.processes.map do |d|
        [Nonnative::Command.new(d), Nonnative::Port.new(d)]
      end
    end

    def servers
      @servers ||= configuration.servers.map do |d|
        [d.klass.new(d), Nonnative::Port.new(d)]
      end
    end

    def process(all, type_method, port_method, &block)
      types = []
      pids = []
      threads = []

      all.each do |type, port|
        types << type
        pids << type.send(type_method)
        threads << Thread.new { port.send(port_method) }
      end

      ports = threads.map(&:value)

      yield_results(types, pids, ports, &block)
    end

    def yield_results(all, pids, ports)
      all.zip(pids, ports).each do |type, id, result|
        yield type.name, id, result
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
nonnative-1.40.0 lib/nonnative/pool.rb
nonnative-1.39.0 lib/nonnative/pool.rb
nonnative-1.38.0 lib/nonnative/pool.rb
nonnative-1.37.0 lib/nonnative/pool.rb
nonnative-1.36.0 lib/nonnative/pool.rb
nonnative-1.34.0 lib/nonnative/pool.rb
nonnative-1.31.0 lib/nonnative/pool.rb
nonnative-1.30.0 lib/nonnative/pool.rb
nonnative-1.29.0 lib/nonnative/pool.rb
nonnative-1.28.0 lib/nonnative/pool.rb
nonnative-1.27.0 lib/nonnative/pool.rb