diff --git a/plugins/pow/pow.plugin.zsh b/plugins/pow/pow.plugin.zsh index 6b2a6f2be..a4c9adac2 100644 --- a/plugins/pow/pow.plugin.zsh +++ b/plugins/pow/pow.plugin.zsh @@ -1,10 +1,81 @@ # Thanks to Christopher Sexton -# https://gist.github.com/965032 -function kapow { - touch ~/.pow/$1/tmp/restart.txt - if [ $? -eq 0 ]; then - echo "$fg[yellow]Pow restarting $1...$reset_color" - fi +# https://gist.github.com/1019777 + +# Adds a kapow command that will restart an app +# +# $ kapow myapp +# +# Supports command completion. +# +# If you are not already using completion you might need to enable it with +# +# autoload -U compinit compinit +# +# Changes: +# +# Defaults to the current application, and will walk up the tree to find +# a config.ru file and restart the corresponding app +# +# Will Detect if a app does not exist in pow and print a (slightly) helpful +# error message + +rack_root_detect(){ + setopt chaselinks + local orgdir=$(pwd) + local basedir=$(pwd) + + while [[ $basedir != '/' ]]; do + test -e "$basedir/config.ru" && break + builtin cd ".." 2>/dev/null + basedir="$(pwd)" + done + + builtin cd $orgdir 2>/dev/null + [[ ${basedir} == "/" ]] && return 1 + echo $basedir } +kapow(){ + local vhost=$1 + [ ! -n "$vhost" ] && vhost=$(basename `rack_root_detect` | sed -E "s/.(com|net|org)//") + if [ ! -h ~/.pow/$vhost ] + then + echo "pow: This domain isn’t set up yet. Symlink your application to ${vhost} first." + return 1 + fi + + [ ! -d "~/.pow/${vhost}/tmp" ] && mkdir -p "~/.pow/$vhost/tmp" + touch ~/.pow/$vhost/tmp/restart.txt; + [ $? -eq 0 ] && echo "pow: restarting $vhost.dev" +} + +# The powinit command symlinks a dir to ~/.pow +# +# $ powinit /path/to/myapp +# +# powinit alone uses the working dir: +# +# $ powinit + +powinit(){ + local full_path=$1 + [ -n "$full_path" ] && full_path=$(echo $full_path(:A)) + [ ! -n "$full_path" ] && full_path=$(rack_root_detect) + if [ ! -n "$full_path" ] + then + echo "pow: Not a rack app" + return 1 + fi + local vhost=$(basename $full_path | sed -E "s/.(com|net|org)//") + if [ -h ~/.pow/$vhost ] + then + echo "pow: This domain is already set up. Remove the symlink in ~/.pow to reconfigure." + return 1 + fi + ln -s $full_path ~/.pow/$vhost + echo "pow: Application set up on http://$vhost.dev" +} compctl -W ~/.pow -/ kapow + +# View the standard out (puts) from any pow app +alias kaput="tail -f ~/Library/Logs/Pow/apps/*" \ No newline at end of file