class Configuration

Immutable request queue and admission configuration.

Nested Classes and Modules

class Builder

Builds configurations using the application DSL.

Definitions

def self.build(root: Dir.pwd, &block)

Build a configuration using a scoped builder.

Signature

parameter root String

The root for relative configuration files.

yields {|builder| ...}

The configuration builder.

returns Configuration

The immutable configuration.

Implementation

def self.build(root: Dir.pwd, &block)
	builder = Builder.new(root)
	
	if block
		if block.arity.zero?
			builder.instance_eval(&block)
		else
			block.call(builder)
		end
	end
	
	builder.build
end

def self.default

Signature

returns Configuration

A single-queue, single-permit configuration.

Implementation

def self.default
	@default ||= build do
		queue(:default)
		default_queue(:default)
	end
end

def self.load(paths)

Load and build trusted application configuration files.

Signature

parameter paths String | Array(String)

The configuration files to load.

returns Configuration

The immutable configuration.

Implementation

def self.load(paths)
	builder = Builder.new
	Array(paths).each{|path| builder.load_file(path)}
	builder.build
end

def initialize(queues:, default_queue_name:, pending_limit:, permit_limit:)

Signature

parameter queues Hash(Symbol, Queue)

The configured queues.

parameter default_queue_name Symbol

The fallback queue name.

parameter pending_limit Integer | Nil

The global pending request limit.

parameter permit_limit Integer

The processing permits per worker.

Implementation

def initialize(queues:, default_queue_name:, pending_limit:, permit_limit:)
	@queues = queues
	@default_queue_name = default_queue_name
	@pending_limit = pending_limit
	@permit_limit = permit_limit
end

def classify(request)

Classify a request using matchers in definition order.

Signature

returns Queue

The matching or default queue.

Implementation

def classify(request)
	@queues.each_value do |queue|
		return queue if queue.match?(request)
	end
	
	@queues.fetch(@default_queue_name)
end