Last active
July 19, 2019 05:24
-
-
Save fledman/96b48d6ff42ea20e554d2a001311ef1c to your computer and use it in GitHub Desktop.
joint auto switching for postmodern ruby tools chruby and gem_home (ZSH)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
source /usr/local/share/chruby/chruby.sh | |
source /usr/local/share/gem_home/gem_home.sh | |
unset RUBY_SWITCH_DEFAULT | |
unset RUBY_SWITCH_CURRENT | |
unset RUBY_SWITCH_GEMHOME | |
RUBY_SWITCH_DEFAULT=$(cat ~/.ruby-switch-default) | |
if [[ -z "$RUBY_SWITCH_DEFAULT" ]]; then | |
RUBY_SWITCH_DEFAULT="system" | |
fi | |
chruby "$RUBY_SWITCH_DEFAULT" | |
function __ruby_switch_check_gemset() { | |
if [ -f "$1/.ruby-gemset" ]; then | |
local real | |
if [ -d "$1/.gem" ]; then | |
real=$(realpath "$1/.gem/..") | |
else | |
real=$(realpath "$1") | |
fi | |
if [[ "$real" != "$RUBY_SWITCH_GEMHOME" ]]; then | |
__ruby_switch_revert_gemset | |
RUBY_SWITCH_GEMHOME="$real" | |
gem_home "$real" | |
fi | |
else | |
__ruby_switch_revert_gemset | |
fi | |
} | |
function __ruby_switch_revert_gemset() { | |
if [[ -n "$RUBY_SWITCH_GEMHOME" ]]; then | |
unset RUBY_SWITCH_GEMHOME | |
gem_home - | |
fi | |
} | |
function ruby_switch_auto() { | |
local dir="$PWD/" version | |
until [[ -z "$dir" ]]; do | |
dir="${dir%/*}" | |
if { read -r version <"$dir/.ruby-version"; } 2>/dev/null || [[ -n "$version" ]]; then | |
version="${version%%[[:space:]]}" | |
if [[ "$version" == "$RUBY_SWITCH_CURRENT" ]]; then | |
__ruby_switch_check_gemset "$dir" | |
return | |
else | |
__ruby_switch_revert_gemset | |
RUBY_SWITCH_CURRENT="$version" | |
chruby "$version" | |
local retval=$? | |
if (( $retval != 0 )); then return $retval; fi | |
__ruby_switch_check_gemset "$dir" | |
return $retval | |
fi | |
fi | |
done | |
if [[ -n "$RUBY_SWITCH_CURRENT" ]]; then | |
__ruby_switch_revert_gemset | |
unset RUBY_SWITCH_CURRENT | |
chruby "$RUBY_SWITCH_DEFAULT" | |
return $? | |
fi | |
} | |
if [[ ! "$precmd_functions" == *ruby_switch_auto* ]]; then | |
precmd_functions+=("ruby_switch_auto") | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment