読者です 読者をやめる 読者になる 読者になる

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