123456789_123456789_123456789_123456789_123456789_

Class: Bundler::Resolver::Package

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Inherits: Object
Defined in: lib/bundler/resolver/package.rb

Overview

Represents a gem being resolved, in a format ::Bundler::PubGrub likes.

The class holds the following information:

  • Platforms this gem will be resolved on.

  • The locked version of this gem resolution should favor (if any).

  • Whether the gem should be unlocked to its latest version.

  • The dependency explicit set in the Gemfile for this gem (if any).

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(name, platforms, locked_specs:, unlock:, prerelease: false, prefer_local: false, dependency: nil, new_platforms: []) ⇒ Package

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 18

def initialize(name, platforms, locked_specs:, unlock:, prerelease: false, prefer_local: false, dependency: nil, new_platforms: [])
  @name = name
  @platforms = platforms
  @locked_version = locked_specs.version_for(name)
  @unlock = unlock
  @dependency = dependency || Dependency.new(name, @locked_version)
  @platforms |= [Gem::Platform::RUBY] if @dependency.default_force_ruby_platform
  @top_level = !dependency.nil?
  @prerelease = @dependency.prerelease? || @locked_version&.prerelease? || prerelease ? :consider_first : :ignore
  @prefer_local = prefer_local
  @new_platforms = new_platforms
end

Instance Attribute Details

#current_platform?Boolean (readonly)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 90

def current_platform?
  @dependency.current_platform?
end

#dependency (readonly)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 16

attr_reader :name, :platforms, :dependency, :locked_version

#force_ruby_platform?Boolean (readonly)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 86

def force_ruby_platform?
  @dependency.force_ruby_platform
end

#ignores_prereleases?Boolean (readonly)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 66

def ignores_prereleases?
  @prerelease == :ignore
end

#locked_version (readonly)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 16

attr_reader :name, :platforms, :dependency, :locked_version

#meta?Boolean (readonly)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 50

def meta?
  @name.end_with?("\0")
end

#name (readonly)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 16

attr_reader :name, :platforms, :dependency, :locked_version

#platforms (readonly)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 16

attr_reader :name, :platforms, :dependency, :locked_version

#prefer_local?Boolean (readonly)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 78

def prefer_local?
  @prefer_local
end

#prerelease_specified?Boolean (readonly)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 70

def prerelease_specified?
  @prerelease == :consider_first
end

#root?Boolean (readonly)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 42

def root?
  false
end

#top_level?Boolean (readonly)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 46

def top_level?
  @top_level
end

#unlock?Boolean (readonly)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 62

def unlock?
  @unlock == true || @unlock.include?(name)
end

Instance Method Details

#==(other)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 54

def ==(other)
  self.class == other.class && @name == other.name
end

#consider_prereleases!

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 74

def consider_prereleases!
  @prerelease = :consider_last
end

#consider_remote_versions!

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 82

def consider_remote_versions!
  @prefer_local = false
end

#hash

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 58

def hash
  @name.hash
end

#platform_specs(specs)

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 31

def platform_specs(specs)
  platforms.map do |platform|
    prefer_locked = @new_platforms.include?(platform) ? false : !unlock?
    MatchPlatform.select_best_platform_match(specs, platform, prefer_locked: prefer_locked)
  end
end

#to_s

[ GitHub ]

  
# File 'lib/bundler/resolver/package.rb', line 38

def to_s
  @name.delete("\0")
end