class Bundler::Resolver::Candidate

This class is a PubGrub compatible “Version” class that takes Bundler resolution complexities into account.

Each Resolver::Candidate has a underlying ‘Gem::Version` plus a set of platforms. For example, 1.1.0-x86_64-linux is a different resolution candidate from 1.1.0 (generic). This is because different platform variants of the same gem version can bring different dependencies, so they need to be considered separately.

Some candidates may also keep some information explicitly about the package they refer to. These candidates are referred to as “canonical” and are used when materializing resolution results back into RubyGems specifications that can be installed, written to lock files, and so on.

Attributes

version[R]

Public Class Methods

new(version, specs: []) click to toggle source
# File bundler/resolver/candidate.rb, line 27
def initialize(version, specs: [])
  @spec_group = Resolver::SpecGroup.new(specs)
  @version = Gem::Version.new(version)
  @ruby_only = specs.map(&:platform).uniq == [Gem::Platform::RUBY]
end

Public Instance Methods

<=>(other) click to toggle source
# File bundler/resolver/candidate.rb, line 67
def <=>(other)
  return unless other.is_a?(self.class)

  sort_obj <=> other.sort_obj
end
==(other) click to toggle source
# File bundler/resolver/candidate.rb, line 73
def ==(other)
  return unless other.is_a?(self.class)

  sort_obj == other.sort_obj
end
dependencies() click to toggle source
# File bundler/resolver/candidate.rb, line 33
def dependencies
  @spec_group.dependencies
end
eql?(other) click to toggle source
# File bundler/resolver/candidate.rb, line 79
def eql?(other)
  return unless other.is_a?(self.class)

  sort_obj.eql?(other.sort_obj)
end
generic!() click to toggle source
# File bundler/resolver/candidate.rb, line 43
def generic!
  @ruby_only = true

  self
end
hash() click to toggle source
# File bundler/resolver/candidate.rb, line 85
def hash
  sort_obj.hash
end
platform_specific!() click to toggle source
# File bundler/resolver/candidate.rb, line 49
def platform_specific!
  @ruby_only = false

  self
end
prerelease?() click to toggle source
# File bundler/resolver/candidate.rb, line 55
def prerelease?
  @version.prerelease?
end
segments() click to toggle source
# File bundler/resolver/candidate.rb, line 59
def segments
  @version.segments
end
sort_obj() click to toggle source
# File bundler/resolver/candidate.rb, line 63
def sort_obj
  [@version, @ruby_only ? -1 : 1]
end
to_s() click to toggle source
# File bundler/resolver/candidate.rb, line 89
def to_s
  @version.to_s
end
to_specs(package) click to toggle source
# File bundler/resolver/candidate.rb, line 37
def to_specs(package)
  return [] if package.meta?

  @spec_group.to_specs(package.force_ruby_platform?)
end