lib/bootboot/bundler_patch.rb in bootboot-0.1.2 vs lib/bootboot/bundler_patch.rb in bootboot-0.2.0

- old
+ new

@@ -1,26 +1,61 @@ # frozen_string_literal: true +require "bootboot/ruby_source" + module DefinitionPatch def initialize(wrong_lock, *args) - lockfile = if ENV['SKIP_BUNDLER_PATCH'] + lockfile = if ENV['BOOTBOOT_UPDATING_ALTERNATE_LOCKFILE'] wrong_lock else Bootboot::GEMFILE_NEXT_LOCK end super(lockfile, *args) end end +module RubyVersionPatch + def system + if ENV['BOOTBOOT_UPDATING_ALTERNATE_LOCKFILE'] + # If we're updating the alternate file and the ruby version specified in + # the Gemfile is different from the Ruby version currently running, we + # want to write the version specified in `Gemfile` for the current + # dependency set to the lock file + Bundler::Definition.build(Bootboot::GEMFILE, nil, false).ruby_version || super + else + super + end + end +end + +module DefinitionSourceRequirementsPatch + def source_requirements + super.tap do |source_requirements| + # Bundler has a hard requirement that Ruby should be in the Metadata + # source, so this replaces Ruby's Metadata source with our custom source + source = Bootboot::RubySource.new({}) + source_requirements[source.ruby_spec_name] = source + end + end +end + module SharedHelpersPatch def default_lockfile Bootboot::GEMFILE_NEXT_LOCK end end +Bundler::Definition.prepend(DefinitionSourceRequirementsPatch) +Bundler::RubyVersion.singleton_class.prepend(RubyVersionPatch) + Bundler::Dsl.class_eval do def enable_dual_booting Bundler::Definition.prepend(DefinitionPatch) Bundler::SharedHelpers.singleton_class.prepend(SharedHelpersPatch) + Bundler::Settings.prepend(Module.new do + def app_cache_path + 'vendor/cache-next' + end + end) end end