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
 |