GrailsのValidationで自作Constraintsを使う(Github経由)
Posted on February 28, 2014 at 23:12 (JST)
以下の3ステップで自作した制約(Constraint)をGrailsのバリデーションで使用できるようになります。
- プラグイン・プロジェクトで制約を定義したクラスを作成する
- GithubにMavenレポジトリを作成し、作成したプラグインを配信可能にする
- Grailsアプリで作成したプラグインの読み込み設定をする
今回はサンプルとして、日付文字列の正当性チェックを行う制約を作成しました。
サンプルはGithubにて公開しています。[ my-validation-plugin ]
1. プラグイン・プロジェクトで制約を定義したクラスを作成する
Grailsはアプリケーション起動時に制約クラスを読み込みます。
プラグイン・プロジェクトにはアプリケーション起動時に、任意の処理を読み込ませる仕組みが用意されています。
左図で選択している(背景色が青の)部分が今回のメインとなるソースです。
- message.properties
-
エラー時のデフォルト・メッセージを定義します。
呼び出し側のアプリに該当するメッセージが存在しない場合、デフォルト・メッセージが表示されます。 - DateConstraint.groovy
-
自作制約クラスです。org.codehaus.groovy.grails.validation.AbstractConstraintを継承させます。
実装についてはGrails標準の制約クラスが参考になります。
[ Githubでgrails-coreのソースを見る ] - DateConstraintSpec.groovy
- 自作のテストクラスです。パラメタライズドテストを行っています。
- DateConstraintTests.groovy
-
こちらではgrails-coreのテストクラスに準拠したテストを行っています。
AbstractConstraintTestsとTestClassはgrails-coreから拝借しました。 - MyValidationPluginGrailsPlugin.groovy
-
grails create-plugin
コマンドにて自動で作成されます。
特定のタイミングで任意の処理を読み込ませる設定を記載できます。
下記の設定にて、自作制約クラスを読み込ませることが可能です。
[ ${プラグイン名}GrailsPlugin.groovy ]
def loadAfter = ['controllers']
def doWithSpring = {
ConstrainedProperty.registerNewConstraint(
DateConstraint.DATE_CONSTRAINT, DateConstraint.class);
}
その他のクラスについては特筆すべきこともないので、省略します。
2. GithubにMavenレポジトリを作成し、作成したプラグインを配信可能にする
Githubに配信用リポジトリを用意した後、ローカルにアップロード用のリポジトリを作成します。
GithubのMavenリポジトリ化、およびデプロイについては下記の記事を参考にしました。
bluepapa32’s Java BlogGitHub を Maven 公開リポジトリにする (Gradle 編)
Literal Ice
GrailsのプラグインリポジトリとしてGithubを使う
なお、私はMacにて以下の設定をしています。
[ settings.groovy ]
ls.release.scm.enabled = false <br/>
grails.project.repos.default = "localRelease"
grails.project.repos.localRelease.url = "file:///Users/username/repos/mvn/"
3. Grailsアプリで作成したプラグインの読み込み設定をする
以下の設定を追加すればOKです。
[ BuildConfig.groovy ]
repositories {
mavenRepo "http://onbass-naga.github.io/mvn/"
}
plugins {
compile "com.example:my-validation-plugin:0.1"
}
使い方
// DomainクラスやCommandクラス
static constraints = {
deadline date:true
}
以上です。