class Bundler::SpecSet
Attributes
incomplete_specs[R]
Public Class Methods
new(specs, incomplete_specs = [])
click to toggle source
# File bundler/spec_set.rb, line 12 def initialize(specs, incomplete_specs = []) @specs = specs @incomplete_specs = incomplete_specs end
Public Instance Methods
-(other)
click to toggle source
# File bundler/spec_set.rb, line 127 def -(other) SpecSet.new(to_a - other.to_a) end
<<(spec)
click to toggle source
# File bundler/spec_set.rb, line 148 def <<(spec) @specs << spec end
[](key)
click to toggle source
# File bundler/spec_set.rb, line 55 def [](key) key = key.name if key.respond_to?(:name) lookup[key].reverse end
[]=(key, value)
click to toggle source
# File bundler/spec_set.rb, line 60 def []=(key, value) @specs << value @lookup = nil @sorted = nil end
delete(spec)
click to toggle source
# File bundler/spec_set.rb, line 66 def delete(spec) @specs.delete(spec) @lookup = nil @sorted = nil end
delete_by_name(name)
click to toggle source
# File bundler/spec_set.rb, line 135 def delete_by_name(name) @specs.reject! {|spec| spec.name == name } @lookup = nil @sorted = nil end
each(&b)
click to toggle source
# File bundler/spec_set.rb, line 164 def each(&b) sorted.each(&b) end
empty?()
click to toggle source
# File bundler/spec_set.rb, line 160 def empty? @specs.empty? end
find_by_name_and_platform(name, platform)
click to toggle source
# 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
for(dependencies, check = false, platforms = [nil])
click to toggle source
# File bundler/spec_set.rb, line 17 def for(dependencies, check = false, platforms = [nil]) handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h deps = dependencies.product(platforms) specs = [] loop do break unless dep = deps.shift name = dep[0].name platform = dep[1] incomplete = false key = [name, platform] next if handled.key?(key) handled[key] = true specs_for_dep = specs_for_dependency(*dep) if specs_for_dep.any? specs.concat(specs_for_dep) specs_for_dep.first.dependencies.each do |d| next if d.type == :development incomplete = true if d.name != "bundler" && lookup[d.name].empty? deps << [d, dep[1]] end else incomplete = true end if incomplete && check @incomplete_specs += lookup[name].any? ? lookup[name] : [LazySpecification.new(name, nil, nil)] end end specs.uniq end
incomplete_ruby_specs?(deps)
click to toggle source
# File bundler/spec_set.rb, line 103 def incomplete_ruby_specs?(deps) return false if @specs.empty? @incomplete_specs = [] self.for(deps, true, [Gem::Platform::RUBY]) @incomplete_specs.any? end
length()
click to toggle source
# File bundler/spec_set.rb, line 152 def length @specs.length end
materialize(deps)
click to toggle source
# File bundler/spec_set.rb, line 84 def materialize(deps) materialized = self.for(deps, true) SpecSet.new(materialized, incomplete_specs) end
materialized_for_all_platforms()
click to toggle source
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 93 def materialized_for_all_platforms @specs.map do |s| next s unless s.is_a?(LazySpecification) s.source.remote! spec = s.materialize_for_installation raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec spec end end
merge(set)
click to toggle source
# File bundler/spec_set.rb, line 117 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
missing_specs()
click to toggle source
# File bundler/spec_set.rb, line 113 def missing_specs @specs.select {|s| s.is_a?(LazySpecification) } end
size()
click to toggle source
# File bundler/spec_set.rb, line 156 def size @specs.size end
sort!()
click to toggle source
# File bundler/spec_set.rb, line 72 def sort! self end
to_a()
click to toggle source
# File bundler/spec_set.rb, line 76 def to_a sorted.dup end
to_hash()
click to toggle source
# File bundler/spec_set.rb, line 80 def to_hash lookup.dup end
what_required(spec)
click to toggle source
# File bundler/spec_set.rb, line 141 def what_required(spec) unless req = find {|s| s.dependencies.any? {|d| d.type == :runtime && d.name == spec.name } } return [spec] end what_required(req) << spec end