# File bundler/spec_set.rb, line 58 def [](key) key = key.name if key.respond_to?(:name) lookup[key].reverse end
# File bundler/spec_set.rb, line 63 def []=(key, value) @specs << value @lookup = nil @sorted = nil value end
# File bundler/spec_set.rb, line 124 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 19 def for(dependencies, skip = [], check = false, match_current_platform = false, raise_on_missing = true) handled = Set.new deps = dependencies.dup specs = [] skip += ["bundler"] loop do break unless dep = deps.shift next if !handled.add?(dep) || skip.include?(dep.name) if spec = spec_for_dependency(dep, match_current_platform) specs << spec spec.dependencies.each do |d| next if d.type == :development d = DepProxy.new(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 : SpecSet.new(specs) end
# File bundler/spec_set.rb, line 82 def materialize(deps, missing_specs = nil) materialized = self.for(deps, [], false, true, !missing_specs).to_a deps = materialized.map(&:name).uniq materialized.map! do |s| next s unless s.is_a?(LazySpecification) s.source.dependency_names = deps if s.source.respond_to?(:dependency_names=) 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 names = @specs.map(&:name).uniq @specs.map do |s| next s unless s.is_a?(LazySpecification) s.source.dependency_names = names if s.source.respond_to?(:dependency_names=) spec = s.__materialize__ raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec spec end end
# File bundler/spec_set.rb, line 114 def merge(set) arr = sorted.dup set.each do |set_spec| full_name = set_spec.full_name next if arr.any? {|spec| spec.full_name == full_name } arr << set_spec end SpecSet.new(arr) end