From 4c773725c7683ec624863459ac3b4a3237a7382f Mon Sep 17 00:00:00 2001
From: Alyssa Ross <hi@alyssa.is>
Date: Mon, 19 Sep 2016 16:59:33 +0100
Subject: [PATCH] Use user GEM_HOME for installing gems

Save the value of GEM_HOME before unsetting it,
and resetting it when setting up a gem environment.

Fixes #944.
---
 Library/Homebrew/brew.sh  |  4 ++++
 Library/Homebrew/utils.rb | 13 ++++++++++---
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/Library/Homebrew/brew.sh b/Library/Homebrew/brew.sh
index 0fadecaba3..e8d2fe469f 100644
--- a/Library/Homebrew/brew.sh
+++ b/Library/Homebrew/brew.sh
@@ -59,6 +59,10 @@ then
   odie "Cowardly refusing to continue at this prefix: $HOMEBREW_PREFIX"
 fi
 
+# Save value to use for installing gems
+export GEM_OLD_HOME="$GEM_HOME"
+export GEM_OLD_PATH="$GEM_PATH"
+
 # Users may have these set, pointing the system Ruby
 # at non-system gem paths
 unset GEM_HOME
diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb
index cda67a8c60..8121b71465 100644
--- a/Library/Homebrew/utils.rb
+++ b/Library/Homebrew/utils.rb
@@ -270,17 +270,24 @@ module Homebrew
   end
 
   def self.install_gem_setup_path!(name, version = nil, executable = name)
-    require "rubygems"
+    # Respect user's preferences for where gems should be installed.
+    ENV["GEM_HOME"] = ENV["GEM_OLD_HOME"].to_s
+    ENV["GEM_HOME"] = Gem.user_dir if ENV["GEM_HOME"].empty?
+    ENV["GEM_PATH"] = ENV["GEM_OLD_PATH"] unless ENV["GEM_OLD_PATH"].to_s.empty?
+
+    # Make rubygems notice env changes.
+    Gem.clear_paths
+    Gem::Specification.reset
 
     # Add Gem binary directory and (if missing) Ruby binary directory to PATH.
     path = ENV["PATH"].split(File::PATH_SEPARATOR)
     path.unshift(RUBY_BIN) if which("ruby") != RUBY_PATH
-    path.unshift("#{Gem.user_dir}/bin")
+    path.unshift("#{Gem.dir}/bin")
     ENV["PATH"] = path.join(File::PATH_SEPARATOR)
 
     if Gem::Specification.find_all_by_name(name, version).empty?
       ohai "Installing or updating '#{name}' gem"
-      install_args = %W[--no-ri --no-rdoc --user-install #{name}]
+      install_args = %W[--no-ri --no-rdoc #{name}]
       install_args << "--version" << version if version
 
       # Do `gem install [...]` without having to spawn a separate process or
-- 
GitLab