Cleans up ruby script.
This commit is contained in:
104
.rc.d/ruby.sh
104
.rc.d/ruby.sh
@@ -1,6 +1,100 @@
|
||||
# Ruby
|
||||
if [[ $(command -v rbenv) ]]; then
|
||||
eval "$(rbenv init -)"
|
||||
export PATH="$HOME/.gem/ruby/3.0.0/bin:$PATH"
|
||||
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)"
|
||||
# Setup Ruby environment: version managers (rbenv, chruby, rvm), Homebrew Ruby, and gem bin paths
|
||||
_setup_ruby() {
|
||||
[ -n "$ZSH_VERSION" ] && setopt localoptions nonomatch nullglob
|
||||
|
||||
_add_to_path() {
|
||||
[ -d "$1" ] || return 0
|
||||
case ":$PATH:" in
|
||||
*":$1:"*) ;;
|
||||
*) PATH="$1:$PATH"; export PATH ;;
|
||||
esac
|
||||
}
|
||||
|
||||
_ruby_manager_active=0
|
||||
|
||||
# 1. Check for rbenv (prefer managed Ruby)
|
||||
if [ -d "$HOME/.rbenv/bin" ]; then
|
||||
_add_to_path "$HOME/.rbenv/bin"
|
||||
fi
|
||||
if command -v rbenv >/dev/null 2>&1; then
|
||||
eval "$(rbenv init - 2>/dev/null)"
|
||||
_ruby_manager_active=1
|
||||
|
||||
# Fast OpenSSL detection for ruby-build without calling slow `brew --prefix`
|
||||
if [ -z "$RUBY_CONFIGURE_OPTS" ]; then
|
||||
for _ssl_dir in \
|
||||
"/opt/homebrew/opt/openssl@3" \
|
||||
"/opt/homebrew/opt/openssl@1.1" \
|
||||
"/usr/local/opt/openssl@3" \
|
||||
"/usr/local/opt/openssl@1.1"
|
||||
do
|
||||
if [ -d "$_ssl_dir" ]; then
|
||||
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$_ssl_dir"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
# 2. Check for chruby
|
||||
if [ "$_ruby_manager_active" -eq 0 ]; then
|
||||
for _chruby_sh in \
|
||||
"/opt/homebrew/opt/chruby/share/chruby/chruby.sh" \
|
||||
"/usr/local/share/chruby/chruby.sh" \
|
||||
"/usr/share/chruby/chruby.sh"
|
||||
do
|
||||
if [ -r "$_chruby_sh" ]; then
|
||||
\. "$_chruby_sh"
|
||||
[ -r "${_chruby_sh%/*}/auto.sh" ] && \. "${_chruby_sh%/*}/auto.sh"
|
||||
_ruby_manager_active=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# 3. Check for RVM
|
||||
if [ "$_ruby_manager_active" -eq 0 ]; then
|
||||
if [ -s "$HOME/.rvm/scripts/rvm" ]; then
|
||||
\. "$HOME/.rvm/scripts/rvm"
|
||||
_ruby_manager_active=1
|
||||
fi
|
||||
fi
|
||||
|
||||
# 4. If no version manager is active, fallback to Homebrew keg-only Ruby or standard locations
|
||||
# (Avoids Apple's deprecated /usr/bin/ruby on macOS when Homebrew Ruby is installed)
|
||||
if [ "$_ruby_manager_active" -eq 0 ]; then
|
||||
for _brew_ruby in $(
|
||||
for _r in /opt/homebrew/opt/ruby/bin \
|
||||
/opt/homebrew/opt/ruby@*/bin \
|
||||
/usr/local/opt/ruby/bin \
|
||||
/usr/local/opt/ruby@*/bin; do
|
||||
[ -x "$_r/ruby" ] && echo "$_r"
|
||||
done | sort -V -r 2>/dev/null
|
||||
); do
|
||||
_add_to_path "$_brew_ruby"
|
||||
break
|
||||
done
|
||||
fi
|
||||
|
||||
# 5. Add user gem binaries to PATH (dynamically resolved, not hardcoded to a fixed version)
|
||||
if command -v ruby >/dev/null 2>&1; then
|
||||
_gem_user_bin="$(ruby -e 'puts Gem.user_dir' 2>/dev/null)/bin"
|
||||
if [ -n "$_gem_user_bin" ] && [ -d "$_gem_user_bin" ]; then
|
||||
_add_to_path "$_gem_user_bin"
|
||||
fi
|
||||
unset _gem_user_bin
|
||||
|
||||
for _gbin in $(
|
||||
for _gd in "$HOME/.gem/ruby"/*/bin "$HOME/.local/share/gem/ruby"/*/bin; do
|
||||
[ -d "$_gd" ] && echo "$_gd"
|
||||
done | sort -V -r 2>/dev/null
|
||||
); do
|
||||
_add_to_path "$_gbin"
|
||||
break
|
||||
done
|
||||
fi
|
||||
|
||||
unset _ruby_manager_active
|
||||
}
|
||||
_setup_ruby
|
||||
unset -f _setup_ruby _add_to_path
|
||||
|
||||
Reference in New Issue
Block a user