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