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) click to toggle source

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.

# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 97
def allow_missing?(dependency)
  false
end
dependencies_for(specification) click to toggle source

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`.
# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 31
def dependencies_for(specification)
  []
end
name_for(dependency) click to toggle source

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

# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 54
def name_for(dependency)
  dependency.to_s
end
name_for_explicit_dependency_source() click to toggle source

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

those passed to {Resolver#resolve} directly.
# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 60
def name_for_explicit_dependency_source
  'user-specified dependency'
end
name_for_locking_dependency_source() click to toggle source

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

those passed to {Resolver#resolve} directly as the `base`
# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 66
def name_for_locking_dependency_source
  'Lockfile'
end
requirement_satisfied_by?(requirement, activated, spec) click to toggle source

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.
# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 44
def requirement_satisfied_by?(requirement, activated, spec)
  true
end
search_for(dependency) click to toggle source

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`.
# File lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb, line 20
def search_for(dependency)
  []
end
sort_dependencies(dependencies, activated, conflicts) click to toggle source

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

# 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