From 22c0db64eed9b771a4d83abfd6f4cb8980d82229 Mon Sep 17 00:00:00 2001
From: Brandon Siegel <brandon@smartercode.net>
Date: Wed, 30 Oct 2013 11:01:49 -0400
Subject: [PATCH] Change `bi` alias to a function

Only check the bundler version when we call bi. This fixes two issues:
First, if there is no bundler available system-wide this will cause an
error each time zsh loads. Second, if new bundler is installed
system-wide but you change into an rbenv with an older version, the
alias will no longer work.
---
 plugins/bundler/bundler.plugin.zsh | 52 ++++++++++++++++--------------
 1 file changed, 28 insertions(+), 24 deletions(-)

diff --git a/plugins/bundler/bundler.plugin.zsh b/plugins/bundler/bundler.plugin.zsh
index e390f8620..4c3580cac 100644
--- a/plugins/bundler/bundler.plugin.zsh
+++ b/plugins/bundler/bundler.plugin.zsh
@@ -4,13 +4,31 @@ alias bp="bundle package"
 alias bo="bundle open"
 alias bu="bundle update"
 
-
 # The following is based on https://github.com/gma/bundler-exec
 
 bundled_commands=(annotate berks cap capify cucumber foodcritic foreman guard jekyll kitchen knife middleman nanoc rackup rainbows rake rspec ruby shotgun spec spin spork strainer tailor taps thin thor unicorn unicorn_rails puma)
 
 ## Functions
 
+bi() {
+  if _bundler-installed && _within-bundled-project; then
+    local bundler_version=`bundle version | cut -d' ' -f3`
+    if [[ $bundler_version > '1.4.0' || $bundler_version = '1.4.0' ]]; then
+      if [[ "$(uname)" == 'Darwin' ]]
+      then
+        local cores_num="$(sysctl hw.ncpu | awk '{print $2}')"
+      else
+        local cores_num="$(nproc)"
+      fi
+      bundle install --jobs=$cores_num $@
+    else
+      bundle install $@
+    fi
+  else
+    echo "Can't 'bundle install' outside a bundled project"
+  fi
+}
+
 _bundler-installed() {
   which bundle > /dev/null 2>&1
 }
@@ -32,28 +50,14 @@ _run-with-bundler() {
   fi
 }
 
-if _bundler-installed; then
-	bundler_version=`bundle version | cut -d' ' -f3`
-	if [[ $bundler_version > '1.4.0' || $bundler_version = '1.4.0' ]]; then
-		if [[ "$(uname)" == 'Darwin' ]]
-		then
-			local cores_num="$(sysctl hw.ncpu | awk '{print $2}')"
-		else
-			local cores_num="$(nproc)"
-		fi
-		eval "alias bi='bundle install --jobs=$cores_num'"
-	else
-		alias bi='bundle install' 
-	fi
+## Main program
+for cmd in $bundled_commands; do
+  eval "function unbundled_$cmd () { $cmd \$@ }"
+  eval "function bundled_$cmd () { _run-with-bundler $cmd \$@}"
+  alias $cmd=bundled_$cmd
 
-	## Main program
-	for cmd in $bundled_commands; do
-		eval "function unbundled_$cmd () { $cmd \$@ }"
-		eval "function bundled_$cmd () { _run-with-bundler $cmd \$@}"
-		alias $cmd=bundled_$cmd
+  if which _$cmd > /dev/null 2>&1; then
+        compdef _$cmd bundled_$cmd=$cmd
+  fi
+done
 
-		if which _$cmd > /dev/null 2>&1; then
-			compdef _$cmd bundled_$cmd=$cmd
-		fi
-	done
-fi