1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
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
|