diff --git a/.gitignore b/.gitignore index a273b97..73b8c3f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ *.log /target +/build +/.gradle grails-cache-headers-*.zip grails-cache-headers-*.zip.sha1 plugin.xml diff --git a/license.txt b/LICENSE similarity index 100% rename from license.txt rename to LICENSE diff --git a/application.properties b/application.properties deleted file mode 100644 index b1c0351..0000000 --- a/application.properties +++ /dev/null @@ -1,2 +0,0 @@ -app.grails.version=2.3.8 -app.name=CacheHeaders diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..1d26bad --- /dev/null +++ b/build.gradle @@ -0,0 +1,75 @@ +buildscript { + ext { + grailsVersion = project.grailsVersion + } + repositories { + mavenLocal() + maven { url "https://repo.grails.org/grails/core" } + } + dependencies { + classpath "org.grails:grails-gradle-plugin:$grailsVersion" + } +} + +plugins { + id "io.spring.dependency-management" version "0.5.1.RELEASE" + id "com.jfrog.bintray" version "1.1" +} + +version "0.1-SNAPSHOT" +group "org.grails.plugins" + +apply plugin: 'maven-publish' +apply plugin: 'eclipse' +apply plugin: 'idea' +apply plugin: "spring-boot" +apply plugin: "org.grails.grails-plugin" +apply plugin: "org.grails.grails-gsp" +// Used for publishing to central repository, remove if not needed +apply from:'https://raw.githubusercontent.com/grails/grails-profile-repository/master/profiles/plugin/templates/grailsCentralPublishing.gradle' +apply from:'https://raw.githubusercontent.com/grails/grails-profile-repository/master/profiles/plugin/templates/bintrayPublishing.gradle' + +ext { + grailsVersion = project.grailsVersion + gradleWrapperVersion = project.gradleWrapperVersion +} + +sourceCompatibility = 1.7 +targetCompatibility = 1.7 + + +repositories { + mavenLocal() + mavenCentral() + maven { url "https://repo.grails.org/grails/core" } +} + +dependencyManagement { + imports { + mavenBom "org.grails:grails-bom:$grailsVersion" + } + applyMavenExclusions false +} + +dependencies { + provided 'org.springframework.boot:spring-boot-starter-logging' + provided "org.springframework.boot:spring-boot-starter-actuator" + provided "org.springframework.boot:spring-boot-autoconfigure" + provided "org.springframework.boot:spring-boot-starter-tomcat" + + provided "org.grails:grails-web-boot" + provided "org.grails:grails-dependencies" + provided 'javax.servlet:javax.servlet-api:3.1.0' + + testCompile "org.grails:grails-plugin-testing" + + console "org.grails:grails-console" +} + +task wrapper(type: Wrapper) { + gradleVersion = gradleWrapperVersion +} + +jar { + exclude "*TetsController**" +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..15c849e --- /dev/null +++ b/gradle.properties @@ -0,0 +1,2 @@ +grailsVersion=3.0.3.BUILD-SNAPSHOT +gradleWrapperVersion=2.3 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..c97a8bd Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..2bdcf31 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Feb 04 17:05:29 CST 2015 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.3-bin.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..91a7e26 --- /dev/null +++ b/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..8a0b282 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy deleted file mode 100644 index 68774c3..0000000 --- a/grails-app/conf/BuildConfig.groovy +++ /dev/null @@ -1,25 +0,0 @@ -if(System.getenv('TRAVIS_BRANCH')) { - grails.project.repos.grailsCentral.username = System.getenv("GRAILS_CENTRAL_USERNAME") - grails.project.repos.grailsCentral.password = System.getenv("GRAILS_CENTRAL_PASSWORD") -} - -grails.project.work.dir = 'target' - -grails.project.dependency.resolver = "maven" -grails.project.dependency.resolution = { - - inherits 'global' - log 'warn' - - repositories { - grailsCentral() - mavenLocal() - mavenCentral() - } - - plugins { - build ':release:3.0.1', ':rest-client-builder:2.0.1', { - export = false - } - } -} diff --git a/grails-app/conf/application.yml b/grails-app/conf/application.yml new file mode 100644 index 0000000..0135d84 --- /dev/null +++ b/grails-app/conf/application.yml @@ -0,0 +1,11 @@ +--- +grails: + profile: web-plugin + codegen: + defaultPackage: cache.headers +spring: + groovy: + template: + check-template-location: false + + diff --git a/grails-app/controllers/com/grailsrocks/cacheheaders/TestController.groovy b/grails-app/controllers/com/grailsrocks/cacheheaders/TestController.groovy index 2f8f11c..d2951fa 100644 --- a/grails-app/controllers/com/grailsrocks/cacheheaders/TestController.groovy +++ b/grails-app/controllers/com/grailsrocks/cacheheaders/TestController.groovy @@ -1,6 +1,8 @@ package com.grailsrocks.cacheheaders -class TestController { +import grails.plugins.cacheheaders.* + +class TestController implements CacheHeadersTrait { def presetTest1() { cache "presetDeny" diff --git a/grails-app/init/grails/plugins/cacheheaders/Application.groovy b/grails-app/init/grails/plugins/cacheheaders/Application.groovy new file mode 100644 index 0000000..cc1623b --- /dev/null +++ b/grails-app/init/grails/plugins/cacheheaders/Application.groovy @@ -0,0 +1,10 @@ +package cache.headers + +import grails.boot.GrailsApp +import grails.boot.config.GrailsAutoConfiguration + +class Application extends GrailsAutoConfiguration { + static void main(String[] args) { + GrailsApp.run(Application, args) + } +} \ No newline at end of file diff --git a/grails-app/services/com/grailsrocks/cacheheaders/CacheHeadersService.groovy b/grails-app/services/grails/plugins/cacheheaders/CacheHeadersService.groovy similarity index 98% rename from grails-app/services/com/grailsrocks/cacheheaders/CacheHeadersService.groovy rename to grails-app/services/grails/plugins/cacheheaders/CacheHeadersService.groovy index e526488..20b5183 100644 --- a/grails-app/services/com/grailsrocks/cacheheaders/CacheHeadersService.groovy +++ b/grails-app/services/grails/plugins/cacheheaders/CacheHeadersService.groovy @@ -1,6 +1,7 @@ -package com.grailsrocks.cacheheaders +package grails.plugins.cacheheaders import java.text.SimpleDateFormat +import javax.servlet.http.* class CacheHeadersService { diff --git a/grailsw b/grailsw deleted file mode 100755 index be8f8aa..0000000 --- a/grailsw +++ /dev/null @@ -1,351 +0,0 @@ -############################################################################## -## ## -## Grails JVM Bootstrap for UN*X ## -## ## -############################################################################## - -PROGNAME=`basename "$0"` -DIRNAME=`dirname "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that -MAX_FD="maximum" - -warn() { - echo "${PROGNAME}: $*" -} - -die() { - warn "$*" - exit 1 -} - -earlyInit() { - return -} -lateInit() { - return -} - -GROOVY_STARTUP=~/.groovy/startup -if [ -r "$GROOVY_STARTUP" ]; then - . "$GROOVY_STARTUP" -fi - -earlyInit - -# OS specific support (must be 'true' or 'false'). -cygwin=false; -darwin=false; -mingw=false; -case "`uname`" in - CYGWIN*) - cygwin=true - ;; - - Darwin*) - darwin=true - ;; - - MINGW*) - mingw=true - ;; -esac - -# Attempt to set JAVA_HOME if it's not already set -if [ -z "$JAVA_HOME" ]; then - - # Set JAVA_HOME for Darwin - if $darwin; then - - [ -z "$JAVA_HOME" -a -d "/Library/Java/Home" ] && - export JAVA_HOME="/Library/Java/Home" - - [ -z "$JAVA_HOME" -a -d "/System/Library/Frameworks/JavaVM.framework/Home" ] && - export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home" - - fi - -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$GRAILS_HOME" ] && - GRAILS_HOME=`cygpath --unix "$GRAILS_HOME"` - [ -n "$JAVACMD" ] && - JAVACMD=`cygpath --unix "$JAVACMD"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CP" ] && - CP=`cygpath --path --unix "$CP"` -fi - -# Remove possible trailing slash (after possible cygwin correction) -GRAILS_HOME=`echo $GRAILS_HOME | sed -e 's|/$||g'` - -# Locate GRAILS_HOME if not it is not set -if [ -z "$GRAILS_HOME" -o ! -d "$GRAILS_HOME" ] ; then - # resolve links - $0 may be a link to groovy's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi - done - - SAVED="`pwd`" - cd "`dirname \"$PRG\"`/.." - GRAILS_HOME="`pwd -P`" - cd "$SAVED" -fi - -# Warn the user if JAVA_HOME and/or GRAILS_HOME are not set. -if [ -z "$JAVA_HOME" ] ; then - die "JAVA_HOME environment variable is not set" -elif [ ! -d "$JAVA_HOME" ] ; then - die "JAVA_HOME is not a directory: $JAVA_HOME" -fi - -if [ -z "$GRAILS_HOME" ] ; then - warn "GRAILS_HOME environment variable is not set" -fi - -if [ ! -d "$GRAILS_HOME" ] ; then - die "GRAILS_HOME is not a directory: $GRAILS_HOME" -fi - -# Use default groovy-conf config -if [ -z "$STARTER_CONF" ]; then - STARTER_CONF="$GRAILS_HOME/conf/groovy-starter.conf" -fi -STARTER_CLASSPATH="wrapper/grails-wrapper-runtime-2.3.8.jar:wrapper:." - -# Allow access to Cocoa classes on OS X -if $darwin; then - STARTER_CLASSPATH="$STARTER_CLASSPATH:/System/Library/Java/Support" -fi - -# Create the final classpath -# Setting a classpath using the -cp or -classpath option means not to use -# the global classpath. Groovy behaves then the same as the java -# interpreter -if [ -n "$CP" ] ; then - CP="$CP" -elif [ -n "$CLASSPATH" ] ; then - CP="$CLASSPATH" -fi - -# Determine the Java command to use to start the JVM -if [ -z "$JAVACMD" ]; then - if [ -n "$JAVA_HOME" ]; then - if [ -x "$JAVA_HOME/jre/sh/java" ]; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="java" - fi -fi -if [ ! -x "$JAVACMD" ]; then - die "JAVA_HOME is not defined correctly; can not execute: $JAVACMD" -fi - -# Increase the maximum file descriptors if we can -if [ "$cygwin" = "false" ]; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ "$MAX_FD_LIMIT" != "unlimited" ]; then - if [ $? -eq 0 ]; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ]; then - # use the businessSystem max - MAX_FD="$MAX_FD_LIMIT" - fi - - ulimit -n $MAX_FD - if [ $? -ne 0 ]; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query businessSystem maximum file descriptor limit: $MAX_FD_LIMIT" - fi - fi -fi - -# Fix the cygwin agent issue -AGENT_GRAILS_HOME=$GRAILS_HOME -if $cygwin ; then - [ -n "$GRAILS_HOME" ] && - AGENT_GRAILS_HOME=`cygpath --windows "$GRAILS_HOME"` -fi - -if $mingw ; then - # Converts GRAILS_HOME path to Windows syntax - [ -n "$GRAILS_HOME" ] && - AGENT_GRAILS_HOME=`cmd //C echo "$GRAILS_HOME"` -fi - -if [ -z "$GRAILS_AGENT_CACHE_DIR" ]; then - GRAILS_AGENT_CACHE_DIR=~/.grails/2.3.8/ -fi -SPRINGLOADED_PARAMS=profile=grails\;cacheDir=$GRAILS_AGENT_CACHE_DIR -if [ ! -d "$GRAILS_AGENT_CACHE_DIR" ]; then - mkdir -p "$GRAILS_AGENT_CACHE_DIR" -fi - -# Process JVM args -AGENT_STRING="-javaagent:wrapper/springloaded-1.1.5.RELEASE.jar -noverify -Dspringloaded.synchronize=true -Djdk.reflect.allowGetCallerClass=true -Dspringloaded=$SPRINGLOADED_PARAMS" -CMD_LINE_ARGS="" -DISABLE_RELOADING=true - -while true; do - if [ "$1" = "-cp" ] || [ "$1" = "-classpath" ]; then - CP=$2 - shift 2 - break - fi - - if [ "$1" = "-reloading" ]; then - AGENT=$AGENT_STRING - DISABLE_RELOADING=false - shift - break - fi - - if [ "$1" = "-noreloading" ]; then - DISABLE_RELOADING=true - shift - break - fi - - if [ "$1" = "-debug" ]; then - JAVA_OPTS="$JAVA_OPTS -Xdebug -Xnoagent -Dgrails.full.stacktrace=true -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005" - shift - break - fi - - if [ "$1" != -* ]; then - break - fi - - CMD_LINE_ARGS="$CMD_LINE_ARGS $1" - shift -done - -# Enable agent-based reloading for the 'run-app' command. -if ! $DISABLE_RELOADING; then - for a in "$@"; do - if [ "$a" = "run-app" ]; then - AGENT=$AGENT_STRING - fi - done - - if [ $# = 0 ]; then - AGENT=$AGENT_STRING - fi -fi - -ARGUMENTS="$CMD_LINE_ARGS $@" - -# Setup Profiler -useprofiler=false -if [ "x$PROFILER" != "x" ]; then - if [ -r "$PROFILER" ]; then - . $PROFILER - useprofiler=true - else - die "Profiler file not found: $PROFILER" - fi -fi - -# For Darwin, use classes.jar for TOOLS_JAR -TOOLS_JAR="$JAVA_HOME/lib/tools.jar" -if $darwin; then - JAVA_OPTS="-Xdock:name=Grails -Xdock:icon=$GRAILS_HOME/media/icons/grails.icns $JAVA_OPTS" -# TOOLS_JAR="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Classes/classes.jar" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - GRAILS_HOME=`cygpath --path --mixed "$GRAILS_HOME"` - JAVA_HOME=`cygpath --path --mixed "$JAVA_HOME"` - STARTER_CONF=`cygpath --path --mixed "$STARTER_CONF"` - if [ "x$CP" != "x" ] ; then - CP=`cygpath --path --mixed "$CP"` - fi - TOOLS_JAR=`cygpath --path --mixed "$TOOLS_JAR"` - STARTER_CLASSPATH=`cygpath --path --mixed "$STARTER_CLASSPATH"` - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GROOVY_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GROOVY_CYGPATTERN)" - fi - # Now convert the arguments - ARGUMENTS="" - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - if [ $CHECK -ne 0 ] ; then - convArg=`cygpath --path --ignore --mixed "$arg"` - else - convArg=$arg - fi - ARGUMENTS="$ARGUMENTS $convArg" - done -fi - -STARTER_MAIN_CLASS=org.grails.wrapper.GrailsWrapper - -lateInit - -startGrails() { - CLASS=$1 - shift - if [ -n "$GRAILS_OPTS" ] - then - GRAILS_OPTS="$GRAILS_OPTS" - else - GRAILS_OPTS="-server -Xmx768M -Xms64M -XX:PermSize=32m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8" - fi - JAVA_OPTS="$GRAILS_OPTS $JAVA_OPTS $AGENT" - # Start the Profiler or the JVM - if $useprofiler; then - runProfiler - else - if [ $# -eq 0 ] ; then # no argument given - exec "$JAVACMD" $JAVA_OPTS \ - -classpath "$STARTER_CLASSPATH" \ - -Dgrails.home="$GRAILS_HOME" \ - -Dtools.jar="$TOOLS_JAR" \ - -Djava.net.preferIPv4Stack=true \ - $STARTER_MAIN_CLASS \ - --main $CLASS \ - --conf "$STARTER_CONF" \ - --classpath "$CP" - else - exec "$JAVACMD" $JAVA_OPTS \ - -classpath "$STARTER_CLASSPATH" \ - -Dgrails.home="$GRAILS_HOME" \ - -Dtools.jar="$TOOLS_JAR" \ - -Djava.net.preferIPv4Stack=true \ - $STARTER_MAIN_CLASS \ - --main $CLASS \ - --conf "$STARTER_CONF" \ - --classpath "$CP" \ - "${ARGUMENTS}" - fi - fi -} - -startGrails $STARTER_MAIN_CLASS "$@" diff --git a/grailsw.bat b/grailsw.bat deleted file mode 100644 index 02e8b51..0000000 --- a/grailsw.bat +++ /dev/null @@ -1,176 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem ## -@rem Grails JVM Bootstrap for Windows ## -@rem ## -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set CLASS=org.grails.wrapper.GrailsWrapper - -if exist "%USERPROFILE%/.groovy/preinit.bat" call "%USERPROFILE%/.groovy/preinit.bat" - -@rem Determine the command interpreter to execute the "CD" later -set COMMAND_COM="cmd.exe" -if exist "%SystemRoot%\system32\cmd.exe" set COMMAND_COM="%SystemRoot%\system32\cmd.exe" -if exist "%SystemRoot%\command.com" set COMMAND_COM="%SystemRoot%\command.com" - -@rem Use explicit find.exe to prevent cygwin and others find.exe from being used -set FIND_EXE="find.exe" -if exist "%SystemRoot%\system32\find.exe" set FIND_EXE="%SystemRoot%\system32\find.exe" -if exist "%SystemRoot%\command\find.exe" set FIND_EXE="%SystemRoot%\command\find.exe" - -:check_JAVA_HOME -@rem Make sure we have a valid JAVA_HOME -if not "%JAVA_HOME%" == "" goto have_JAVA_HOME - -echo. -echo ERROR: Environment variable JAVA_HOME has not been set. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. -echo. -goto end - -:have_JAVA_HOME -@rem Remove trailing slash from JAVA_HOME if found -if "%JAVA_HOME:~-1%"=="\" SET JAVA_HOME=%JAVA_HOME:~0,-1% - -@rem Validate JAVA_HOME -%COMMAND_COM% /C DIR "%JAVA_HOME%" 2>&1 | %FIND_EXE% /I /C "%JAVA_HOME%" >nul -if not errorlevel 1 goto check_GRAILS_HOME - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. -echo. -goto end - -:check_GRAILS_HOME -@rem Define GRAILS_HOME if not set -if "%GRAILS_HOME%" == "" set GRAILS_HOME=%DIRNAME%.. - -@rem Remove trailing slash from GRAILS_HOME if found -if "%GRAILS_HOME:~-1%"=="\" SET GRAILS_HOME=%GRAILS_HOME:~0,-1% - -:init - -for %%x in ("%HOMEPATH%") do set SHORTHOME=%%~fsx -if "x%GRAILS_AGENT_CACHE_DIR%" == "x" set GRAILS_AGENT_CACHE_DIR=%SHORTHOME%/.grails/2.3.8/ -set SPRINGLOADED_PARAMS="profile=grails;cacheDir=%GRAILS_AGENT_CACHE_DIR%" -if not exist "%GRAILS_AGENT_CACHE_DIR%" mkdir "%GRAILS_AGENT_CACHE_DIR%" - -set AGENT_STRING=-javaagent:wrapper/springloaded-1.1.5.RELEASE.jar -noverify -Dspringloaded.synchronize=true -Djdk.reflect.allowGetCallerClass=true -Dspringloaded=\"%SPRINGLOADED_PARAMS%\" -set DISABLE_RELOADING= -if "%GRAILS_OPTS%" == "" set GRAILS_OPTS=-server -Xmx768M -Xms64M -XX:PermSize=32m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8 - -@rem Get command-line arguments, handling Windows variants -if "%@eval[2+2]" == "4" goto 4NT_args - -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set CP= -set INTERACTIVE=true - -:win9xME_args_slurp -if "x%~1" == "x" goto execute -set CURR_ARG=%~1 -if "%CURR_ARG:~0,2%" == "-D" ( - set CMD_LINE_ARGS=%CMD_LINE_ARGS% %~1=%~2 - shift - shift - goto win9xME_args_slurp -) -if "x%~1" == "x-cp" ( - set CP=%~2 - shift - shift - goto win9xME_args_slurp -) -if "x%~1" == "x-debug" ( - set JAVA_OPTS=%JAVA_OPTS% -Xdebug -Xnoagent -Dgrails.full.stacktrace=true -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 - shift - goto win9xME_args_slurp -) -if "x%~1" == "x-classpath" ( - set CP=%~2 - shift - shift - goto win9xME_args_slurp -) -if "x%~1" == "x-reloading" ( - set AGENT=%AGENT_STRING% - shift - goto win9xME_args_slurp -) -if "x%~1" == "xrun-app" ( - set AGENT=%AGENT_STRING% - set INTERACTIVE= - set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 - shift - goto win9xME_args_slurp -) -if "x%~1" == "x-noreloading" ( - set DISABLE_RELOADING=true - shift - goto win9xME_args_slurp -) -set INTERACTIVE= -set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 -shift -goto win9xME_args_slurp - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line -set STARTER_CLASSPATH=wrapper/grails-wrapper-runtime-2.3.8.jar;wrapper;. - -if exist "%USERPROFILE%/.groovy/init.bat" call "%USERPROFILE%/.groovy/init.bat" - -@rem Setting a classpath using the -cp or -classpath option means not to use -@rem the global classpath. Groovy behaves then the same as the java interpreter - -if "x" == "x%CLASSPATH%" goto after_classpath -set CP=%CP%;%CLASSPATH% -:after_classpath - -if "x%DISABLE_RELOADING%" == "xtrue" ( - set AGENT= -) else ( - if "x%INTERACTIVE%" == "xtrue" ( - set AGENT=%AGENT_STRING% - ) -) - -set STARTER_MAIN_CLASS=org.grails.wrapper.GrailsWrapper -set STARTER_CONF=%GRAILS_HOME%\conf\groovy-starter.conf - -set JAVA_EXE=%JAVA_HOME%\bin\java.exe -set TOOLS_JAR=%JAVA_HOME%\lib\tools.jar - -set JAVA_OPTS=%GRAILS_OPTS% %JAVA_OPTS% %AGENT% - -set JAVA_OPTS=%JAVA_OPTS% -Dprogram.name="%PROGNAME%" -set JAVA_OPTS=%JAVA_OPTS% -Dgrails.home="%GRAILS_HOME%" -set JAVA_OPTS=%JAVA_OPTS% -Dgrails.version=2.3.8 -set JAVA_OPTS=%JAVA_OPTS% -Dbase.dir=. -set JAVA_OPTS=%JAVA_OPTS% -Dtools.jar="%TOOLS_JAR%" -set JAVA_OPTS=%JAVA_OPTS% -Dgroovy.starter.conf="%STARTER_CONF%" - -if exist "%USERPROFILE%/.groovy/postinit.bat" call "%USERPROFILE%/.groovy/postinit.bat" - -@rem Execute Grails -CALL "%JAVA_EXE%" %JAVA_OPTS% -classpath "%STARTER_CLASSPATH%" %STARTER_MAIN_CLASS% --main %CLASS% --conf "%STARTER_CONF%" --classpath "%CP%" "%CMD_LINE_ARGS%" -:end -@rem End local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" endlocal - -@rem Optional pause the batch file -if "%GROOVY_BATCH_PAUSE%" == "on" pause diff --git a/test/integration/cacheheaders/CacheMethodsTests.groovy b/src/integration-test/groovy/cacheheaders/CacheMethodsTests.groovy similarity index 89% rename from test/integration/cacheheaders/CacheMethodsTests.groovy rename to src/integration-test/groovy/cacheheaders/CacheMethodsTests.groovy index 3316fb1..83af12b 100644 --- a/test/integration/cacheheaders/CacheMethodsTests.groovy +++ b/src/integration-test/groovy/cacheheaders/CacheMethodsTests.groovy @@ -8,14 +8,26 @@ import grails.test.mixin.* import org.junit.* import test.* import static org.junit.Assert.* +import grails.util.* +import org.springframework.beans.factory.annotation.* +import grails.plugins.cacheheaders.* @TestMixin(IntegrationTestMixin) class CacheMethodsTests { private static final String RFC1123_DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss zzz" // Always GMT + private TestController con = new TestController() + @Autowired + CacheHeadersService cacheHeadersService + + void setUp() { + GrailsWebMockUtil.bindMockWebRequest() + con.cacheHeadersService = cacheHeadersService + } + void testPresetCanTurnCachingOff() { grails.util.Holders.config.cache.headers.presets.presetDeny = false diff --git a/CacheHeadersGrailsPlugin.groovy b/src/main/groovy/grails/plugins/cacheheaders/CacheHeadersGrailsPlugin.groovy similarity index 51% rename from CacheHeadersGrailsPlugin.groovy rename to src/main/groovy/grails/plugins/cacheheaders/CacheHeadersGrailsPlugin.groovy index f68c8e2..ea537d7 100644 --- a/CacheHeadersGrailsPlugin.groovy +++ b/src/main/groovy/grails/plugins/cacheheaders/CacheHeadersGrailsPlugin.groovy @@ -1,9 +1,16 @@ -class CacheHeadersGrailsPlugin { - def version = "1.1.8-SNAPSHOT" - def grailsVersion = "2.0 > *" +package grails.plugins.cacheheaders + +import grails.plugins.* +import groovy.util.logging.* +import groovy.transform.* +import grails.core.* + +@Commons +class CacheHeadersGrailsPlugin extends Plugin { + def grailsVersion = "3.0 > *" def observe = ['controllers'] def pluginExcludes = [ - "grails-app/controllers/**", + "**/TestController**", "src/docs/**" ] def author = "Graeme Rocher" @@ -16,24 +23,17 @@ class CacheHeadersGrailsPlugin { def license = "APACHE" def documentation = "http://grails.org/plugin/cache-headers" - def doWithDynamicMethods = { ctx -> - addCacheMethods(application, log) - } - - def doWithApplicationContext = { ctx -> - reloadConfig(application, ctx.cacheHeadersService, log) - } - def onChange = { event -> - addCacheMethods(event.application, log) + void doWithApplicationContext() { + reloadConfig(grailsApplication, applicationContext.cacheHeadersService) } - def onConfigChange = { event -> + void onConfigChange(Map event) { // Config change might mean that the caching has been turned on/off - reloadConfig(event.application, event.application.mainContext.cacheHeadersService, log) + reloadConfig(event.application, event.application.mainContext.cacheHeadersService) } - private void reloadConfig(application, svc, log) { + private void reloadConfig(application, svc) { def conf = application.config.cache.headers def cacheSetting = conf.enabled svc.enabled = ((cacheSetting instanceof String) || (cacheSetting instanceof Boolean)) ? Boolean.valueOf(cacheSetting.toString()) : true @@ -42,25 +42,4 @@ class CacheHeadersGrailsPlugin { log.debug "Caching presets declared: ${svc.presets}" } - private void addCacheMethods(application, log) { - - def svc = application.mainContext.cacheHeadersService - - for (controllerClass in application.controllerClasses) { - - log.debug "Adding cache methods to ${controllerClass.clazz}" - - def mc = controllerClass.metaClass - - mc.cache = { boolean allow -> svc.cache(delegate.response, allow) } - - mc.cache << { String preset -> svc.cache(delegate.response, preset) } - - mc.cache << { Map args -> svc.cache(delegate.response, args) } - - mc.withCacheHeaders = { Closure c -> svc.withCacheHeaders(delegate, c) } - - mc.lastModified = { dateOrLong -> svc.lastModified(delegate.response, dateOrLong) } - } - } } diff --git a/src/main/groovy/grails/plugins/cacheheaders/CacheHeadersTrait.groovy b/src/main/groovy/grails/plugins/cacheheaders/CacheHeadersTrait.groovy new file mode 100644 index 0000000..cdad949 --- /dev/null +++ b/src/main/groovy/grails/plugins/cacheheaders/CacheHeadersTrait.groovy @@ -0,0 +1,32 @@ +package grails.plugins.cacheheaders + +import org.springframework.beans.factory.annotation.* +import grails.web.api.* +import groovy.transform.* + +@CompileStatic +trait CacheHeadersTrait extends ServletAttributes { + + @Autowired + CacheHeadersService cacheHeadersService + + + void cache( boolean allow ) { + cacheHeadersService.cache(response, allow) + } + + void cache( String preset ){ + cacheHeadersService.cache(response, preset) + } + + void cache( Map args ) { + cacheHeadersService.cache(response, args) + } + void withCacheHeaders( Closure c) { + cacheHeadersService.withCacheHeaders(response, c) + } + + void lastModified( dateOrLong ){ + cacheHeadersService.lastModified(response, dateOrLong) + } +} \ No newline at end of file diff --git a/src/main/groovy/grails/plugins/cacheheaders/CacheHeadersTraitInjector.groovy b/src/main/groovy/grails/plugins/cacheheaders/CacheHeadersTraitInjector.groovy new file mode 100644 index 0000000..348e17a --- /dev/null +++ b/src/main/groovy/grails/plugins/cacheheaders/CacheHeadersTraitInjector.groovy @@ -0,0 +1,20 @@ +package grails.plugins.cacheheaders + +import grails.compiler.traits.* + +import groovy.transform.CompileStatic + + +@CompileStatic +class CacheHeadersTraitInjector implements TraitInjector { + + @Override + Class getTrait() { + CacheHeadersTrait + } + + @Override + String[] getArtefactTypes() { + ['Controller'] as String[] + } +} \ No newline at end of file diff --git a/test/unit/com/grailsrocks/cacheheaders/CacheHeadersServiceTests.groovy b/src/test/groovy/grails/plugins/cacheheaders/CacheHeadersServiceTests.groovy similarity index 98% rename from test/unit/com/grailsrocks/cacheheaders/CacheHeadersServiceTests.groovy rename to src/test/groovy/grails/plugins/cacheheaders/CacheHeadersServiceTests.groovy index 1d8d4fd..d12f9ca 100644 --- a/test/unit/com/grailsrocks/cacheheaders/CacheHeadersServiceTests.groovy +++ b/src/test/groovy/grails/plugins/cacheheaders/CacheHeadersServiceTests.groovy @@ -1,6 +1,5 @@ -package com.grailsrocks.cacheheaders +package grails.plugins.cacheheaders -import grails.test.GrailsUnitTestCase import java.text.SimpleDateFormat diff --git a/travis-build.sh b/travis-build.sh index 260f1cc..7c01178 100755 --- a/travis-build.sh +++ b/travis-build.sh @@ -1,43 +1,66 @@ #!/bin/bash set -e rm -rf *.zip -./grailsw refresh-dependencies --non-interactive -./grailsw test-app --non-interactive -./grailsw package-plugin --non-interactive -./grailsw doc --pdf --non-interactive +./gradlew clean test assemble -filename=$(find . -name "grails-*.zip" | head -1) -filename=$(basename $filename) +filename=$(find build/libs -name "*.jar" | head -1) +filename=$(basename "$filename") +EXIT_STATUS=0 +echo "Publishing archives for branch $TRAVIS_BRANCH" +if [[ -n $TRAVIS_TAG ]] || [[ $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then + echo "Publishing archives" + + if [[ -n $TRAVIS_TAG ]]; then + ./gradlew bintrayUpload || EXIT_STATUS=$? + else + ./gradlew publish || EXIT_STATUS=$? + fi + + ./gradlew docs || EXIT_STATUS=$? -if [[ $TRAVIS_BRANCH == 'master' && $TRAVIS_REPO_SLUG == "grails-plugins/grails-cache-headers" && $TRAVIS_PULL_REQUEST == 'false' ]]; then git config --global user.name "$GIT_NAME" git config --global user.email "$GIT_EMAIL" git config --global credential.helper "store --file=~/.git-credentials" echo "https://$GH_TOKEN:@github.com" > ~/.git-credentials + git clone https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git -b gh-pages gh-pages --single-branch > /dev/null + cd gh-pages + + # If this is the master branch then update the snapshot + if [[ $TRAVIS_BRANCH == 'master' ]]; then + mkdir -p snapshot + cp -r ../build/docs/manual/. ./snapshot/ + + git add snapshot/* + fi + + # If there is a tag present then this becomes the latest + if [[ -n $TRAVIS_TAG ]]; then + mkdir -p latest + cp -r ../build/docs/manual/. ./latest/ + git add latest/* + + version="$TRAVIS_TAG" + version=${version:1} + majorVersion=${version:0:4} + majorVersion="${majorVersion}x" + + mkdir -p "$version" + cp -r ../build/docs/manual/. "./$version/" + git add "$version/*" + + mkdir -p "$majorVersion" + cp -r ../build/docs/manual/. "./$majorVersion/" + git add "$majorVersion/*" + + fi - if [[ $filename != *-SNAPSHOT* ]] - then - git clone https://${GH_TOKEN}@github.com/$TRAVIS_REPO_SLUG.git -b gh-pages gh-pages --single-branch > /dev/null - cd gh-pages - git rm -rf . - cp -r ../target/docs/. ./ - git add * git commit -a -m "Updating docs for Travis build: https://travis-ci.org/$TRAVIS_REPO_SLUG/builds/$TRAVIS_BUILD_ID" git push origin HEAD cd .. rm -rf gh-pages - else - echo "SNAPSHOT version, not publishing docs" - fi - +fi - ./grailsw publish-plugin --no-scm --allow-overwrite --non-interactive -else - echo "Not on master branch, so not publishing" - echo "TRAVIS_BRANCH: $TRAVIS_BRANCH" - echo "TRAVIS_REPO_SLUG: $TRAVIS_REPO_SLUG" - echo "TRAVIS_PULL_REQUEST: $TRAVIS_PULL_REQUEST" -fi \ No newline at end of file +exit $EXIT_STATUS \ No newline at end of file diff --git a/wrapper/grails-wrapper-runtime-2.3.8.jar b/wrapper/grails-wrapper-runtime-2.3.8.jar deleted file mode 100644 index 6a34590..0000000 Binary files a/wrapper/grails-wrapper-runtime-2.3.8.jar and /dev/null differ diff --git a/wrapper/grails-wrapper.properties b/wrapper/grails-wrapper.properties deleted file mode 100644 index 74391ce..0000000 --- a/wrapper/grails-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -wrapper.dist.url=http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/ diff --git a/wrapper/springloaded-1.1.5.RELEASE.jar b/wrapper/springloaded-1.1.5.RELEASE.jar deleted file mode 100644 index cb88323..0000000 Binary files a/wrapper/springloaded-1.1.5.RELEASE.jar and /dev/null differ