Cleans up ruby script.
This commit is contained in:
106
.rc.d/ruby.sh
106
.rc.d/ruby.sh
@@ -1,6 +1,100 @@
|
|||||||
# Ruby
|
# Setup Ruby environment: version managers (rbenv, chruby, rvm), Homebrew Ruby, and gem bin paths
|
||||||
if [[ $(command -v rbenv) ]]; then
|
_setup_ruby() {
|
||||||
eval "$(rbenv init -)"
|
[ -n "$ZSH_VERSION" ] && setopt localoptions nonomatch nullglob
|
||||||
export PATH="$HOME/.gem/ruby/3.0.0/bin:$PATH"
|
|
||||||
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)"
|
_add_to_path() {
|
||||||
fi
|
[ -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