diff options
| author | Cody Cutrer <cody@instructure.com> | 2024-02-12 10:13:36 -0700 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2024-02-15 20:26:03 +0000 |
| commit | fa334ecd40d66fa1aa1a344afdcf776d5a8c541c (patch) | |
| tree | 60d654b941b0c42adc8545d3efb39b72c7c391b1 | |
| parent | 8f17b3bd27a5c62c44b9de2376b8d54334997071 (diff) | |
[rubygems/rubygems] use full path for instance_eval
so that __dir__ and __FILE__ will work properly from within that gemfile
fragment, if eval_gemfile is given a relative path
https://github.com/rubygems/rubygems/commit/d521bf9790
| -rw-r--r-- | lib/bundler/dsl.rb | 2 | ||||
| -rw-r--r-- | spec/bundler/bundler/dsl_spec.rb | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/lib/bundler/dsl.rb b/lib/bundler/dsl.rb index 1460b9f52f..7b342c594a 100644 --- a/lib/bundler/dsl.rb +++ b/lib/bundler/dsl.rb @@ -46,7 +46,7 @@ module Bundler @gemfile = expanded_gemfile_path @gemfiles << expanded_gemfile_path contents ||= Bundler.read_file(@gemfile.to_s) - instance_eval(contents, gemfile.to_s, 1) + instance_eval(contents, @gemfile.to_s, 1) rescue Exception => e # rubocop:disable Lint/RescueException message = "There was an error " \ "#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \ diff --git a/spec/bundler/bundler/dsl_spec.rb b/spec/bundler/bundler/dsl_spec.rb index 99a8c3ad67..e2e17bd357 100644 --- a/spec/bundler/bundler/dsl_spec.rb +++ b/spec/bundler/bundler/dsl_spec.rb @@ -134,6 +134,17 @@ RSpec.describe Bundler::Dsl do expect { subject.eval_gemfile("Gemfile") }. to raise_error(Bundler::GemfileError, /There was an error evaluating `Gemfile`: ruby_version must match the :engine_version for MRI/) end + + it "populates __dir__ and __FILE__ correctly" do + abs_path = source_root.join("../fragment.rb").to_s + expect(Bundler).to receive(:read_file).with(abs_path).and_return(<<~RUBY) + @fragment_dir = __dir__ + @fragment_file = __FILE__ + RUBY + subject.eval_gemfile("../fragment.rb") + expect(subject.instance_variable_get(:@fragment_dir)).to eq(source_root.dirname.to_s) + expect(subject.instance_variable_get(:@fragment_file)).to eq(abs_path) + end end describe "#gem" do |
