カスタムタグの作り方

http://www.ibm.com/developerworks/jp/java/library/j-grails03118/ からメモ

前準備

grails create-tag-lib Date
ls -la ./grails-app/taglib/DateTagLib.groovy ./test/integration/DateTagLibTests.groovy

ソース書き書き

vim ./grails-app/taglib/DateTagLib.groovy
class DateTagLib {
	def thisYear = {
		out << Calendar.getInstance().get(Calendar.YEAR)
	}
}
<g:thisYear />

テストコード書き書き

vim ./test/integration/DateTagLibTests.groovy
class DateTagLibTests extends GroovyTestCase {
	def dateTagLib
	
	void setUp() {
		dateTagLib = new DateTagLib()
	}
	
	void testThisYear() {
		String expected = Calendar.getInstance().get(Calendar.YEAR)
		assertEquals("the years don't match", exptected, dateTagLib.thisYear())
	}
}

テスト実行

grails test-app

高度なカスタムタグ

class DateTagLib {
	def thisYear = {
		out << Calendar.getInstance().get(Calendar.YEAR)
	}
	
	def copyright = { attrs, body ->
		out << "<div id='copyright'>" 
		out << "&copy; ${attrs['startYear']} - ${thisYear()}, ${body()}"
		out << " All Rights Reserved."
		out << "</div>"
	}
}
<g:copyright startYear="2002">FakeCo Inc.</g:copyright>

記事が書かれた時(1.0)と今(1.0.4)で、テスト用のコード置き場が変わってるかも(./grails-app/test → ./test )