Used internally to indicate that a dependency conflicted with a spec that would be activated.
Creates a new resolver conflict when dependency is in conflict
with an already activated specification.
# File rubygems/resolver/conflict.rb, line 23
def initialize(dependency, activated, failed_dep=dependency)
@dependency = dependency
@activated = activated
@failed_dep = failed_dep
end
Return the 2 dependency objects that conflicted
# File rubygems/resolver/conflict.rb, line 46
def conflicting_dependencies
[@failed_dep.dependency, @activated.request.dependency]
end
A string explanation of the conflict.
# File rubygems/resolver/conflict.rb, line 39
def explain
"<Conflict wanted: #{@failed_dep}, had: #{activated.spec.full_name}>"
end
Explanation of the conflict used by exceptions to print useful messages
# File rubygems/resolver/conflict.rb, line 53
def explanation
activated = @activated.spec.full_name
dependency = @failed_dep.dependency
requirement = dependency.requirement
alternates = dependency.matching_specs.map { |spec| spec.full_name }
unless alternates.empty? then
matching = "
Gems matching %s:
%s
".chomp
matching = matching % [
dependency,
alternates.join(', '),
]
end
explanation = <<-EXPLANATION
Activated %s
which does not match conflicting dependency (%s)
Conflicting dependency chains:
%s
versus:
%s
%s
EXPLANATION
explanation % [
activated, requirement,
request_path(@activated).reverse.join(", depends on\n "),
request_path(@failed_dep).reverse.join(", depends on\n "),
matching,
]
end
Returns true if the conflicting dependency’s name matches
spec.
# File rubygems/resolver/conflict.rb, line 95
def for_spec?(spec)
@dependency.name == spec.name
end
Path of activations from the current list.
# File rubygems/resolver/conflict.rb, line 123
def request_path current
path = []
while current do
case current
when Gem::Resolver::ActivationRequest then
path <<
"#{current.request.dependency}, #{current.spec.version} activated"
current = current.parent
when Gem::Resolver::DependencyRequest then
path << "#{current.dependency}"
current = current.requester
else
raise Gem::Exception, "[BUG] unknown request class #{current.class}"
end
end
path = ['user request (gem command or Gemfile)'] if path.empty?
path
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.