From 1a74fa4b04da04bd2bb33103dd3cf431438df38e Mon Sep 17 00:00:00 2001 From: usa Date: Thu, 14 Dec 2017 15:09:35 +0000 Subject: add tag v2_2_9 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v2_2_9@61257 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby_2_2/lib/rubygems/path_support.rb | 87 +++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 ruby_2_2/lib/rubygems/path_support.rb (limited to 'ruby_2_2/lib/rubygems/path_support.rb') diff --git a/ruby_2_2/lib/rubygems/path_support.rb b/ruby_2_2/lib/rubygems/path_support.rb new file mode 100644 index 0000000000..2af303eecf --- /dev/null +++ b/ruby_2_2/lib/rubygems/path_support.rb @@ -0,0 +1,87 @@ +## +# +# Gem::PathSupport facilitates the GEM_HOME and GEM_PATH environment settings +# to the rest of RubyGems. +# +class Gem::PathSupport + ## + # The default system path for managing Gems. + attr_reader :home + + ## + # Array of paths to search for Gems. + attr_reader :path + + ## + # Directory with spec cache + attr_reader :spec_cache_dir # :nodoc: + + ## + # + # Constructor. Takes a single argument which is to be treated like a + # hashtable, or defaults to ENV, the system environment. + # + def initialize(env=ENV) + @env = env + + # note 'env' vs 'ENV'... + @home = env["GEM_HOME"] || ENV["GEM_HOME"] || Gem.default_dir + + if File::ALT_SEPARATOR then + @home = @home.gsub(File::ALT_SEPARATOR, File::SEPARATOR) + end + + self.path = env["GEM_PATH"] || ENV["GEM_PATH"] + + @spec_cache_dir = + env["GEM_SPEC_CACHE"] || ENV["GEM_SPEC_CACHE"] || + Gem.default_spec_cache_dir + + @spec_cache_dir = @spec_cache_dir.dup.untaint + end + + private + + ## + # Set the Gem home directory (as reported by Gem.dir). + + def home=(home) + @home = home.to_s + end + + ## + # Set the Gem search path (as reported by Gem.path). + + def path=(gpaths) + # FIX: it should be [home, *path], not [*path, home] + + gem_path = [] + + # FIX: I can't tell wtf this is doing. + gpaths ||= (ENV['GEM_PATH'] || "").empty? ? nil : ENV["GEM_PATH"] + + if gpaths + if gpaths.kind_of?(Array) + gem_path = gpaths.dup + else + gem_path = gpaths.split(Gem.path_separator) + end + + if File::ALT_SEPARATOR then + gem_path.map! do |this_path| + this_path.gsub File::ALT_SEPARATOR, File::SEPARATOR + end + end + + gem_path << @home + else + gem_path = Gem.default_path + [@home] + + if defined?(APPLE_GEM_HOME) + gem_path << APPLE_GEM_HOME + end + end + + @path = gem_path.uniq + end +end -- cgit v1.2.3