123456789_123456789_123456789_123456789_123456789_

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

Overview

Instance Method Summary

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.

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb', line 65

def allow_missing?(dependency)
  with_no_such_dependency_error_handling do
    specification_provider.allow_missing?(dependency)
  end
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.

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb', line 30

def dependencies_equal?(dependencies, other_dependencies)
  with_no_such_dependency_error_handling do
    specification_provider.dependencies_equal?(dependencies, other_dependencies)
  end
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`.

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb', line 16

def dependencies_for(specification)
  with_no_such_dependency_error_handling do
    specification_provider.dependencies_for(specification)
  end
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.

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb', line 37

def name_for(dependency)
  with_no_such_dependency_error_handling do
    specification_provider.name_for(dependency)
  end
end

#name_for_explicit_dependency_sourceString

Returns:

  • (String)

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

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb', line 44

def name_for_explicit_dependency_source
  with_no_such_dependency_error_handling do
    specification_provider.name_for_explicit_dependency_source
  end
end

#name_for_locking_dependency_sourceString

Returns:

  • (String)

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

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb', line 51

def name_for_locking_dependency_source
  with_no_such_dependency_error_handling do
    specification_provider.name_for_locking_dependency_source
  end
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.

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb', line 23

def requirement_satisfied_by?(requirement, activated, spec)
  with_no_such_dependency_error_handling do
    specification_provider.requirement_satisfied_by?(requirement, activated, spec)
  end
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`.

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb', line 9

def search_for(dependency)
  with_no_such_dependency_error_handling do
    specification_provider.search_for(dependency)
  end
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.

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb', line 58

def sort_dependencies(dependencies, activated, conflicts)
  with_no_such_dependency_error_handling do
    specification_provider.sort_dependencies(dependencies, activated, conflicts)
  end
end

#with_no_such_dependency_error_handling { ... } (private)

Yields:

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb', line 76

def with_no_such_dependency_error_handling
  yield
rescue NoSuchDependencyError => error
  if state
    vertex = activated.vertex_named(name_for(error.dependency))
    error.required_by += vertex.incoming_edges.map { |e| e.origin.name }
    error.required_by << name_for_explicit_dependency_source unless vertex.explicit_requirements.empty?
  end
  raise
end