Created
May 23, 2014 16:47
-
-
Save jspiewak/3bc6fb0e581d40967f98 to your computer and use it in GitHub Desktop.
Grails autocomplete
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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