Report abuse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
export GRAILS_VERSION="$(ls -lhr $HOME/.grails | egrep -i '1\.' | head -1 | gawk '{print $9 }')"

_get_domain_classes(){
	find ./grails-app/domain -iname *.groovy 2> /dev/null | tr \\n ' ' | sed -r 's/\.groovy//g' | sed -r 's/\.\/grails-app\/domain\///g' | tr '/' \.
}

_get_tests(){
	find ./test -iname *.groovy 2> /dev/null | sed -r 's/\.\/test\/integration\///g' | sed -r 's/\Tests.groovy//g' | tr '/' \.
}

_get_plugins(){
	cat $HOME/.grails/$GRAILS_VERSION/plugins/plugins-list.xml 2> /dev/null | grep \<plugin | gawk -F"name=" '{print $2}' | sed -r 's/\"//g' | sed -r 's/\/\{0,1\}\>//g'
}

_get_scripts(){
	for D in $SCRIPT_DIRS; do
		if [ -d $D ]
			then ls -1 $D/*.groovy 2> /dev/null | sed -r 's/(.*)\/(.*)\.groovy/\2/' | sed  -r 's/([A-Z])/-\1/g' | sed  -r '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 ~/.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

		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="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