class Bootboot::RubySource

Public Instance Methods

ruby_spec_name() click to toggle source

The spec name for Ruby changed from “ruby0” to “Ruby0” between Bundler 1.17 and 2.0, so we want to use the Ruby spec name from Metadata so Bootboot works across Bundler versions

# File lib/bootboot/ruby_source.rb, line 10
def ruby_spec_name
  @ruby_spec_name ||= begin
    metadata = Bundler::Source::Metadata.new
    ruby_spec = metadata.specs.find { |s| s.name[/[R|r]uby\0/] }
    # Default to Bundler > 2 in case the Bundler internals change
    ruby_spec ? ruby_spec.name : "Ruby\0"
  end
end
specs() click to toggle source
# File lib/bootboot/ruby_source.rb, line 19
def specs
  Bundler::Index.build do |idx|
    # If the ruby version specified in the Gemfile is different from the
    # Ruby version currently running, we want to build a definition without
    # a lockfile (so that `ruby_version` in the Gemfile isn't overridden by
    # the lockfile) and get its `ruby_version`. This will be used both
    # during dependency resolution so that we can pretend the intended Ruby
    # version is present, as well as when updating the lockfile itself.
    ruby_version = Bundler::Definition.build(Bootboot::GEMFILE, nil, false).ruby_version
    ruby_version ||= Bundler::RubyVersion.system
    ruby_spec = Gem::Specification.new(ruby_spec_name, ruby_version.to_gem_version_with_patchlevel)
    ruby_spec.source = self
    idx << ruby_spec
  end
end
to_s() click to toggle source
# File lib/bootboot/ruby_source.rb, line 35
def to_s
  "Bootboot plugin Ruby source"
end