Class: Bundler::Override
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | lib/bundler/override.rb |
Constant Summary
-
UPPER_BOUND_OPERATORS =
# File 'lib/bundler/override.rb', line 5["<", "<="].freeze
Class Method Summary
-
.attach(specs, overrides)
Attach the given overrides onto every
LazySpecificationinspecsso downstream consumers (LazySpecification#choose_compatible, the install- time compatibility check, etc.) can read the override list off the spec itself. - .find_for(overrides, name, field)
- .new(target, field, operation, from: nil, requirement: nil, source_location: nil) ⇒ Override constructor
-
.rewrite_dependencies(overrides, from, dependencies)
Drops or replaces the dependencies of the gem named #from that a
from:/to:override targets.
Instance Attribute Summary
- #field readonly
- #from readonly
- #operation readonly
- #requirement readonly
- #source_location readonly
- #target readonly
Instance Method Summary
Constructor Details
.new(target, field, operation, from: nil, requirement: nil, source_location: nil) ⇒ Override
# File 'lib/bundler/override.rb', line 38
def initialize(target, field, operation, from: nil, requirement: nil, source_location: nil) @target = target @field = field @operation = operation @from = from @requirement = requirement @source_location = source_location end
Class Method Details
.attach(specs, overrides)
Attach the given overrides onto every LazySpecification in specs so
downstream consumers (LazySpecification#choose_compatible, the install-
time compatibility check, etc.) can read the override list off the spec
itself. Non-LazySpec entries (StubSpecification, ::Gem::Specification, ...)
are left untouched.
# File 'lib/bundler/override.rb', line 31
def self.attach(specs, overrides) return if overrides.nil? || overrides.empty? specs.each {|s| s.overrides = overrides if s.is_a?(LazySpecification) } end
.find_for(overrides, name, field)
[ GitHub ].rewrite_dependencies(overrides, from, dependencies)
# File 'lib/bundler/override.rb', line 15
def self.rewrite_dependencies(overrides, from, dependencies) return dependencies if overrides.nil? || overrides.none? {|o| o.from == from } dependencies.filter_map do |dep| override = overrides.find {|o| o.from == from && o.target == dep.name } next dep unless override next unless override.operation Gem::Dependency.new(override.operation, *Array(override.requirement)) end end
Instance Attribute Details
#field (readonly)
[ GitHub ]# File 'lib/bundler/override.rb', line 36
attr_reader :target, :field, :operation, :from, :requirement, :source_location
#from (readonly)
[ GitHub ]# File 'lib/bundler/override.rb', line 36
attr_reader :target, :field, :operation, :from, :requirement, :source_location
#operation (readonly)
[ GitHub ]# File 'lib/bundler/override.rb', line 36
attr_reader :target, :field, :operation, :from, :requirement, :source_location
#requirement (readonly)
[ GitHub ]# File 'lib/bundler/override.rb', line 36
attr_reader :target, :field, :operation, :from, :requirement, :source_location
#source_location (readonly)
[ GitHub ]# File 'lib/bundler/override.rb', line 36
attr_reader :target, :field, :operation, :from, :requirement, :source_location
#target (readonly)
[ GitHub ]# File 'lib/bundler/override.rb', line 36
attr_reader :target, :field, :operation, :from, :requirement, :source_location
Instance Method Details
#apply_to(requirement)
# File 'lib/bundler/override.rb', line 62
def apply_to(requirement) raise ArgumentError, "#{self} rewrites a dependency and has no requirement to apply" if @from case operation when nil Gem::Requirement.default when :ignore_upper remove_upper_bounds(requirement) when String Gem::Requirement.new(operation) else raise ArgumentError, "unsupported override operation: #{operation.inspect}" end end
#remove_upper_bounds(requirement) (private)
[ GitHub ]# File 'lib/bundler/override.rb', line 79
def remove_upper_bounds(requirement) return Gem::Requirement.default if requirement.nil? || requirement.none? preserved = requirement.requirements.filter_map do |op, version| if UPPER_BOUND_OPERATORS.include?(op) nil elsif op == "~>" [">=", version] else [op, version] end end return Gem::Requirement.default if preserved.empty? Gem::Requirement.new(preserved.map {|op, v| "#{op} #{v}" }) end
#source_location_label
[ GitHub ]# File 'lib/bundler/override.rb', line 47
def source_location_label return nil unless @source_location "#{File.basename(@source_location.path)}:#{@source_location.lineno}" end
#to_s
[ GitHub ]# File 'lib/bundler/override.rb', line 52
def to_s = if @from ["from: #{@from.inspect}", "to: #{@operation.inspect}", *("version: #{@requirement.inspect}" if @requirement)].join(", ") else "#{@field}: #{@operation.inspect}" end location = source_location_label "override #{@target == :all ? ":all" : @target.inspect}, #{}#{" (declared at #{location})" if location}" end