Module: Molinillo::SpecificationProvider

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

Instance Method Summary collapse

Instance Method Details

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



29
30
31
# File 'lib/molinillo/modules/specification_provider.rb', line 29

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.



52
53
54
# File 'lib/molinillo/modules/specification_provider.rb', line 52

def name_for(dependency)
  dependency.to_s
end

#name_for_explicit_dependency_sourceString



58
59
60
# File 'lib/molinillo/modules/specification_provider.rb', line 58

def name_for_explicit_dependency_source
  'user-specified dependency'
end

#name_for_locking_dependency_sourceString



64
65
66
# File '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/molinillo/modules/specification_provider.rb', line 42

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.



18
19
20
# File '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/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