style(chruby): fix plugin code style and loading process

This commit is contained in:
Marc Cornellà 2021-12-13 17:37:44 +01:00
parent 7b12fa9799
commit 5c14474eb2
No known key found for this signature in database
GPG key ID: 0314585E776A9C1B
2 changed files with 83 additions and 109 deletions

View file

@ -5,6 +5,7 @@ current Ruby version, and completion and a prompt function to display the Ruby v
Supports brew and manual installation of chruby. Supports brew and manual installation of chruby.
To use it, add `chruby` to the plugins array in your zshrc file: To use it, add `chruby` to the plugins array in your zshrc file:
```zsh ```zsh
plugins=(... chruby) plugins=(... chruby)
``` ```
@ -14,7 +15,7 @@ plugins=(... chruby)
If you'd prefer to specify an explicit path to load chruby from If you'd prefer to specify an explicit path to load chruby from
you can set variables like so: you can set variables like so:
``` ```zsh
zstyle :omz:plugins:chruby path /local/path/to/chruby.sh zstyle :omz:plugins:chruby path /local/path/to/chruby.sh
zstyle :omz:plugins:chruby auto /local/path/to/auto.sh zstyle :omz:plugins:chruby auto /local/path/to/auto.sh
``` ```

View file

@ -1,65 +1,10 @@
# ## load chruby from different locations
# INSTRUCTIONS
#
# With either a manual or brew installed chruby things should just work.
#
# If you'd prefer to specify an explicit path to load chruby from
# you can set variables like so:
#
# zstyle :omz:plugins:chruby path /local/path/to/chruby.sh
# zstyle :omz:plugins:chruby auto /local/path/to/auto.sh
#
# TODO
# - autodetermine correct source path on non OS X systems
# - completion if ruby-install exists
# rvm and rbenv plugins also provide this alias _source-from-omz-settings() {
alias rubies='chruby' local _chruby_path _chruby_auto
zstyle -s :omz:plugins:chruby path _chruby_path || return 1
_homebrew-installed() { zstyle -s :omz:plugins:chruby auto _chruby_auto || return 1
whence brew &> /dev/null
_xit=$?
if [ $_xit -eq 0 ];then
# ok , we have brew installed
# speculatively we check default brew prefix
if [ -h /usr/local/opt/chruby ];then
_brew_prefix="/usr/local/opt/chruby"
else
# ok , it is not default prefix
# this call to brew is expensive ( about 400 ms ), so at least let's make it only once
_brew_prefix=$(brew --prefix chruby)
fi
return 0
else
return $_xit
fi
}
_chruby-from-homebrew-installed() {
[ -r $_brew_prefix ] &> /dev/null
}
_ruby-build_installed() {
whence ruby-build &> /dev/null
}
_ruby-install-installed() {
whence ruby-install &> /dev/null
}
# Simple definition completer for ruby-build
if _ruby-build_installed; then
_ruby-build() { compadd $(ruby-build --definitions) }
compdef _ruby-build ruby-build
fi
_source_from_omz_settings() {
local _chruby_path
local _chruby_auto
zstyle -s :omz:plugins:chruby path _chruby_path
zstyle -s :omz:plugins:chruby auto _chruby_auto
if [[ -r ${_chruby_path} ]]; then if [[ -r ${_chruby_path} ]]; then
source ${_chruby_path} source ${_chruby_path}
@ -70,37 +15,58 @@ _source_from_omz_settings() {
fi fi
} }
_chruby_dirs() { _source-from-homebrew() {
chrubydirs=($HOME/.rubies/ $PREFIX/opt/rubies) (( $+commands[brew] )) || return 1
for dir in chrubydirs; do
if [[ -d $dir ]]; then local _brew_prefix
RUBIES+=$dir # check default brew prefix
if [[ -h /usr/local/opt/chruby ]];then
_brew_prefix="/usr/local/opt/chruby"
else
# ok , it is not default prefix
# this call to brew is expensive ( about 400 ms ), so at least let's make it only once
_brew_prefix=$(brew --prefix chruby)
fi
[[ -r "$_brew_prefix" ]] || return 1
source $_brew_prefix/share/chruby/chruby.sh
source $_brew_prefix/share/chruby/auto.sh
}
_load-chruby-dirs() {
local dir
for dir in "$HOME/.rubies" "$PREFIX/opt/rubies"; do
if [[ -d "$dir" ]]; then
RUBIES+=("$dir")
fi fi
done done
} }
if _homebrew-installed && _chruby-from-homebrew-installed ; then # Load chruby
source $_brew_prefix/share/chruby/chruby.sh if _source-from-omz-settings; then
source $_brew_prefix/share/chruby/auto.sh _load-chruby-dirs
_chruby_dirs
elif [[ -r "/usr/local/share/chruby/chruby.sh" ]] ; then elif [[ -r "/usr/local/share/chruby/chruby.sh" ]] ; then
source /usr/local/share/chruby/chruby.sh source /usr/local/share/chruby/chruby.sh
source /usr/local/share/chruby/auto.sh source /usr/local/share/chruby/auto.sh
_chruby_dirs _load-chruby-dirs
else elif _source-from-homebrew; then
_source_from_omz_settings _load-chruby-dirs
_chruby_dirs
fi fi
function ensure_chruby() { unfunction _source-from-homebrew _source-from-omz-settings _load-chruby-dirs
$(whence chruby)
}
## chruby utility functions and aliases
# rvm and rbenv plugins also provide this alias
alias rubies='chruby'
function current_ruby() { function current_ruby() {
local _ruby local ruby
_ruby="$(chruby |grep \* |tr -d '* ')" ruby="$(chruby | grep \* | tr -d '* ')"
if [[ $(chruby | grep -c \*) -eq 1 ]]; then if [[ $(chruby | grep -c \*) -eq 1 ]]; then
echo ${_ruby} echo ${ruby}
else else
echo "system" echo "system"
fi fi
@ -110,12 +76,19 @@ function chruby_prompt_info() {
echo "$(current_ruby)" echo "$(current_ruby)"
} }
# complete on installed rubies # Complete chruby command with installed rubies
_chruby() { _chruby() {
compadd $(chruby | tr -d '* ') compadd $(chruby | tr -d '* ')
local default_path='/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin' if PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" command ruby &>/dev/null; then
if PATH=${default_path} type ruby &> /dev/null; then
compadd system compadd system
fi fi
} }
compdef _chruby chruby compdef _chruby chruby
# Simple definition completer for ruby-build
if command ruby-build &> /dev/null; then
_ruby-build() { compadd $(ruby-build --definitions) }
compdef _ruby-build ruby-build
fi