Browse Source

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

Marc Cornellà 2 years ago
parent
commit
5c14474eb2
2 changed files with 71 additions and 97 deletions
  1. 2 1
      plugins/chruby/README.md
  2. 69 96
      plugins/chruby/chruby.plugin.zsh

+ 2 - 1
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
 ```

+ 69 - 96
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
 
-# rvm and rbenv plugins also provide this alias
-alias rubies='chruby'
+_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
 
-_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
+  if [[ -r ${_chruby_auto} ]]; then
+    source ${_chruby_auto}
+  fi
 }
 
-_chruby-from-homebrew-installed() {
-  [ -r $_brew_prefix ] &> /dev/null
-}
+_source-from-homebrew() {
+  (( $+commands[brew] )) || return 1
 
-_ruby-build_installed() {
-    whence ruby-build &> /dev/null
-}
+  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
 
-_ruby-install-installed() {
-    whence ruby-install &> /dev/null
-}
+  [[ -r "$_brew_prefix" ]] || return 1
 
-# 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
+  source $_brew_prefix/share/chruby/chruby.sh
+  source $_brew_prefix/share/chruby/auto.sh
 }
 
-_chruby_dirs() {
-    chrubydirs=($HOME/.rubies/ $PREFIX/opt/rubies)
-    for dir in chrubydirs; do
-        if [[ -d $dir ]]; then
-            RUBIES+=$dir
-        fi
-    done
+_load-chruby-dirs() {
+  local dir
+  for dir in "$HOME/.rubies" "$PREFIX/opt/rubies"; 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
+# 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
-    _chruby_dirs
-else
-    _source_from_omz_settings
-    _chruby_dirs
+  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
 
-function ensure_chruby() {
-    $(whence chruby)
-}
+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'
 
 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