module Bundler::Molinillo::SpecificationProvider

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 Bundler::Molinillo must to implement, using knowledge of their own model classes.

Public Instance Methods

allow_missing?(dependency) Show source
# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 97
def allow_missing?(dependency)
  false
end

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.

dependencies_for(specification) Show source
# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 31
def dependencies_for(specification)
  []
end

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<Object>] the dependencies that are required by the given

`specification`.
name_for(dependency) Show source
# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 54
def name_for(dependency)
  dependency.to_s
end

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`.

name_for_explicit_dependency_source() Show source
# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 60
def name_for_explicit_dependency_source
  'user-specified dependency'
end

@return [String] the name of the source of explicit dependencies, i.e.

those passed to {Resolver#resolve} directly.
name_for_locking_dependency_source() Show source
# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 66
def name_for_locking_dependency_source
  'Lockfile'
end

@return [String] the name of the source of 'locked' dependencies, i.e.

those passed to {Resolver#resolve} directly as the `base`
requirement_satisfied_by?(requirement, activated, spec) Show source
# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 44
def requirement_satisfied_by?(requirement, activated, spec)
  true
end

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.
search_for(dependency) Show source
# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 20
def search_for(dependency)
  []
end

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<Object>] the specifications that satisfy the given

`dependency`.
sort_dependencies(dependencies, activated, conflicts) Show source
# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 82
def sort_dependencies(dependencies, activated, conflicts)
  dependencies.sort_by do |dependency|
    name = name_for(dependency)
    [
      activated.vertex_named(name).payload ? 0 : 1,
      conflicts[name] ? 0 : 1,
    ]
  end
end

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<Object>] dependencies @param [DependencyGraph] activated the current dependency graph in the

resolution process.

@param [{String => Array<Conflict>}] conflicts @return [Array<Object>] a sorted copy of `dependencies`.

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.