diff options
Diffstat (limited to 'lib/rubygems/custom_require.rb')
-rw-r--r-- | lib/rubygems/custom_require.rb | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/rubygems/custom_require.rb b/lib/rubygems/custom_require.rb index 88e7aa4c4c..ebe7b05558 100644 --- a/lib/rubygems/custom_require.rb +++ b/lib/rubygems/custom_require.rb @@ -31,8 +31,23 @@ module Kernel # The normal <tt>require</tt> functionality of returning false if # that file has already been loaded is preserved. - def require(path) # :doc: - gem_original_require path + def require path + if Gem.unresolved_deps.empty? or Gem.loaded_path? path then + gem_original_require path + else + specs = Gem.searcher.find_in_unresolved path + unless specs.empty? then + specs = [specs.last] + else + specs = Gem.searcher.find_in_unresolved_tree path + end + + specs.each do |spec| + Gem.activate spec.name, spec.version # FIX: this is dumb + end + + return gem_original_require path + end rescue LoadError => load_error if load_error.message.end_with?(path) and Gem.try_activate(path) then return gem_original_require(path) |