Class: Bundler::LazySpecification
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
#default_force_ruby_platform
generic_local_platform_is_ruby?, #installable_on_platform?, select_all_platform_match, select_best_local_platform_match, select_best_platform_match
#expanded_dependencies, #matches_current_metadata?, #matches_current_ruby?, #matches_current_rubygems?, #metadata_dependency
Constructor Details
#initialize(name, version, platform, source = nil, **materialization_options) ⇒ LazySpecification
Returns a new instance of LazySpecification.
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/bundler/lazy_specification.rb', line 36
def initialize(name, version, platform, source = nil, **materialization_options)
@name = name
@version = version
@dependencies = []
@required_ruby_version = Gem::Requirement.default
@required_rubygems_version = Gem::Requirement.default
@platform = platform || Gem::Platform::RUBY
@original_source = source
@source = source
@materialization_options = materialization_options
@force_ruby_platform = default_force_ruby_platform
@most_specific_locked_platform = nil
@materialization = nil
end
|
Instance Attribute Details
#dependencies ⇒ Object
Also known as:
runtime_dependencies
Returns the value of attribute dependencies.
12
13
14
|
# File 'lib/bundler/lazy_specification.rb', line 12
def dependencies
@dependencies
end
|
Returns the value of attribute force_ruby_platform.
12
13
14
|
# File 'lib/bundler/lazy_specification.rb', line 12
def force_ruby_platform
@force_ruby_platform
end
|
#materialization ⇒ Object
Returns the value of attribute materialization.
11
12
13
|
# File 'lib/bundler/lazy_specification.rb', line 11
def materialization
@materialization
end
|
For backwards compatibility with existing lockfiles, if the most specific locked platform is not a specific platform like x86_64-linux or universal-java-11, then we keep the previous behaviour of resolving the best platform variant at materiliazation time. For previous bundler versions (before 2.2.0) this was always the case (except when the lockfile only included non-ruby platforms), but we’re also keeping this behaviour on newer bundlers unless users generate the lockfile from scratch or explicitly add a more specific platform.
24
25
26
|
# File 'lib/bundler/lazy_specification.rb', line 24
def most_specific_locked_platform
@most_specific_locked_platform
end
|
#name ⇒ Object
Returns the value of attribute name.
11
12
13
|
# File 'lib/bundler/lazy_specification.rb', line 11
def name
@name
end
|
Returns the value of attribute platform.
11
12
13
|
# File 'lib/bundler/lazy_specification.rb', line 11
def platform
@platform
end
|
#remote ⇒ Object
Returns the value of attribute remote.
12
13
14
|
# File 'lib/bundler/lazy_specification.rb', line 12
def remote
@remote
end
|
#required_ruby_version ⇒ Object
Returns the value of attribute required_ruby_version.
12
13
14
|
# File 'lib/bundler/lazy_specification.rb', line 12
def required_ruby_version
@required_ruby_version
end
|
#required_rubygems_version ⇒ Object
Returns the value of attribute required_rubygems_version.
12
13
14
|
# File 'lib/bundler/lazy_specification.rb', line 12
def required_rubygems_version
@required_rubygems_version
end
|
#source ⇒ Object
Returns the value of attribute source.
12
13
14
|
# File 'lib/bundler/lazy_specification.rb', line 12
def source
@source
end
|
#version ⇒ Object
Returns the value of attribute version.
11
12
13
|
# File 'lib/bundler/lazy_specification.rb', line 11
def version
@version
end
|
Class Method Details
.from_spec(s) ⇒ Object
28
29
30
31
32
33
34
|
# File 'lib/bundler/lazy_specification.rb', line 28
def self.from_spec(s)
lazy_spec = new(s.name, s.version, s.platform, s.source)
lazy_spec.dependencies = s.runtime_dependencies
lazy_spec.required_ruby_version = s.required_ruby_version
lazy_spec.required_rubygems_version = s.required_rubygems_version
lazy_spec
end
|
Instance Method Details
#==(other) ⇒ Object
81
82
83
|
# File 'lib/bundler/lazy_specification.rb', line 81
def ==(other)
full_name == other.full_name
end
|
#eql?(other) ⇒ Boolean
85
86
87
|
# File 'lib/bundler/lazy_specification.rb', line 85
def eql?(other)
full_name.eql?(other.full_name)
end
|
175
176
177
|
# File 'lib/bundler/lazy_specification.rb', line 175
def force_ruby_platform!
@force_ruby_platform = true
end
|
#full_name ⇒ Object
65
66
67
68
69
70
71
|
# File 'lib/bundler/lazy_specification.rb', line 65
def full_name
@full_name ||= if platform == Gem::Platform::RUBY
"#{@name}-#{@version}"
else
"#{@name}-#{@version}-#{platform}"
end
end
|
#git_version ⇒ Object
170
171
172
173
|
# File 'lib/bundler/lazy_specification.rb', line 170
def git_version
return unless source.is_a?(Bundler::Source::Git)
" #{source.revision[0..6]}"
end
|
#hash ⇒ Object
89
90
91
|
# File 'lib/bundler/lazy_specification.rb', line 89
def hash
full_name.hash
end
|
#incomplete? ⇒ Boolean
57
58
59
|
# File 'lib/bundler/lazy_specification.rb', line 57
def incomplete?
@materialization.nil?
end
|
#inspect ⇒ Object
162
163
164
|
# File 'lib/bundler/lazy_specification.rb', line 162
def inspect
"#<#{self.class} @name=\"#{name}\" (#{full_name.delete_prefix("#{name}-")})>"
end
|
#lock_name ⇒ Object
73
74
75
|
# File 'lib/bundler/lazy_specification.rb', line 73
def lock_name
@lock_name ||= name_tuple.lock_name
end
|
#materialize_for_cache ⇒ Object
125
126
127
128
129
|
# File 'lib/bundler/lazy_specification.rb', line 125
def materialize_for_cache
source.remote!
materialize(self, &:first)
end
|
#materialize_for_installation ⇒ Object
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
# File 'lib/bundler/lazy_specification.rb', line 137
def materialize_for_installation
source.local!
if use_exact_resolved_specifications?
materialize(self) do |matching_specs|
choose_compatible(matching_specs)
end
else
materialize([name, version]) do |matching_specs|
target_platform = source.is_a?(Source::Path) ? platform : Bundler.local_platform
installable_candidates = MatchPlatform.select_best_platform_match(matching_specs, target_platform)
specification = choose_compatible(installable_candidates, fallback_to_non_installable: false)
return specification unless specification.nil?
if target_platform != platform
installable_candidates = MatchPlatform.select_best_platform_match(matching_specs, platform)
end
choose_compatible(installable_candidates)
end
end
end
|
#materialized_for_installation ⇒ Object
131
132
133
134
135
|
# File 'lib/bundler/lazy_specification.rb', line 131
def materialized_for_installation
@materialization = materialize_for_installation
self unless incomplete?
end
|
#missing? ⇒ Boolean
53
54
55
|
# File 'lib/bundler/lazy_specification.rb', line 53
def missing?
@materialization == self
end
|
#name_tuple ⇒ Object
77
78
79
|
# File 'lib/bundler/lazy_specification.rb', line 77
def name_tuple
Gem::NameTuple.new(@name, @version, @platform)
end
|
#replace_source_with!(gemfile_source) ⇒ Object
179
180
181
182
183
184
185
|
# File 'lib/bundler/lazy_specification.rb', line 179
def replace_source_with!(gemfile_source)
return unless gemfile_source.can_lock?(self)
@source = gemfile_source
true
end
|
#satisfies?(dependency) ⇒ Boolean
Does this locked specification satisfy dependency
?
NOTE: Rubygems default requirement is “>= 0”, which doesn’t match prereleases of 0 versions, like “0.0.0.dev” or “0.0.0.SNAPSHOT”. However, bundler users expect those to work. We need to make sure that Gemfile dependencies without explicit requirements (which use “>= 0” under the hood by default) are still valid for locked specs using this kind of versions. The method implements an ad-hoc fix for that. A better solution might be to change default rubygems requirement of dependencies to be “>= 0.A” but that’s a major refactoring likely to break things. Hopefully we can attempt it in the future.
107
108
109
110
111
|
# File 'lib/bundler/lazy_specification.rb', line 107
def satisfies?(dependency)
effective_requirement = dependency.requirement == Gem::Requirement.default ? Gem::Requirement.new(">= 0.A") : dependency.requirement
@name == dependency.name && effective_requirement.satisfied_by?(Gem::Version.new(@version))
end
|
#source_changed? ⇒ Boolean
61
62
63
|
# File 'lib/bundler/lazy_specification.rb', line 61
def source_changed?
@original_source != source
end
|
#to_lock ⇒ Object
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/bundler/lazy_specification.rb', line 113
def to_lock
out = String.new
out << " #{lock_name}\n"
dependencies.sort_by(&:to_s).uniq.each do |dep|
next if dep.type == :development
out << " #{dep.to_lock}\n"
end
out
end
|
#to_s ⇒ Object
166
167
168
|
# File 'lib/bundler/lazy_specification.rb', line 166
def to_s
lock_name
end
|