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 the 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