class Bundler::LazySpecification
Attributes
dependencies[R]
name[R]
platform[R]
remote[RW]
source[RW]
version[R]
Public Class Methods
new(name, version, platform, source = nil)
click to toggle source
# File lib/bundler/lazy_specification.rb, line 11 def initialize(name, version, platform, source = nil) @name = name @version = version @dependencies = [] @platform = platform || Gem::Platform::RUBY @source = source @specification = nil end
Public Instance Methods
==(other)
click to toggle source
# File lib/bundler/lazy_specification.rb, line 28 def ==(other) identifier == other.identifier end
__materialize__()
click to toggle source
# File lib/bundler/lazy_specification.rb, line 61 def __materialize__ @specification = if source.is_a?(Source::Gemspec) && source.gemspec.name == name source.gemspec.tap {|s| s.source = source } else search_object = if source.is_a?(Source::Path) Dependency.new(name, version) else ruby_platform_materializes_to_ruby_platform? ? self : Dependency.new(name, version) end platform_object = Gem::Platform.new(platform) candidates = source.specs.search(search_object) same_platform_candidates = candidates.select do |spec| MatchPlatform.platforms_match?(spec.platform, platform_object) end installable_candidates = same_platform_candidates.select do |spec| !spec.is_a?(EndpointSpecification) || (spec.required_ruby_version.satisfied_by?(Gem.ruby_version) && spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version)) end search = installable_candidates.last || same_platform_candidates.last search.dependencies = dependencies if search && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification)) search end end
eql?(other)
click to toggle source
# File lib/bundler/lazy_specification.rb, line 32 def eql?(other) identifier.eql?(other.identifier) end
full_name()
click to toggle source
# File lib/bundler/lazy_specification.rb, line 20 def full_name if platform == Gem::Platform::RUBY || platform.nil? "#{@name}-#{@version}" else "#{@name}-#{@version}-#{platform}" end end
git_version()
click to toggle source
# File lib/bundler/lazy_specification.rb, line 102 def git_version return unless source.is_a?(Bundler::Source::Git) " #{source.revision[0..6]}" end
hash()
click to toggle source
# File lib/bundler/lazy_specification.rb, line 36 def hash identifier.hash end
identifier()
click to toggle source
# File lib/bundler/lazy_specification.rb, line 98 def identifier @__identifier ||= [name, version, platform_string] end
respond_to?(*args)
click to toggle source
Calls superclass method
# File lib/bundler/lazy_specification.rb, line 86 def respond_to?(*args) super || @specification ? @specification.respond_to?(*args) : nil end
satisfies?(dependency)
click to toggle source
# File lib/bundler/lazy_specification.rb, line 40 def satisfies?(dependency) @name == dependency.name && dependency.requirement.satisfied_by?(Gem::Version.new(@version)) end
to_lock()
click to toggle source
# File lib/bundler/lazy_specification.rb, line 44 def to_lock out = String.new if platform == Gem::Platform::RUBY || platform.nil? out << " #{name} (#{version})\n" else out << " #{name} (#{version}-#{platform})\n" end dependencies.sort_by(&:to_s).uniq.each do |dep| next if dep.type == :development out << " #{dep.to_lock}\n" end out end
to_s()
click to toggle source
# File lib/bundler/lazy_specification.rb, line 90 def to_s @__to_s ||= if platform == Gem::Platform::RUBY || platform.nil? "#{name} (#{version})" else "#{name} (#{version}-#{platform})" end end
Protected Instance Methods
platform_string()
click to toggle source
# File lib/bundler/lazy_specification.rb, line 109 def platform_string platform_string = platform.to_s platform_string == Index::RUBY ? Index::NULL : platform_string end
Private Instance Methods
method_missing(method, *args, &blk)
click to toggle source
Calls superclass method
# File lib/bundler/lazy_specification.rb, line 120 def method_missing(method, *args, &blk) raise "LazySpecification has not been materialized yet (calling :#{method} #{args.inspect})" unless @specification return super unless respond_to?(method) @specification.send(method, *args, &blk) end
ruby_platform_materializes_to_ruby_platform?()
click to toggle source
For backwards compatibility with existing lockfiles, if the most specific locked platform is RUBY, 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.
# File lib/bundler/lazy_specification.rb, line 137 def ruby_platform_materializes_to_ruby_platform? !Bundler.most_specific_locked_platform?(Gem::Platform::RUBY) || Bundler.settings[:force_ruby_platform] end
to_ary()
click to toggle source
# File lib/bundler/lazy_specification.rb, line 116 def to_ary nil end