![show/hide quicksearch [+]](../images/find.png)
 
               # 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