# File bundler/spec_set.rb, line 142
def <<(spec)
@specs << spec
end
# File bundler/spec_set.rb, line 52
def [](key)
key = key.name if key.respond_to?(:name)
lookup[key].reverse
end
# File bundler/spec_set.rb, line 57
def []=(key, value)
@specs << value
@lookup = nil
@sorted = nil
end
# File bundler/spec_set.rb, line 158
def each(&b)
sorted.each(&b)
end
# File bundler/spec_set.rb, line 131
def find_by_name_and_platform(name, platform)
@specs.detect {|spec| spec.name == name && spec.match_platform(platform) }
end
# File bundler/spec_set.rb, line 14
def for(dependencies, skip = [], check = false, match_current_platform = false, raise_on_missing = true)
handled = []
deps = dependencies.dup
specs = []
skip += ["bundler"]
loop do
break unless dep = deps.shift
next if handled.include?(dep) || skip.include?(dep.name)
handled << dep
specs_for_dep = spec_for_dependency(dep, match_current_platform)
if specs_for_dep.any?
specs += specs_for_dep
specs_for_dep.first.dependencies.each do |d|
next if d.type == :development
d = DepProxy.get_proxy(d, dep.__platform) unless match_current_platform
deps << d
end
elsif check
return false
elsif raise_on_missing
others = lookup[dep.name] if match_current_platform
message = "Unable to find a spec satisfying #{dep} in the set. Perhaps the lockfile is corrupted?"
message += " Found #{others.join(", ")} that did not match the current platform." if others && !others.empty?
raise GemNotFound, message
end
end
if spec = lookup["bundler"].first
specs << spec
end
check ? true : specs
end
# File bundler/spec_set.rb, line 75
def materialize(deps, missing_specs = nil)
materialized = self.for(deps, [], false, true, !missing_specs)
materialized.group_by(&:source).each do |source, specs|
next unless specs.any?{|s| s.is_a?(LazySpecification) }
source.local!
names = -> { specs.map(&:name).uniq }
source.double_check_for(names)
end
materialized.map! do |s|
next s unless s.is_a?(LazySpecification)
spec = s.__materialize__
unless spec
unless missing_specs
raise GemNotFound, "Could not find #{s.full_name} in any of the sources"
end
missing_specs << s
end
spec
end
SpecSet.new(missing_specs ? materialized.compact : materialized)
end
Materialize for all the specs in the spec set, regardless of what platform they're for This is in contrast to how for does platform filtering (and specifically different from how `materialize` calls `for` only for the current platform) @return [Array<Gem::Specification>]
# File bundler/spec_set.rb, line 103
def materialized_for_all_platforms
@specs.group_by(&:source).each do |source, specs|
next unless specs.any?{|s| s.is_a?(LazySpecification) }
source.local!
source.remote!
names = -> { specs.map(&:name).uniq }
source.double_check_for(names)
end
@specs.map do |s|
next s unless s.is_a?(LazySpecification)
spec = s.__materialize__
raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
spec
end
end