55 |
56 | Welcome to Grails
57 |
58 |
59 | Congratulations, you have successfully started your first Grails application! At the moment
60 | this is the default page, feel free to modify it to either redirect to a controller or display
61 | whatever content you may choose. Below is a list of controllers that are currently deployed in
62 | this application, click on each to execute its default action:
63 |
64 |
65 |
66 |
Available Controllers:
67 |
68 |
69 | -
70 | ${c.fullName}
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/our-awesome-cms/grails-app/conf/application.yml:
--------------------------------------------------------------------------------
1 | reactor:
2 | dispatchers:
3 | default: myExecutor
4 | myExecutor:
5 | type: threadPoolExecutor
6 | size: 5
7 | backlog: 2048
8 |
9 | ---
10 | hibernate:
11 | cache:
12 | queries: false
13 | use_second_level_cache: true
14 | use_query_cache: false
15 | region.factory_class: 'org.hibernate.cache.ehcache.EhCacheRegionFactory'
16 |
17 | dataSource:
18 | pooled: true
19 | jmxExport: true
20 | driverClassName: org.h2.Driver
21 | username: sa
22 | password:
23 |
24 | environments:
25 | development:
26 | dataSource:
27 | dbCreate: create-drop
28 | url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
29 | test:
30 | dataSource:
31 | dbCreate: update
32 | url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
33 | production:
34 | dataSource:
35 | dbCreate: update
36 | url: jdbc:h2:./prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
37 | properties:
38 | jmxEnabled: true
39 | initialSize: 5
40 | maxActive: 50
41 | minIdle: 5
42 | maxIdle: 25
43 | maxWait: 10000
44 | maxAge: 600000
45 | timeBetweenEvictionRunsMillis: 5000
46 | minEvictableIdleTimeMillis: 60000
47 | validationQuery: SELECT 1
48 | validationQueryTimeout: 3
49 | validationInterval: 15000
50 | testOnBorrow: true
51 | testWhileIdle: true
52 | testOnReturn: false
53 | jdbcInterceptors: ConnectionState
54 | defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED
55 |
56 | ---
57 | ---
58 | grails:
59 | profile: web
60 | codegen:
61 | defaultPackage: our.awesome.cms
62 | spring:
63 | transactionManagement:
64 | proxies: false
65 | info:
66 | app:
67 | name: '@info.app.name@'
68 | version: '@info.app.version@'
69 | grailsVersion: '@info.app.grailsVersion@'
70 | spring:
71 |
72 | groovy:
73 | template:
74 | check-template-location: false
75 |
76 | ---
77 | grails:
78 | mime:
79 | disable:
80 | accept:
81 | header:
82 | userAgents:
83 | - Gecko
84 | - WebKit
85 | - Presto
86 | - Trident
87 | types:
88 | all: '*/*'
89 | atom: application/atom+xml
90 | css: text/css
91 | csv: text/csv
92 | form: application/x-www-form-urlencoded
93 | html:
94 | - text/html
95 | - application/xhtml+xml
96 | js: text/javascript
97 | json:
98 | - application/json
99 | - text/json
100 | multipartForm: multipart/form-data
101 | pdf: application/pdf
102 | rss: application/rss+xml
103 | text: text/plain
104 | hal:
105 | - application/hal+json
106 | - application/hal+xml
107 | xml:
108 | - text/xml
109 | - application/xml
110 | urlmapping:
111 | cache:
112 | maxsize: 1000
113 | controllers:
114 | defaultScope: singleton
115 | converters:
116 | encoding: UTF-8
117 | views:
118 | default:
119 | codec: html
120 | gsp:
121 | encoding: UTF-8
122 | htmlcodec: xml
123 | codecs:
124 | expression: html
125 | scriptlets: html
126 | taglib: none
127 | staticparts: none
128 | endpoints:
129 | jmx:
130 | unique-names: true
131 |
--------------------------------------------------------------------------------
/somewhere-publishing-plugin/grails-app/views/index.gsp:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
55 |
56 | Welcome to Grails
57 |
58 |
59 | Congratulations, you have successfully started your first Grails application! At the moment
60 | this is the default page, feel free to modify it to either redirect to a controller or display
61 | whatever content you may choose. Below is a list of controllers that are currently deployed in
62 | this application, click on each to execute its default action:
63 |
64 |
65 |
66 |
Available Controllers:
67 |
68 |
69 | -
70 | ${c.fullName}
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/our-awesome-cms/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # Attempt to set APP_HOME
46 | # Resolve links: $0 may be a link
47 | PRG="$0"
48 | # Need this for relative symlinks.
49 | while [ -h "$PRG" ] ; do
50 | ls=`ls -ld "$PRG"`
51 | link=`expr "$ls" : '.*-> \(.*\)$'`
52 | if expr "$link" : '/.*' > /dev/null; then
53 | PRG="$link"
54 | else
55 | PRG=`dirname "$PRG"`"/$link"
56 | fi
57 | done
58 | SAVED="`pwd`"
59 | cd "`dirname \"$PRG\"`/" >/dev/null
60 | APP_HOME="`pwd -P`"
61 | cd "$SAVED" >/dev/null
62 |
63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
64 |
65 | # Determine the Java command to use to start the JVM.
66 | if [ -n "$JAVA_HOME" ] ; then
67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
68 | # IBM's JDK on AIX uses strange locations for the executables
69 | JAVACMD="$JAVA_HOME/jre/sh/java"
70 | else
71 | JAVACMD="$JAVA_HOME/bin/java"
72 | fi
73 | if [ ! -x "$JAVACMD" ] ; then
74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
75 |
76 | Please set the JAVA_HOME variable in your environment to match the
77 | location of your Java installation."
78 | fi
79 | else
80 | JAVACMD="java"
81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
82 |
83 | Please set the JAVA_HOME variable in your environment to match the
84 | location of your Java installation."
85 | fi
86 |
87 | # Increase the maximum file descriptors if we can.
88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
89 | MAX_FD_LIMIT=`ulimit -H -n`
90 | if [ $? -eq 0 ] ; then
91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
92 | MAX_FD="$MAX_FD_LIMIT"
93 | fi
94 | ulimit -n $MAX_FD
95 | if [ $? -ne 0 ] ; then
96 | warn "Could not set maximum file descriptor limit: $MAX_FD"
97 | fi
98 | else
99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
100 | fi
101 | fi
102 |
103 | # For Darwin, add options to specify how the application appears in the dock
104 | if $darwin; then
105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
106 | fi
107 |
108 | # For Cygwin, switch paths to Windows format before running java
109 | if $cygwin ; then
110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
112 | JAVACMD=`cygpath --unix "$JAVACMD"`
113 |
114 | # We build the pattern for arguments to be converted via cygpath
115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
116 | SEP=""
117 | for dir in $ROOTDIRSRAW ; do
118 | ROOTDIRS="$ROOTDIRS$SEP$dir"
119 | SEP="|"
120 | done
121 | OURCYGPATTERN="(^($ROOTDIRS))"
122 | # Add a user-defined pattern to the cygpath arguments
123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
125 | fi
126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
127 | i=0
128 | for arg in "$@" ; do
129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
131 |
132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
134 | else
135 | eval `echo args$i`="\"$arg\""
136 | fi
137 | i=$((i+1))
138 | done
139 | case $i in
140 | (0) set -- ;;
141 | (1) set -- "$args0" ;;
142 | (2) set -- "$args0" "$args1" ;;
143 | (3) set -- "$args0" "$args1" "$args2" ;;
144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
150 | esac
151 | fi
152 |
153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154 | function splitJvmOpts() {
155 | JVM_OPTS=("$@")
156 | }
157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
159 |
160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
161 |
--------------------------------------------------------------------------------
/our-awesome-cms/src/test/groovy/our/awesome/cms/ArticleControllerSpec.groovy:
--------------------------------------------------------------------------------
1 | package our.awesome.cms
2 |
3 | import grails.test.mixin.*
4 | import spock.lang.*
5 |
6 | @TestFor(ArticleController)
7 | @Mock(Article)
8 | class ArticleControllerSpec extends Specification {
9 |
10 | def populateValidParams(params) {
11 | assert params != null
12 |
13 | // TODO: Populate valid properties like...
14 | //params["name"] = 'someValidName'
15 | assert false, "TODO: Provide a populateValidParams() implementation for this generated test suite"
16 | }
17 |
18 | void "Test the index action returns the correct model"() {
19 |
20 | when:"The index action is executed"
21 | controller.index()
22 |
23 | then:"The model is correct"
24 | !model.articleList
25 | model.articleCount == 0
26 | }
27 |
28 | void "Test the create action returns the correct model"() {
29 | when:"The create action is executed"
30 | controller.create()
31 |
32 | then:"The model is correctly created"
33 | model.article!= null
34 | }
35 |
36 | void "Test the save action correctly persists an instance"() {
37 |
38 | when:"The save action is executed with an invalid instance"
39 | request.contentType = FORM_CONTENT_TYPE
40 | request.method = 'POST'
41 | def article = new Article()
42 | article.validate()
43 | controller.save(article)
44 |
45 | then:"The create view is rendered again with the correct model"
46 | model.article!= null
47 | view == 'create'
48 |
49 | when:"The save action is executed with a valid instance"
50 | response.reset()
51 | populateValidParams(params)
52 | article = new Article(params)
53 |
54 | controller.save(article)
55 |
56 | then:"A redirect is issued to the show action"
57 | response.redirectedUrl == '/article/show/1'
58 | controller.flash.message != null
59 | Article.count() == 1
60 | }
61 |
62 | void "Test that the show action returns the correct model"() {
63 | when:"The show action is executed with a null domain"
64 | controller.show(null)
65 |
66 | then:"A 404 error is returned"
67 | response.status == 404
68 |
69 | when:"A domain instance is passed to the show action"
70 | populateValidParams(params)
71 | def article = new Article(params)
72 | controller.show(article)
73 |
74 | then:"A model is populated containing the domain instance"
75 | model.article == article
76 | }
77 |
78 | void "Test that the edit action returns the correct model"() {
79 | when:"The edit action is executed with a null domain"
80 | controller.edit(null)
81 |
82 | then:"A 404 error is returned"
83 | response.status == 404
84 |
85 | when:"A domain instance is passed to the edit action"
86 | populateValidParams(params)
87 | def article = new Article(params)
88 | controller.edit(article)
89 |
90 | then:"A model is populated containing the domain instance"
91 | model.article == article
92 | }
93 |
94 | void "Test the update action performs an update on a valid domain instance"() {
95 | when:"Update is called for a domain instance that doesn't exist"
96 | request.contentType = FORM_CONTENT_TYPE
97 | request.method = 'PUT'
98 | controller.update(null)
99 |
100 | then:"A 404 error is returned"
101 | response.redirectedUrl == '/article/index'
102 | flash.message != null
103 |
104 | when:"An invalid domain instance is passed to the update action"
105 | response.reset()
106 | def article = new Article()
107 | article.validate()
108 | controller.update(article)
109 |
110 | then:"The edit view is rendered again with the invalid instance"
111 | view == 'edit'
112 | model.article == article
113 |
114 | when:"A valid domain instance is passed to the update action"
115 | response.reset()
116 | populateValidParams(params)
117 | article = new Article(params).save(flush: true)
118 | controller.update(article)
119 |
120 | then:"A redirect is issued to the show action"
121 | article != null
122 | response.redirectedUrl == "/article/show/$article.id"
123 | flash.message != null
124 | }
125 |
126 | void "Test that the delete action deletes an instance if it exists"() {
127 | when:"The delete action is called for a null instance"
128 | request.contentType = FORM_CONTENT_TYPE
129 | request.method = 'DELETE'
130 | controller.delete(null)
131 |
132 | then:"A 404 is returned"
133 | response.redirectedUrl == '/article/index'
134 | flash.message != null
135 |
136 | when:"A domain instance is created"
137 | response.reset()
138 | populateValidParams(params)
139 | def article = new Article(params).save(flush: true)
140 |
141 | then:"It exists"
142 | Article.count() == 1
143 |
144 | when:"The domain instance is passed to the delete action"
145 | controller.delete(article)
146 |
147 | then:"The instance is deleted"
148 | Article.count() == 0
149 | response.redirectedUrl == '/article/index'
150 | flash.message != null
151 | }
152 | }
153 |
--------------------------------------------------------------------------------
/somewhere-publishing-plugin/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # Attempt to set APP_HOME
46 | # Resolve links: $0 may be a link
47 | PRG="$0"
48 | # Need this for relative symlinks.
49 | while [ -h "$PRG" ] ; do
50 | ls=`ls -ld "$PRG"`
51 | link=`expr "$ls" : '.*-> \(.*\)$'`
52 | if expr "$link" : '/.*' > /dev/null; then
53 | PRG="$link"
54 | else
55 | PRG=`dirname "$PRG"`"/$link"
56 | fi
57 | done
58 | SAVED="`pwd`"
59 | cd "`dirname \"$PRG\"`/" >/dev/null
60 | APP_HOME="`pwd -P`"
61 | cd "$SAVED" >/dev/null
62 |
63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
64 |
65 | # Determine the Java command to use to start the JVM.
66 | if [ -n "$JAVA_HOME" ] ; then
67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
68 | # IBM's JDK on AIX uses strange locations for the executables
69 | JAVACMD="$JAVA_HOME/jre/sh/java"
70 | else
71 | JAVACMD="$JAVA_HOME/bin/java"
72 | fi
73 | if [ ! -x "$JAVACMD" ] ; then
74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
75 |
76 | Please set the JAVA_HOME variable in your environment to match the
77 | location of your Java installation."
78 | fi
79 | else
80 | JAVACMD="java"
81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
82 |
83 | Please set the JAVA_HOME variable in your environment to match the
84 | location of your Java installation."
85 | fi
86 |
87 | # Increase the maximum file descriptors if we can.
88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
89 | MAX_FD_LIMIT=`ulimit -H -n`
90 | if [ $? -eq 0 ] ; then
91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
92 | MAX_FD="$MAX_FD_LIMIT"
93 | fi
94 | ulimit -n $MAX_FD
95 | if [ $? -ne 0 ] ; then
96 | warn "Could not set maximum file descriptor limit: $MAX_FD"
97 | fi
98 | else
99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
100 | fi
101 | fi
102 |
103 | # For Darwin, add options to specify how the application appears in the dock
104 | if $darwin; then
105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
106 | fi
107 |
108 | # For Cygwin, switch paths to Windows format before running java
109 | if $cygwin ; then
110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
112 | JAVACMD=`cygpath --unix "$JAVACMD"`
113 |
114 | # We build the pattern for arguments to be converted via cygpath
115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
116 | SEP=""
117 | for dir in $ROOTDIRSRAW ; do
118 | ROOTDIRS="$ROOTDIRS$SEP$dir"
119 | SEP="|"
120 | done
121 | OURCYGPATTERN="(^($ROOTDIRS))"
122 | # Add a user-defined pattern to the cygpath arguments
123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
125 | fi
126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
127 | i=0
128 | for arg in "$@" ; do
129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
131 |
132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
134 | else
135 | eval `echo args$i`="\"$arg\""
136 | fi
137 | i=$((i+1))
138 | done
139 | case $i in
140 | (0) set -- ;;
141 | (1) set -- "$args0" ;;
142 | (2) set -- "$args0" "$args1" ;;
143 | (3) set -- "$args0" "$args1" "$args2" ;;
144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
150 | esac
151 | fi
152 |
153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154 | function splitJvmOpts() {
155 | JVM_OPTS=("$@")
156 | }
157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
159 |
160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
161 |
--------------------------------------------------------------------------------
/our-awesome-cms/grails-app/assets/images/grails-cupsonly-logo-white.svg:
--------------------------------------------------------------------------------
1 |
2 |