123456789_123456789_123456789_123456789_123456789_

Class: Bundler::Override

Relationships & Source Files
Inherits: Object
Defined in: lib/bundler/override.rb

Constant Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(target, field, operation, from: nil, requirement: nil, source_location: nil) ⇒ Override

[ GitHub ]

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

[ GitHub ]

  
# 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 ]

  
# File 'lib/bundler/override.rb', line 7

def self.find_for(overrides, name, field)
  overrides.find {|o| o.target == name && o.field == field } ||
    overrides.find {|o| o.target == :all && o.field == field }
end

.rewrite_dependencies(overrides, from, dependencies)

Drops or replaces the dependencies of the gem named #from that a from:/to: override targets. The requirement #from put on the replaced gem is discarded.

[ GitHub ]

  
# 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)

Raises:

  • (ArgumentError)
[ GitHub ]

  
# 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
  options = 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}, #{options}#{" (declared at #{location})" if location}"
end