Class: Bundler::Resolver::Candidate

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(version, group: nil, priority: -1)) ⇒ Candidate

Returns a new instance of Candidate.

[View source]

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

#versionObject (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

#<=>(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

#==(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

#dependenciesObject

[View source]

33
34
35
# File 'lib/bundler/resolver/candidate.rb', line 33

def dependencies
  @spec_group.dependencies
end

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)
[View source]

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

#hashObject

[View source]

73
74
75
# File 'lib/bundler/resolver/candidate.rb', line 73

def hash
  sort_obj.hash
end

#prerelease?Boolean

Returns:

  • (Boolean)
[View source]

43
44
45
# File 'lib/bundler/resolver/candidate.rb', line 43

def prerelease?
  @version.prerelease?
end

#segmentsObject

[View source]

47
48
49
# File 'lib/bundler/resolver/candidate.rb', line 47

def segments
  @version.segments
end

#sort_objObject

[View source]

51
52
53
# File 'lib/bundler/resolver/candidate.rb', line 51

def sort_obj
  [@version, @priority]
end

#to_sObject

[View source]

77
78
79
# File 'lib/bundler/resolver/candidate.rb', line 77

def to_s
  @version.to_s
end

#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.meta?

  @spec_group.to_specs(package.force_ruby_platform?, most_specific_locked_platform)
end