diff --git a/plugins/chruby/README.md b/plugins/chruby/README.md index d373006a5..19eb15a8d 100644 --- a/plugins/chruby/README.md +++ b/plugins/chruby/README.md @@ -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. To use it, add `chruby` to the plugins array in your zshrc file: + ```zsh plugins=(... chruby) ``` @@ -14,7 +15,7 @@ plugins=(... chruby) If you'd prefer to specify an explicit path to load chruby from you can set variables like so: -``` +```zsh zstyle :omz:plugins:chruby path /local/path/to/chruby.sh zstyle :omz:plugins:chruby auto /local/path/to/auto.sh ``` diff --git a/plugins/chruby/chruby.plugin.zsh b/plugins/chruby/chruby.plugin.zsh index 32f0525aa..61ded3b73 100644 --- a/plugins/chruby/chruby.plugin.zsh +++ b/plugins/chruby/chruby.plugin.zsh @@ -1,121 +1,94 @@ -# -# 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 +## load chruby from different locations + +_source-from-omz-settings() { + 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 + + if [[ -r ${_chruby_path} ]]; then + source ${_chruby_path} + fi + + if [[ -r ${_chruby_auto} ]]; then + source ${_chruby_auto} + 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" + 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 + done +} + +# Load chruby +if _source-from-omz-settings; then + _load-chruby-dirs +elif [[ -r "/usr/local/share/chruby/chruby.sh" ]] ; then + source /usr/local/share/chruby/chruby.sh + source /usr/local/share/chruby/auto.sh + _load-chruby-dirs +elif _source-from-homebrew; then + _load-chruby-dirs +fi + +unfunction _source-from-homebrew _source-from-omz-settings _load-chruby-dirs + + +## chruby utility functions and aliases # rvm and rbenv plugins also provide this alias alias rubies='chruby' - -_homebrew-installed() { - 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 - source ${_chruby_path} - fi - - if [[ -r ${_chruby_auto} ]]; then - source ${_chruby_auto} - fi -} - -_chruby_dirs() { - chrubydirs=($HOME/.rubies/ $PREFIX/opt/rubies) - for dir in chrubydirs; do - if [[ -d $dir ]]; then - RUBIES+=$dir - fi - done -} - -if _homebrew-installed && _chruby-from-homebrew-installed ; then - source $_brew_prefix/share/chruby/chruby.sh - source $_brew_prefix/share/chruby/auto.sh - _chruby_dirs -elif [[ -r "/usr/local/share/chruby/chruby.sh" ]] ; then - source /usr/local/share/chruby/chruby.sh - source /usr/local/share/chruby/auto.sh - _chruby_dirs -else - _source_from_omz_settings - _chruby_dirs -fi - -function ensure_chruby() { - $(whence chruby) -} - function current_ruby() { - local _ruby - _ruby="$(chruby |grep \* |tr -d '* ')" - if [[ $(chruby |grep -c \*) -eq 1 ]]; then - echo ${_ruby} - else - echo "system" - fi + local ruby + ruby="$(chruby | grep \* | tr -d '* ')" + if [[ $(chruby | grep -c \*) -eq 1 ]]; then + echo ${ruby} + else + echo "system" + fi } function chruby_prompt_info() { - echo "$(current_ruby)" + echo "$(current_ruby)" } -# complete on installed rubies +# Complete chruby command with installed rubies _chruby() { - compadd $(chruby | tr -d '* ') - local default_path='/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin' - if PATH=${default_path} type ruby &> /dev/null; then - compadd system - fi + compadd $(chruby | tr -d '* ') + if PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" command ruby &>/dev/null; then + compadd system + fi } + 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