Module: Bundler::Molinillo::SpecificationProvider
- Included in:
- Resolver
- Defined in:
- lib/bundler/vendor/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 Bundler::Molinillo must to implement, using knowledge of their own model classes.
Instance Method Summary collapse
-
#dependencies_for(specification) ⇒ Array<Object>
Returns the dependencies of ‘specification`.
-
#name_for(dependency) ⇒ String
Returns the name for the given ‘dependency`.
-
#name_for_explicit_dependency_source ⇒ String
The name of the source of explicit dependencies, i.e.
-
#name_for_locking_dependency_source ⇒ String
The name of the source of ‘locked’ dependencies, i.e.
-
#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.
-
#search_for(dependency) ⇒ Array<Object>
Search for the specifications that match the given dependency.
-
#sort_dependencies(dependencies, activated, conflicts) ⇒ Array<Object>
Sort dependencies so that the ones that are easiest to resolve are first.
Instance Method Details
#dependencies_for(specification) ⇒ Array<Object>
This method should be ‘pure’, i.e. the return value should depend only on the ‘specification` parameter.
Returns the dependencies of ‘specification`.
29 30 31 |
# File 'lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb', line 29 def dependencies_for(specification) [] end |
#name_for(dependency) ⇒ String
This method should be ‘pure’, i.e. the return value should depend only on the ‘dependency` parameter.
Returns the name for the given ‘dependency`.
52 53 54 |
# File 'lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb', line 52 def name_for(dependency) dependency.to_s end |
#name_for_explicit_dependency_source ⇒ String
Returns the name of the source of explicit dependencies, i.e. those passed to Resolver#resolve directly.
58 59 60 |
# File 'lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb', line 58 def name_for_explicit_dependency_source 'user-specified dependency' end |
#name_for_locking_dependency_source ⇒ String
Returns the name of the source of ‘locked’ dependencies, i.e. those passed to Resolver#resolve directly as the ‘base`.
64 65 66 |
# File 'lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb', line 64 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.
42 43 44 |
# File 'lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb', line 42 def requirement_satisfied_by?(requirement, activated, spec) true end |
#search_for(dependency) ⇒ Array<Object>
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.
18 19 20 |
# File 'lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb', line 18 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?
80 81 82 83 84 85 86 87 88 |
# File 'lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb', line 80 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 |