From b47a04eb9151a9fa59979fbaf20deeb404822959 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Thu, 10 Apr 2025 16:02:30 +0900 Subject: [PATCH] Refactor bundled condition --- lib/bundled_gems.rb | 8 +++++--- spec/bundled_gems_spec.rb | 29 +++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/lib/bundled_gems.rb b/lib/bundled_gems.rb index 761e98a531..fab79f42a9 100644 --- a/lib/bundled_gems.rb +++ b/lib/bundled_gems.rb @@ -195,15 +195,17 @@ module Gem::BUNDLED_GEMS # :nodoc: Bundler.reset! builder = Bundler::Dsl.new + if Bundler::SharedHelpers.in_bundle? - if Bundler.definition.gemfiles.empty? + if Bundler.locked_gems Bundler.locked_gems.specs.each{|spec| builder.gem spec.name, spec.version.to_s } - else + elsif Bundler.definition.gemfiles.size > 0 Bundler.definition.gemfiles.each{|gemfile| builder.eval_gemfile(gemfile) } end - builder.gem gem end + builder.gem gem + definition = builder.to_definition(nil, true) definition.validate_runtime! diff --git a/spec/bundled_gems_spec.rb b/spec/bundled_gems_spec.rb index 54f52864cd..32540e7ffd 100644 --- a/spec/bundled_gems_spec.rb +++ b/spec/bundled_gems_spec.rb @@ -363,11 +363,36 @@ RSpec.describe "bundled_gems.rb" do end describe ".force_activate" do - context "when gem activation fails" do + before do + allow_any_instance_of(Bundler::Runtime).to receive(:setup).and_raise(Bundler::GemNotFound) + end + + context "with bundle environment" do before do - allow_any_instance_of(Bundler::Runtime).to receive(:setup).and_raise(Bundler::GemNotFound) + code = <<-RUBY + #!/usr/bin/env ruby + + Gem::BUNDLED_GEMS.force_activate("csv") + RUBY + create_file("script.rb", code) + create_file("Gemfile", "source 'https://rubygems.org'") end + it "lockfile is available" do + bundle "install" + bundle "exec ./script.rb" + + expect(err).to include("gem install csv") + end + + it "lockfile is not available" do + bundle "exec ./script.rb" + + expect(err).to include("gem install csv") + end + end + + context "without bundle environment" do it "warns about installation requirement" do expect_any_instance_of(Object).to receive(:warn) Gem::BUNDLED_GEMS.force_activate("csv")