Class: Bundler::SpecSet
- Inherits:
-
Object
show all
- Includes:
- TSort, Enumerable
- Defined in:
- lib/bundler/spec_set.rb
Instance Method Summary
collapse
Methods included from TSort
#each_strongly_connected_component, each_strongly_connected_component, #each_strongly_connected_component_from, each_strongly_connected_component_from, #strongly_connected_components, strongly_connected_components, #tsort, tsort, #tsort_each, tsort_each
Constructor Details
#initialize(specs) ⇒ SpecSet
Returns a new instance of SpecSet.
10
11
12
|
# File 'lib/bundler/spec_set.rb', line 10
def initialize(specs)
@specs = specs
end
|
Instance Method Details
#-(other) ⇒ Object
124
125
126
|
# File 'lib/bundler/spec_set.rb', line 124
def -(other)
SpecSet.new(to_a - other.to_a)
end
|
#<<(spec) ⇒ Object
145
146
147
|
# File 'lib/bundler/spec_set.rb', line 145
def <<(spec)
@specs << spec
end
|
#[](key) ⇒ Object
52
53
54
55
|
# File 'lib/bundler/spec_set.rb', line 52
def [](key)
key = key.name if key.respond_to?(:name)
lookup[key].reverse
end
|
#[]=(key, value) ⇒ Object
57
58
59
60
61
|
# File 'lib/bundler/spec_set.rb', line 57
def []=(key, value)
@specs << value
@lookup = nil
@sorted = nil
end
|
#delete(spec) ⇒ Object
63
64
65
66
67
|
# File 'lib/bundler/spec_set.rb', line 63
def delete(spec)
@specs.delete(spec)
@lookup = nil
@sorted = nil
end
|
#delete_by_name(name) ⇒ Object
132
133
134
135
136
|
# File 'lib/bundler/spec_set.rb', line 132
def delete_by_name(name)
@specs.reject! {|spec| spec.name == name }
@lookup = nil
@sorted = nil
end
|
#each(&b) ⇒ Object
161
162
163
|
# File 'lib/bundler/spec_set.rb', line 161
def each(&b)
sorted.each(&b)
end
|
#empty? ⇒ Boolean
157
158
159
|
# File 'lib/bundler/spec_set.rb', line 157
def empty?
@specs.empty?
end
|
128
129
130
|
# File 'lib/bundler/spec_set.rb', line 128
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]) ⇒ Object
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/bundler/spec_set.rb', line 14
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
specs << IncompleteSpecification.new(name, lookup[name])
end
end
specs.uniq
end
|
#incomplete_ruby_specs?(deps) ⇒ Boolean
100
101
102
103
104
|
# File 'lib/bundler/spec_set.rb', line 100
def incomplete_ruby_specs?(deps)
return false if @specs.empty?
materialize(deps, [Gem::Platform::RUBY]).incomplete_specs.any?
end
|
#incomplete_specs ⇒ Object
110
111
112
|
# File 'lib/bundler/spec_set.rb', line 110
def incomplete_specs
@specs.select {|s| s.is_a?(IncompleteSpecification) }
end
|
#length ⇒ Object
149
150
151
|
# File 'lib/bundler/spec_set.rb', line 149
def length
@specs.length
end
|
#materialize(deps, platforms = [nil]) ⇒ Object
81
82
83
84
85
|
# File 'lib/bundler/spec_set.rb', line 81
def materialize(deps, platforms = [nil])
materialized = self.for(deps, true, platforms)
SpecSet.new(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)
90
91
92
93
94
95
96
97
98
|
# File 'lib/bundler/spec_set.rb', line 90
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) ⇒ Object
114
115
116
117
118
119
120
121
122
|
# File 'lib/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
|
#missing_specs ⇒ Object
106
107
108
|
# File 'lib/bundler/spec_set.rb', line 106
def missing_specs
@specs.select {|s| s.is_a?(LazySpecification) }
end
|
#size ⇒ Object
153
154
155
|
# File 'lib/bundler/spec_set.rb', line 153
def size
@specs.size
end
|
#sort! ⇒ Object
69
70
71
|
# File 'lib/bundler/spec_set.rb', line 69
def sort!
self
end
|
#to_a ⇒ Object
73
74
75
|
# File 'lib/bundler/spec_set.rb', line 73
def to_a
sorted.dup
end
|
#to_hash ⇒ Object
77
78
79
|
# File 'lib/bundler/spec_set.rb', line 77
def to_hash
lookup.dup
end
|
#what_required(spec) ⇒ Object
138
139
140
141
142
143
|
# File 'lib/bundler/spec_set.rb', line 138
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
|