On this page
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
# 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.
# 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`.
# 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`.
# 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.
# 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`
# 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.
# 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`.
# 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.