TeapotSourceTeapotSelect

class Select

A selection is a specific view of the data exposed by the context at a specific point in time.

Definitions

def initialize(context, configuration, names = [])

Initialize a new selection.

Signature

parameter context Context

The project context.

parameter configuration Configuration

The configuration.

parameter names Array

The names to select.

Implementation

def initialize(context, configuration, names = [])
	@context = context
	@configuration = Configuration.new(context, configuration.package, configuration.name, [], **configuration.options)
	
	@targets = {}
	@configurations = {}
	@projects = {}
	
	@dependencies = []
	@selection = Set.new
	@resolved = Build::Dependency::Set.new
	@unresolved = Build::Dependency::Set.new
	
	load!(configuration, names)
	
	@chain = nil
end

attr :aliases

Alises as defined by Configuration#targets

attr :configurations

All public configurations.

def chain

Get the dependency chain.

Signature

returns Build::Dependency::Chain

The dependency chain.

Implementation

def chain
	@chain ||= Build::Dependency::Chain.expand(@dependencies, @targets.values, @selection)
end

def direct_targets(ordered)

Extract the targets that directly satisfy the requested dependencies.

Signature

parameter ordered Array

The ordered targets.

returns Array

The direct targets.

Implementation

def direct_targets(ordered)
	@dependencies.collect do |dependency|
		ordered.find{|(package, _)| package.provides? dependency}
	end.compact
end

def append(definition)

Add a definition to the current context.

Implementation

def append definition
	case definition
	when Target
		AlreadyDefinedError.check(definition, @targets)
		@targets[definition.name] = definition
	when Configuration
		# We define configurations in two cases, if they are public, or if they are part of the root package of this context.
		if definition.public? or definition.package == @context.root_package
			AlreadyDefinedError.check(definition, @configurations)
			@configurations[definition.name] = definition
		end
	when Project
		AlreadyDefinedError.check(definition, @projects)
		@projects[definition.name] = definition
	end
end