Skip to content

Instantly share code, notes, and snippets.

View OneTimeDataExample.groovy
@TestFor(MyController)
@TestMixin(OneTimeDataUnitTestMixin)
class MyControllerSpec extends Specification {
def setup() {
mockOneTimeData(this, controller)
}
def "should fail"() {
given:
View OneTimeDataUnitTestMixin.groovy
class OneTimeDataUnitTestMixin extends GrailsUnitTestMixin {
def mockOneTimeData(spec, controller) {
spec.metaClass.otdData = [:]
spec.metaClass.otdId = 1
controller.metaClass.oneTimeData << { Closure dataSetup ->
dataSetup.delegate = spec.otdData
dataSetup()
spec.otdId
}
@jurberg
jurberg / advice.js
Last active Dec 27, 2015
sample advice extension. forgot the origins of this...
View advice.js
(function (exports) {
//usage
//withAdvice.call(targetObject);
//mixin augments target object with around, before and after methods
//method is the base method, advice is the augmenting function
exports.withAdvice = function() {
['before', 'after', 'around'].forEach(function(m) {
this[m] = function(method, advice) {
if (typeof this[method] == 'function') {
View index.gsp
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main"/>
<title>Javascript Components</title>
</head>
<body>
<button onclick="TestDialog.openDialog();">OpenDialog</button>
<g:render template="/layouts/test-dialog"/>
</body>
View testDialog.js
var TestDialog = (function($) {
var $dialog;
$(function() {
$dialog = $('#test-dialog');
$dialog.dialog({
autoOpen: false,
width: 300,
height: 200
View testDialog.css
.test-dialog-content {
font-weight: normal;
color: red;
}
View ApplicationResources.groovy
modules = {
application {
resource url:'js/application.js'
}
test_dialog {
dependsOn 'jquery, jquery-ui'
resource url:'css/testDialog.css'
resource url:'js/testDialog.js'
}
}
View _test-dialog.gsp
<r:require module="test_dialog"/>
<div id="test-dialog" title="Test Dialog">
<div class="test-dialog-content">
This is a test.
</div>
</div>
View requirejs-url-setup.js
UrlMappings.config.forEach(function(mapping) {
app[mapping.verb](mapping.route, function(req, res) {
require(['app/controller/' + mapping.controller], function(Controller) {
Controller[mapping.action](req, res);
});
});
});
View require-express-setup.js
app.all('/:controller/:action/:id?', function(req, res) {
require(['app/controller/' + req.params.controller], function(Controller) {
Controller[req.params.action](req, res);
});
});
app.all('/:controller', function(req, res) {
require(['app/controller/' + req.params.controller], function(Controller) {
Controller.index(req, res);
});
You can’t perform that action at this time.