Class: Bundler::SpecSet
- Inherits:
-
Object
show all
- Includes:
- TSort, Enumerable
- Defined in:
- lib/bundler/spec_set.rb
Constant Summary
Constants included
from TSort
TSort::VERSION
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
158
159
160
|
# File 'lib/bundler/spec_set.rb', line 158
def -(other)
SpecSet.new(to_a - other.to_a)
end
|
#<<(spec) ⇒ Object
179
180
181
|
# File 'lib/bundler/spec_set.rb', line 179
def <<(spec)
@specs << spec
end
|
#[](key) ⇒ Object
80
81
82
83
|
# File 'lib/bundler/spec_set.rb', line 80
def [](key)
key = key.name if key.respond_to?(:name)
lookup[key]&.reverse || []
end
|
#[]=(key, value) ⇒ Object
85
86
87
88
89
|
# File 'lib/bundler/spec_set.rb', line 85
def []=(key, value)
@specs << value
reset!
end
|
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/bundler/spec_set.rb', line 50
def (platforms)
return platforms.concat([Gem::Platform::RUBY]).uniq if @specs.empty?
new_platforms = all_platforms.select do |platform|
next if platforms.include?(platform)
next unless GemHelpers.generic(platform) == Gem::Platform::RUBY
complete_platform(platform)
end
return platforms if new_platforms.empty?
platforms.concat(new_platforms)
less_specific_platform = new_platforms.find {|platform| platform != Gem::Platform::RUBY && Bundler.local_platform === platform && platform === Bundler.local_platform }
platforms.delete(Bundler.local_platform) if less_specific_platform
platforms
end
|
#delete(specs) ⇒ Object
91
92
93
94
95
|
# File 'lib/bundler/spec_set.rb', line 91
def delete(specs)
Array(specs).each {|spec| @specs.delete(spec) }
reset!
end
|
#delete_by_name(name) ⇒ Object
166
167
168
169
170
|
# File 'lib/bundler/spec_set.rb', line 166
def delete_by_name(name)
@specs.reject! {|spec| spec.name == name }
reset!
end
|
#each(&b) ⇒ Object
195
196
197
|
# File 'lib/bundler/spec_set.rb', line 195
def each(&b)
sorted.each(&b)
end
|
#empty? ⇒ Boolean
191
192
193
|
# File 'lib/bundler/spec_set.rb', line 191
def empty?
@specs.empty?
end
|
162
163
164
|
# File 'lib/bundler/spec_set.rb', line 162
def find_by_name_and_platform(name, platform)
@specs.detect {|spec| spec.name == name && spec.match_platform(platform) }
end
|
#for(dependencies, platforms_or_legacy_check = [nil], legacy_platforms = [nil], skips: []) ⇒ Object
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/bundler/spec_set.rb', line 14
def for(dependencies, platforms_or_legacy_check = [nil], legacy_platforms = [nil], skips: [])
platforms = if [true, false].include?(platforms_or_legacy_check)
Bundler::SharedHelpers.major_deprecation 2,
"SpecSet#for received a `check` parameter, but that's no longer used and deprecated. " \
"SpecSet#for always implicitly performs validation. Please remove this parameter",
print_caller_location: true
legacy_platforms
else
platforms_or_legacy_check
end
materialize_dependencies(dependencies, platforms, skips: skips)
@materializations.flat_map(&:specs).uniq
end
|
127
128
129
130
131
132
133
134
|
# File 'lib/bundler/spec_set.rb', line 127
def incomplete_for_platform?(deps, platform)
return false if @specs.empty?
validation_set = self.class.new(@specs)
validation_set.for(deps, [platform])
validation_set.incomplete_specs.any?
end
|
#incomplete_specs ⇒ Object
150
151
152
|
# File 'lib/bundler/spec_set.rb', line 150
def incomplete_specs
@materializations.flat_map(&:incomplete_specs)
end
|
#insecurely_materialized_specs ⇒ Object
154
155
156
|
# File 'lib/bundler/spec_set.rb', line 154
def insecurely_materialized_specs
materialized_specs.select(&:insecurely_materialized?)
end
|
#length ⇒ Object
183
184
185
|
# File 'lib/bundler/spec_set.rb', line 183
def length
@specs.length
end
|
#materialize(deps) ⇒ Object
109
110
111
112
113
|
# File 'lib/bundler/spec_set.rb', line 109
def materialize(deps)
materialize_dependencies(deps)
SpecSet.new(materialized_specs)
end
|
Materialize for all the specs in the spec set, regardless of what platform they’re for
117
118
119
120
121
122
123
124
125
|
# File 'lib/bundler/spec_set.rb', line 117
def materialized_for_all_platforms
@specs.map do |s|
next s unless s.is_a?(LazySpecification)
s.source.remote!
spec = s.materialize_strictly
raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
spec
end
end
|
#missing_specs ⇒ Object
142
143
144
|
# File 'lib/bundler/spec_set.rb', line 142
def missing_specs
@materializations.flat_map(&:completely_missing_specs)
end
|
#missing_specs_for(dependencies) ⇒ Object
136
137
138
139
140
|
# File 'lib/bundler/spec_set.rb', line 136
def missing_specs_for(dependencies)
materialize_dependencies(dependencies)
missing_specs
end
|
#names ⇒ Object
199
200
201
|
# File 'lib/bundler/spec_set.rb', line 199
def names
lookup.keys
end
|
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/bundler/spec_set.rb', line 31
def normalize_platforms!(deps, platforms)
complete_platforms = (platforms)
complete_platforms.map do |platform|
next platform if platform == Gem::Platform::RUBY
begin
Integer(platform.version)
rescue ArgumentError, TypeError
next platform
end
less_specific_platform = Gem::Platform.new([platform.cpu, platform.os, nil])
next platform if incomplete_for_platform?(deps, less_specific_platform)
less_specific_platform
end.uniq
end
|
#partially_missing_specs ⇒ Object
146
147
148
|
# File 'lib/bundler/spec_set.rb', line 146
def partially_missing_specs
@materializations.flat_map(&:partially_missing_specs)
end
|
#size ⇒ Object
187
188
189
|
# File 'lib/bundler/spec_set.rb', line 187
def size
@specs.size
end
|
#sort! ⇒ Object
97
98
99
|
# File 'lib/bundler/spec_set.rb', line 97
def sort!
self
end
|
#to_a ⇒ Object
101
102
103
|
# File 'lib/bundler/spec_set.rb', line 101
def to_a
sorted.dup
end
|
#to_hash ⇒ Object
105
106
107
|
# File 'lib/bundler/spec_set.rb', line 105
def to_hash
lookup.dup
end
|
#valid?(s) ⇒ Boolean
203
204
205
|
# File 'lib/bundler/spec_set.rb', line 203
def valid?(s)
s.matches_current_metadata? && valid_dependencies?(s)
end
|
#validate_deps(s) ⇒ Object
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/bundler/spec_set.rb', line 69
def validate_deps(s)
s.runtime_dependencies.each do |dep|
next if dep.name == "bundler"
return :missing unless names.include?(dep.name)
return :invalid if none? {|spec| dep.matches_spec?(spec) }
end
:valid
end
|
#what_required(spec) ⇒ Object
172
173
174
175
176
177
|
# File 'lib/bundler/spec_set.rb', line 172
def what_required(spec)
unless req = find {|s| s.runtime_dependencies.any? {|d| d.name == spec.name } }
return [spec]
end
what_required(req) << spec
end
|