module Gem::Resolver::Molinillo::SpecificationProvider

Provides information about specifications 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 Gem::Resolver::Molinillo must to implement, using knowledge of their own model classes.

Public Instance Methods

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/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb, line 108
def allow_missing?(dependency)
  false
end

Determines whether two arrays of dependencies are equal, and thus can be grouped.

@param [Array<Object>] dependencies @param [Array<Object>] other_dependencies @return [Boolean] whether ‘dependencies` and `other_dependencies` should

be considered equal.
# File lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb, line 55
def dependencies_equal?(dependencies, other_dependencies)
  dependencies == other_dependencies
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/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb, line 31
def dependencies_for(specification)
  []
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/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb, line 65
def name_for(dependency)
  dependency.to_s
end

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

those passed to {Resolver#resolve} directly.
# File lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb, line 71
def name_for_explicit_dependency_source
  'user-specified dependency'
end

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

those passed to {Resolver#resolve} directly as the `base`
# File lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb, line 77
def name_for_locking_dependency_source
  'Lockfile'
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/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb, line 44
def requirement_satisfied_by?(requirement, activated, spec)
  true
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/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb, line 20
def search_for(dependency)
  []
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`.

# File lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb, line 93
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