Grails プラグインの作り方2 - プラグインのイベント処理
前回 id:fits:20080703 作成したプラグインプロジェクトを使って、以下のようなイベント処理を行う機能を追加する。
- ドメインクラスが追加された場合に、スペックファイルの雛形を自動生成
イベント処理スクリプトの追加
イベント発生時の処理は、プラグイン作成プロジェクトに scripts/Events.groovy ファイルを作成し、eventXXX(XXX はイベント名)という名称のクロージャの中に記述することになる。
なお、ドメインクラスやコントローラー生成等 grails create-xxx が実行された際のイベント処理は eventCreatedArtefact クロージャに処理を記述することになっている。
eventCreatedArtifact と違い eventCreatedArtefact は名称的に違和感ありだが、Init.groovy ファイルの createArtifact ターゲットの処理で CreatedArtefact イベントを発生させているため、eventCreatedArtefact が正しい記述となる。
scripts/Events.groovy
baseDir = System.getProperty("base.dir") //イベント処理の定義 eventCreatedArtefact = {type, name -> storyFileBody = """ scenario "$name", { when "", { } then "", { } } """ if (type == "Domain Class") { new File("${baseDir}/spec/${name}Scenario.story").withWriter { it.write(storyFileBody); } } }
上記の実装で Domain Class が生成された際に、spec ディレクトリに XXXScenario.story(XXX はドメインクラスのクラス名)ファイルの雛形を生成する処理が実行されるようになる。
動作確認
scripts/Events.groovy ファイルを追加したプラグインをパッケージ化し、別のアプリケーションプロジェクトにインストールする。
そこで、以下のようにドメインクラスを作成すると、spec/NoteScenario.story が自動生成され、イベント処理が実施されていることが確認できる。
>grails create-domain-class note