Alternate Constructors in Groovy

14 September 2017

There are a variety of ways to construct objects in Groovy. We were looking for something more dynamic where we could parameterize the object to be constructed.

We found a couple different things that worked to instantiate an object:

import groovy.transform.*

@ToString
class MyClass {
    String first
    String last
}

def map = [first: 'f', last: 'l']

// instantiate from literal class reference
println new MyClass(map)
println MyClass.newInstance(map)
println (map as MyClass)
println map.asType(MyClass)

// instantiate from a variable reference the class
def clazz = MyClass

println map.asType(clazz)
// println (map as clazz) // 'as' operator doesn't like 'clazz' variable
println clazz.newInstance(map)


Groovy Map Minus

06 June 2017

Groovy is relatively intuitive for me: I can usually guess a method or operator and find it works as I had guessed.

Removing a key/value by the key from a Map conveniently eludes me though. I always guess that I should be able to minus a key from a Map to produce a new Map with that entry /value removed. That doesn’t work, so I needed to invent my own. I still not sure how to practically apply it everywhere though, or if it’s even worthwhile. In practice, I always end up writing the findAll inline.

@Category(Map)
class MapMinus {
    Map minus(Collection keys) {
        this.findAll { k, v -> ! (k in keys) }
    }
    Map minus(Object key) {
        this - [key]
    }
}

use (MapMinus) {
    assert [b: 2, c: 3,] == [a: 1, b: 2, c: 3,] - 'a'
    assert [b: 2, c: 3,] == [a: 1, b: 2, c: 3,] - ['a']

}


JBake with MarkupTemplateEngine

03 November 2016

JBake 2.5.0 got support for the MarkupTemplateEngine, so I wanted to give it a try, since structured code will be nicer than extreme scriptlet stuff that was happening in the original Groovy template example. The stock MTE example shows off MTE templates, but it also switched to Foundation in place of Bootstrap.

I’ve been looking forward to really learning Bootstrap for work and my personal projects, so I’m not looking to switch frameworks right now, so I rebuilt my own example project with MTE and Bootstrap based on the original Groovy/Bootstrap sample I had previously used.

Hopefully, I’ll get a little feedback and the JBake people will incorporate my contribution.


JBake

05 January 2016

I’ve moved the blog to a static site generated by JBake. The source for the content lives in my techblog project in Github, so I have a full versioning of my content for the small price of a git workflow.

I installed JBake using the familiar SDKMan that I already use to manage my Grails and Groovy installations. I initialized it with the Groovy templating engine and have started customizing the templates.

To make sure this thing is easy to update, I keep a local clone of the repo, so I can update it any time and push whenever I’m ready. I have a shell script scheduled to run on the server which basically does:

cd techblog
git fetch
git merge | grep "Already" > /dev/null || jbake

That little bit of code only runs jbake if the git pull doesn’t say "Already up-to-date". That provided me a simple little "continuous integration" hook that polls git for changes to trigger the build. I’ll probably use this trick in other places.

I brought all my old content from my old database into the new platform using a quick little Groovy script to dump out an HTML file for each article including the header of metadata for JBake’s use. While most of these old articles will remain HTML, I intend to use AsciiDoctor format for all the new stuff.

I’ve been collecting a long list of (mostly technical) articles to write, but replacing the old platform kept trumping my attempts to write. Hopefully, this move can open the flood gates, and eventually, I’ll break out another instance of it for the photography blog. JBake should make it easy and interesting to continue the blogs.


All the Posts

September 2017

June 2017

November 2016

January 2016

June 2011

September 2010

January 2010

June 2008

April 2004