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 12 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 29 def ==(other) identifier == other.identifier end
__materialize__()
click to toggle source
# File lib/bundler/lazy_specification.rb, line 62 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 33 def eql?(other) identifier.eql?(other.identifier) end
full_name()
click to toggle source
# File lib/bundler/lazy_specification.rb, line 21 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 103 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 37 def hash identifier.hash end
identifier()
click to toggle source
# File lib/bundler/lazy_specification.rb, line 99 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 87 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 41 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 45 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 91 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 110 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 121 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 138 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 117 def to_ary nil end