module Molinillo::SpecificationProvider(R, S)

Overview

Provides information about specifcations and dependencies to the resolver, allowing the {Resolver} class to remain generic while still providing power and flexibility.

This module contains the methods that users of Molinillo must to implement, using knowledge of their own model classes.

Defined in:

molinillo/modules/specification_provider.cr

Instance Method Summary

Instance Method Detail

def allow_missing?(dependency : R) #

Returns whether this dependency, which has no possible matching specifications, can safely be ignored.

@param [Object] dependency @return [Boolean] whether this dependency can safely be skipped.


[View source]
def dependencies_for(specification : S) #

Returns the dependencies of specification. @note This method should be 'pure', i.e. the return value should depend only on the specification parameter.

@param [Object] specification @return [Array] the dependencies that are required by the given specification.


def name_for(dependency : R) #

Returns the name for the given dependency. @note This method should be 'pure', i.e. the return value should depend only on the dependency parameter.

@param [Object] dependency @return [String] the name for the given dependency.


def name_for_explicit_dependency_source #

@return [String] the name of the source of explicit dependencies, i.e. those passed to {Resolver#resolve} directly.


def name_for_locking_dependency_source #

@return [String] the name of the source of 'locked' dependencies, i.e. those passed to {Resolver#resolve} directly as the base


def requirement_satisfied_by?(requirement : R, activated : DependencyGraph, spec : S) #

Determines whether the given requirement is satisfied by the given spec, in the context of the current activated dependency graph.

@param [Object] requirement @param [DependencyGraph] activated the current dependency graph in the resolution process. @param [Object] spec @return [Boolean] whether requirement is satisfied by spec in the context of the current activated dependency graph.


def search_for(dependency : R) #

Search for the specifications that match the given dependency. The specifications in the returned array will be considered in reverse order, so the latest version ought to be last. @note This method should be 'pure', i.e. the return value should depend only on the dependency parameter.

@param [Object] dependency @return [Array] the specifications that satisfy the given dependency.


def sort_dependencies(dependencies : Array(R), activated : DependencyGraph, conflicts) #

Sort dependencies so that the ones that are easiest to resolve are first. Easiest to resolve is (usually) defined by:

  1. Is this dependency already activated?
  2. How relaxed are the requirements?
  3. Are there any conflicts for this dependency?
  4. How many possibilities are there to satisfy this dependency?

@param [Array] dependencies @param [DependencyGraph] activated the current dependency graph in the resolution process. @param [{String => Array}] conflicts @return [Array] a sorted copy of dependencies.