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

parent 7b12fa97
...@@ -5,6 +5,7 @@ current Ruby version, and completion and a prompt function to display the Ruby v ...@@ -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) ...@@ -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
``` ```
# ## 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
zstyle -s :omz:plugins:chruby auto _chruby_auto || return 1
_homebrew-installed() { if [[ -r ${_chruby_path} ]]; then
whence brew &> /dev/null source ${_chruby_path}
_xit=$? fi
if [ $_xit -eq 0 ];then
# ok , we have brew installed if [[ -r ${_chruby_auto} ]]; then
# speculatively we check default brew prefix source ${_chruby_auto}
if [ -h /usr/local/opt/chruby ];then fi
}
_source-from-homebrew() {
(( $+commands[brew] )) || return 1
local _brew_prefix
# check default brew prefix
if [[ -h /usr/local/opt/chruby ]];then
_brew_prefix="/usr/local/opt/chruby" _brew_prefix="/usr/local/opt/chruby"
else else
# ok , it is not default prefix # ok , it is not default prefix
# this call to brew is expensive ( about 400 ms ), so at least let's make it only once # this call to brew is expensive ( about 400 ms ), so at least let's make it only once
_brew_prefix=$(brew --prefix chruby) _brew_prefix=$(brew --prefix chruby)
fi 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() { [[ -r "$_brew_prefix" ]] || return 1
local _chruby_path
local _chruby_auto
zstyle -s :omz:plugins:chruby path _chruby_path source $_brew_prefix/share/chruby/chruby.sh
zstyle -s :omz:plugins:chruby auto _chruby_auto source $_brew_prefix/share/chruby/auto.sh
if [[ -r ${_chruby_path} ]]; then
source ${_chruby_path}
fi
if [[ -r ${_chruby_auto} ]]; then
source ${_chruby_auto}
fi
} }
_chruby_dirs() { _load-chruby-dirs() {
chrubydirs=($HOME/.rubies/ $PREFIX/opt/rubies) local dir
for dir in chrubydirs; do for dir in "$HOME/.rubies" "$PREFIX/opt/rubies"; do
if [[ -d $dir ]]; then if [[ -d "$dir" ]]; then
RUBIES+=$dir 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() { ...@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment