Change soft-fail to use the config, rather than env
[rbx.git] / lib / rubygems / custom_require.rb
blob90e6b539593d8ede7d2e4cc689cb224e3ed21748
1 #--
2 # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
3 # All rights reserved.
4 # See LICENSE.txt for permissions.
5 #++
7 require 'rubygems'
9 module Kernel
10   alias gem_original_require require # :nodoc:
12   #
13   # We replace Ruby's require with our own, which is capable of
14   # loading gems on demand.
15   #
16   # When you call <tt>require 'x'</tt>, this is what happens:
17   # * If the file can be loaded from the existing Ruby loadpath, it
18   #   is.
19   # * Otherwise, installed gems are searched for a file that matches.
20   #   If it's found in gem 'y', that gem is activated (added to the
21   #   loadpath).
22   #
23   # The normal <tt>require</tt> functionality of returning false if
24   # that file has already been loaded is preserved.
25   #
26   def require(path) # :nodoc:
27     gem_original_require path
28   rescue LoadError => load_error
29     if load_error.message =~ /#{Regexp.escape path}\z/ and
30        spec = Gem.searcher.find(path) then
31       Gem.activate(spec.name, "= #{spec.version}")
32       gem_original_require path
33     else
34       raise load_error
35     end
36   end
37 end  # module Kernel