Skip to content

Commit c02ee87

Browse files
committed
Ensure RubyGems is loaded before running #require specs
1 parent 9250281 commit c02ee87

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

spec/ruby/core/module/autoload_spec.rb

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require_relative '../../spec_helper'
2+
require_relative '../../fixtures/code_loading'
23
require_relative 'fixtures/classes'
34
require 'thread'
45

@@ -33,14 +34,7 @@
3334
describe "Module#autoload" do
3435
before :all do
3536
@non_existent = fixture __FILE__, "no_autoload.rb"
36-
37-
# Require RubyGems eagerly, to ensure #require is already the RubyGems
38-
# version, before starting #autoload specs which snapshot #require, and
39-
# could end up redefining #require as the original core Kernel#require.
40-
begin
41-
require "rubygems"
42-
rescue LoadError
43-
end
37+
CodeLoadingSpecs.preload_rubygems
4438
end
4539

4640
before :each do

spec/ruby/fixtures/code_loading.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,22 @@ def load(name, wrap=false)
1212
end
1313
end
1414

15+
def self.preload_rubygems
16+
# Require RubyGems eagerly, to ensure #require is already the RubyGems
17+
# version and RubyGems is only loaded once, before starting #require/#autoload specs
18+
# which snapshot $LOADED_FEATURES and could cause RubyGems to load twice.
19+
# #require specs also snapshot #require, and could end up redefining #require as the original core Kernel#require.
20+
@rubygems ||= begin
21+
require "rubygems"
22+
true
23+
rescue LoadError
24+
true
25+
end
26+
end
27+
1528
def self.spec_setup
29+
preload_rubygems
30+
1631
@saved_loaded_features = $LOADED_FEATURES.clone
1732
@saved_load_path = $LOAD_PATH.clone
1833
ScratchPad.record []

0 commit comments

Comments
 (0)