diff options
author | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-16 18:49:26 +0900 |
---|---|---|
committer | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-30 00:39:06 +0900 |
commit | fcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch) | |
tree | 64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/lib/rubygems/path_support.rb |
Fresh start
Diffstat (limited to 'jni/ruby/lib/rubygems/path_support.rb')
-rw-r--r-- | jni/ruby/lib/rubygems/path_support.rb | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/jni/ruby/lib/rubygems/path_support.rb b/jni/ruby/lib/rubygems/path_support.rb new file mode 100644 index 0000000..2af303e --- /dev/null +++ b/jni/ruby/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 |