Module: Gem::Resolver::Molinillo::SpecificationProvider

Included in:
Gem::Resolver
Defined in:
lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb

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

Instance Method Summary collapse

Instance Method Details

#allow_missing?(dependency) ⇒ Boolean

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

Parameters:

  • dependency (Object)

Returns:

  • (Boolean)

    whether this dependency can safely be skipped.


108
109
110
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb', line 108

def allow_missing?(dependency)
  false
end

#dependencies_equal?(dependencies, other_dependencies) ⇒ Boolean

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

Parameters:

  • dependencies (Array<Object>)
  • other_dependencies (Array<Object>)

Returns:

  • (Boolean)

    whether `dependencies` and `other_dependencies` should be considered equal.


55
56
57
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb', line 55

def dependencies_equal?(dependencies, other_dependencies)
  dependencies == other_dependencies
end

#dependencies_for(specification) ⇒ Array<Object>

Note:

This method should be 'pure', i.e. the return value should depend only on the `specification` parameter.

Returns the dependencies of `specification`.

Parameters:

  • specification (Object)

Returns:

  • (Array<Object>)

    the dependencies that are required by the given `specification`.


31
32
33
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb', line 31

def dependencies_for(specification)
  []
end

#name_for(dependency) ⇒ String

Note:

This method should be 'pure', i.e. the return value should depend only on the `dependency` parameter.

Returns the name for the given `dependency`.

Parameters:

  • dependency (Object)

Returns:

  • (String)

    the name for the given `dependency`.


65
66
67
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb', line 65

def name_for(dependency)
  dependency.to_s
end

#name_for_explicit_dependency_sourceString

Returns the name of the source of explicit dependencies, i.e. those passed to Resolver#resolve directly.

Returns:

  • (String)

    the name of the source of explicit dependencies, i.e. those passed to Resolver#resolve directly.


71
72
73
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb', line 71

def name_for_explicit_dependency_source
  'user-specified dependency'
end

#name_for_locking_dependency_sourceString

Returns the name of the source of 'locked' dependencies, i.e. those passed to Resolver#resolve directly as the `base`.

Returns:

  • (String)

    the name of the source of 'locked' dependencies, i.e. those passed to Resolver#resolve directly as the `base`


77
78
79
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb', line 77

def name_for_locking_dependency_source
  'Lockfile'
end

#requirement_satisfied_by?(requirement, activated, spec) ⇒ Boolean

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

Parameters:

  • requirement (Object)
  • activated (DependencyGraph)

    the current dependency graph in the resolution process.

  • spec (Object)

Returns:

  • (Boolean)

    whether `requirement` is satisfied by `spec` in the context of the current `activated` dependency graph.


44
45
46
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb', line 44

def requirement_satisfied_by?(requirement, activated, spec)
  true
end

#search_for(dependency) ⇒ Array<Object>

Note:

This method should be 'pure', i.e. the return value should depend only on the `dependency` parameter.

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.

Parameters:

  • dependency (Object)

Returns:

  • (Array<Object>)

    the specifications that satisfy the given `dependency`.


20
21
22
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb', line 20

def search_for(dependency)
  []
end

#sort_dependencies(dependencies, activated, conflicts) ⇒ Array<Object>

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?

Parameters:

  • dependencies (Array<Object>)
  • activated (DependencyGraph)

    the current dependency graph in the resolution process.

  • conflicts ({String => Array<Conflict>})

Returns:

  • (Array<Object>)

    a sorted copy of `dependencies`.


93
94
95
96
97
98
99
100
101
# 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