Skip to content

Instantly share code, notes, and snippets.

@jspiewak
Created May 23, 2014 16:47
Show Gist options
  • Save jspiewak/3bc6fb0e581d40967f98 to your computer and use it in GitHub Desktop.
Save jspiewak/3bc6fb0e581d40967f98 to your computer and use it in GitHub Desktop.
Grails autocomplete
export GRAILS_VERSION="$(ls -lhr $HOME/.grails | egrep -i '1\.' | head -1 | awk '{print $9 }')"
sed_option="-E"
[ "$(uname)" == "Linux" ] && sed_option="-r"
_get_domain_classes(){
find ./grails-app/domain -iname *.groovy 2> /dev/null | tr \\n ' ' | sed 's/\.groovy//g' | sed 's/\.\/grails-app\/domain\///g' | tr '/' \.
}
_get_tests(){
find ./test -iname *.groovy 2> /dev/null | sed 's/\.\/test\/integration\///g' | sed 's/\Tests.groovy//g' | tr '/' \.
}
_get_plugins(){
cat $HOME/.grails/$GRAILS_VERSION/plugins/plugins-list.xml 2> /dev/null | grep \<plugin | awk -F"name=" '{print $2}' | sed 's/\"//g' | sed 's/\/\{0,1\}\>//g'
}
_get_scripts(){
for D in $SCRIPT_DIRS; do
if [ -d $D ]
then ls -1 $D/*.groovy 2> /dev/null | sed $sed_option 's/(.*)\/(.*)\.groovy/\2/' | sed $sed_option 's/([A-Z])/-\1/g' | sed $sed_option 's/^-//' | tr "[:upper:]" "[:lower:]"
fi
done | sort | uniq | grep -vE "^_"
}
_grails_comp(){
local cur prev opts base
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
if [ -r ./grails-app ]; then
SCRIPT_DIRS="$GRAILS_HOME/scripts ./scripts $HOME/.grails/scripts"
if [ -d plugins ]
then for PLUGIN_DIR in $(ls -d plugins/*/scripts 2> /dev/null); do
SCRIPT_DIRS="$SCRIPT_DIRS $PLUGIN_DIR"
done
fi
if [ -d 'target/plugins' ]
then for PLUGIN_DIR in $(ls -d target/plugins/*/scripts 2> /dev/null); do
SCRIPT_DIRS="$SCRIPT_DIRS $PLUGIN_DIR"
done
fi
opts=$(_get_scripts)
case "${prev}" in
generate-all)
local classes=$(_get_domain_classes)
COMPREPLY=( $(compgen -W "${classes}" -- ${cur}) )
return 0
;;
generate-views)
local classes=$(_get_domain_classes)
COMPREPLY=( $(compgen -W "${classes}" -- ${cur}) )
return 0
;;
generate-controller)
local classes=$(_get_domain_classes)
COMPREPLY=( $(compgen -W "${classes}" -- ${cur}) )
return 0
;;
test-app)
local test_classes=$(_get_tests)
COMPREPLY=( $(compgen -W "${test_classes}" -- ${cur}) )
return 0
;;
install-plugin)
local plugins=$(_get_plugins)
COMPREPLY=( $(compgen -W "${plugins}" -- ${cur}) )
return 0
;;
package-plugin)
COMPREPLY=( $(compgen -f) )
return 0
;;
plugin-info)
local plugins=$(opts)
COMPREPLY=( $(compgen -W "${plugins}" -- ${cur}) )
return 0
;;
help)
local opts=$(_get_scripts)
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
;;
*)
;;
esac
if [[ "${opts}" =~ "${prev}" ]]; then
COMPREPLY=( $(compgen -f) )
return 0
fi
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
return 0
else
opts="add-proxy bootstrap bug-report clean clear-proxy compile console create-app create-controller create-domain-class create-filters create-hibernate-cfg-xml create-integration-test create-plugin create-script create-service create-tag-lib create-unit-test dependency-report doc generate-all generate-controller generate-views help init install-dependency install-plugin install-templates integrate-with interactive list-plugin-updates list-plugins package package-plugin plugin-info release-plugin remove-proxy run-app run-script run-war schema-export set-proxy set-version shell stats test-app uninstall-plugin upgrade war"
#opts="create-app create-plugin help list-plugins package-plugin plugin-info set-proxy"
case "${prev}" in
create-app)
COMPREPLY=( $(compgen -f) )
return 0
;;
create-plugin)
COMPREPLY=( $(compgen -f) )
return 0
;;
package-plugin)
COMPREPLY=( $(compgen -f) )
return 0
;;
plugin-info)
local plugins=$(_get_plugins)
COMPREPLY=( $(compgen -W "${plugins}" -- ${cur}) )
return 0
;;
*)
;;
esac
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
return 0
fi
}
complete -F _grails_comp grails
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment