Class: Bundler::Resolver::Candidate
- Inherits:
-
Object
- Object
- Bundler::Resolver::Candidate
- Includes:
- Comparable
- Defined in:
- lib/bundler/resolver/candidate.rb
Overview
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.
Instance Attribute Summary collapse
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Instance Method Summary collapse
- #<=>(other) ⇒ Object
- #==(other) ⇒ Object
- #dependencies ⇒ Object
- #eql?(other) ⇒ Boolean
- #hash ⇒ Object
-
#initialize(version, group: nil, priority: -1)) ⇒ Candidate
constructor
A new instance of Candidate.
- #prerelease? ⇒ Boolean
- #segments ⇒ Object
- #sort_obj ⇒ Object
- #to_s ⇒ Object
- #to_specs(package, most_specific_locked_platform) ⇒ Object
Constructor Details
permalink #initialize(version, group: nil, priority: -1)) ⇒ Candidate
Returns a new instance of Candidate.
27 28 29 30 31 |
# File 'lib/bundler/resolver/candidate.rb', line 27 def initialize(version, group: nil, priority: -1) @spec_group = group || SpecGroup.new([]) @version = Gem::Version.new(version) @priority = priority end |
Instance Attribute Details
permalink #version ⇒ Object (readonly)
Returns the value of attribute version.
25 26 27 |
# File 'lib/bundler/resolver/candidate.rb', line 25 def version @version end |
Instance Method Details
permalink #<=>(other) ⇒ Object
[View source]
55 56 57 58 59 |
# File 'lib/bundler/resolver/candidate.rb', line 55 def <=>(other) return unless other.is_a?(self.class) sort_obj <=> other.sort_obj end |
permalink #==(other) ⇒ Object
[View source]
61 62 63 64 65 |
# File 'lib/bundler/resolver/candidate.rb', line 61 def ==(other) return unless other.is_a?(self.class) sort_obj == other.sort_obj end |
permalink #dependencies ⇒ Object
[View source]
33 34 35 |
# File 'lib/bundler/resolver/candidate.rb', line 33 def dependencies @spec_group.dependencies end |
permalink #eql?(other) ⇒ Boolean
67 68 69 70 71 |
# File 'lib/bundler/resolver/candidate.rb', line 67 def eql?(other) return unless other.is_a?(self.class) sort_obj.eql?(other.sort_obj) end |
permalink #hash ⇒ Object
[View source]
73 74 75 |
# File 'lib/bundler/resolver/candidate.rb', line 73 def hash sort_obj.hash end |
permalink #prerelease? ⇒ Boolean
43 44 45 |
# File 'lib/bundler/resolver/candidate.rb', line 43 def prerelease? @version.prerelease? end |
permalink #segments ⇒ Object
[View source]
47 48 49 |
# File 'lib/bundler/resolver/candidate.rb', line 47 def segments @version.segments end |
permalink #sort_obj ⇒ Object
[View source]
51 52 53 |
# File 'lib/bundler/resolver/candidate.rb', line 51 def sort_obj [@version, @priority] end |
permalink #to_s ⇒ Object
[View source]
77 78 79 |
# File 'lib/bundler/resolver/candidate.rb', line 77 def to_s @version.to_s end |
permalink #to_specs(package, most_specific_locked_platform) ⇒ Object
[View source]
37 38 39 40 41 |
# File 'lib/bundler/resolver/candidate.rb', line 37 def to_specs(package, most_specific_locked_platform) return [] if package. @spec_group.to_specs(package.force_ruby_platform?, most_specific_locked_platform) end |