mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
41 lines
1.1 KiB
Ruby
41 lines
1.1 KiB
Ruby
module CodeLoadingSpecs
|
|
# The #require instance method is private, so this class enables
|
|
# calling #require like obj.require(file). This is used to share
|
|
# specs between Kernel#require and Kernel.require.
|
|
class Method
|
|
def require(name)
|
|
super name
|
|
end
|
|
|
|
def load(name, wrap=false)
|
|
super
|
|
end
|
|
end
|
|
|
|
def self.preload_rubygems
|
|
# Require RubyGems eagerly, to ensure #require is already the RubyGems
|
|
# version and RubyGems is only loaded once, before starting #require/#autoload specs
|
|
# which snapshot $LOADED_FEATURES and could cause RubyGems to load twice.
|
|
# #require specs also snapshot #require, and could end up redefining #require as the original core Kernel#require.
|
|
@rubygems ||= begin
|
|
require "rubygems"
|
|
true
|
|
rescue LoadError
|
|
true
|
|
end
|
|
end
|
|
|
|
def self.spec_setup
|
|
preload_rubygems
|
|
|
|
@saved_loaded_features = $LOADED_FEATURES.clone
|
|
@saved_load_path = $LOAD_PATH.clone
|
|
ScratchPad.record []
|
|
end
|
|
|
|
def self.spec_cleanup
|
|
$LOADED_FEATURES.replace @saved_loaded_features
|
|
$LOAD_PATH.replace @saved_load_path
|
|
ScratchPad.clear
|
|
end
|
|
end
|