Class: Bundler::Resolver::Base
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | lib/bundler/resolver/base.rb |
Class Method Summary
Instance Attribute Summary
- #locked_specs readonly
- #overrides readonly
- #packages readonly
- #requirements readonly
- #source_requirements readonly
Instance Method Summary
- #[](name)
- #base_requirements
- #delete(specs)
-
#explicitly_unlocked?(name) ⇒ Boolean
Gems the user named on a
bundle update GEM/bundle lock --update GEMcommand line. - #get_package(name)
- #include_prereleases(names)
- #include_remote_specs(names)
- #unlock_names(names)
- #build_base_requirements private
- #indirect_pins(names) private
- #loosen_names(names) private
- #pins(names) private
- #unrestrict_names(names) private
Constructor Details
.new(source_requirements, dependencies, base, platforms, options) ⇒ Base
# File 'lib/bundler/resolver/base.rb', line 10
def initialize(source_requirements, dependencies, base, platforms, ) @overrides = .delete(:overrides) || [] @explicit_unlocks = .delete(:explicit_unlocks) || [] @source_requirements = source_requirements @locked_specs = [:locked_specs] @base = base @packages = Hash.new do |hash, name| hash[name] = Package.new(name, platforms, **) end @requirements = dependencies.filter_map do |dep| dep_platforms = dep.gem_platforms(platforms) # Dependencies scoped to external platforms are ignored next if dep_platforms.empty? name = dep.name @packages[name] = Package.new(name, dep_platforms, **.merge(dependency: dep)) dep end end
Instance Attribute Details
#locked_specs (readonly)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 8
attr_reader :packages, :requirements, :source_requirements, :locked_specs, :overrides
#overrides (readonly)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 8
attr_reader :packages, :requirements, :source_requirements, :locked_specs, :overrides
#packages (readonly)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 8
attr_reader :packages, :requirements, :source_requirements, :locked_specs, :overrides
#requirements (readonly)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 8
attr_reader :packages, :requirements, :source_requirements, :locked_specs, :overrides
#source_requirements (readonly)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 8
attr_reader :packages, :requirements, :source_requirements, :locked_specs, :overrides
Instance Method Details
#[](name)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 36
def [](name) @base[name] end
#base_requirements
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 56
def base_requirements @base_requirements ||= build_base_requirements end
#build_base_requirements (private)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 114
def build_base_requirements base_requirements = {} @base.each do |ls| if ls.source_changed? && ls.source.specs.search(ls.name).empty? raise GemNotFound, "Could not find gem '#{ls.name}' in #{ls.source}" end req = Gem::Requirement.new(ls.version) base_requirements[ls.name] = req end base_requirements end
#delete(specs)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 40
def delete(specs) @base.delete(specs) end
#explicitly_unlocked?(name) ⇒ Boolean
Gems the user named on a bundle update GEM / bundle lock --update GEM
command line. These are the only ones meant to move off their locked
version, so cooldown keeps applying to them while every other locked gem
stays exempt.
# File 'lib/bundler/resolver/base.rb', line 52
def explicitly_unlocked?(name) @explicit_unlocks.include?(name) end
#get_package(name)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 44
def get_package(name) @packages[name] end
#include_prereleases(names)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 76
def include_prereleases(names) names.each do |name| get_package(name).consider_prereleases! end end
#include_remote_specs(names)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 82
def include_remote_specs(names) names.each do |name| get_package(name).consider_remote_versions! end end
#indirect_pins(names) (private)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 90
def indirect_pins(names) names.select {|name| @base_requirements[name].exact? && @requirements.none? {|dep| dep.name == name } } end
#loosen_names(names) (private)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 98
def loosen_names(names) names.each do |name| version = @base_requirements[name].requirements.first[1] @base_requirements[name] = Gem::Requirement.new(">= #{version}") @base.delete_by_name(name) end end
#pins(names) (private)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 94
def pins(names) names.select {|name| @base_requirements[name].exact? } end
#unlock_names(names)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 60
def unlock_names(names) indirect_pins = indirect_pins(names) if indirect_pins.any? loosen_names(indirect_pins) else pins = pins(names) if pins.any? loosen_names(pins) else unrestrict_names(names) end end end
#unrestrict_names(names) (private)
[ GitHub ]# File 'lib/bundler/resolver/base.rb', line 108
def unrestrict_names(names) names.each do |name| @base_requirements.delete(name) end end