leftovers...

about grails groovy

Grails 1.3 マイルストーン 1 リリース! サイクルみじかっ!

Grails 1.3 マイルストーン 1 リリース

1.2.x系が最近リリースされたばかりですが、予定通りいけば今月末に最終リリース予定のGrails 1.3系の最初のマイルストーンがリリースされました。
リリースノートの内容を意訳しました。
http://www.grails.org/1.3-M1+Release+Notes

詳細は以下を参照!

Groovy 1.7 に更新!
Grails 1.3 M1ではGroovy 1.7に更新されています。Groovy 1.7では、匿名クラスネステッド(入れ子)クラスの対応、パワーアサート等の実装が追加されています。詳しくは、Groovy 1.7のリリースノートを参照してください。

JUnit 4

Grails 1.3からテスト実行にJUnit4が採用されています。
Grails 1.3以前のバージョンのテストに関しても互換は保たれています。

Mavenリポジトリ対応
Mavenリポジトリへのプラグインの発行と読込に対応しました。この実装は、Mavenパブリッシャープラグインhttp://grails.org/plugin/maven-publisherで対応しています。

Grails 1.2で実装されたBuildConfig.groovyに記述する Ivy DSL を利用して、簡単にプラグインリポジトリ設定を追加できます。

repositories {
        mavenRepo "http://repository.codehaus.org"
}

Grailsセントラルリポジトリhttp://grails.org/plugin/homeの有効無効をgrailsCentralで簡単に定義できます。

repositories {
        grailsCentral()
}


プラグイン依存性宣言
新規に追加されたMavenリポジトリ対応はでは、プラグインの依存関係もIvy DSLで宣言できます。

plugins {
        runtime ':hibernate:1.2.1'
}

プラグインの除外も簡単にコントロールできます。

plugins {
        runtime( ':weceem:0.8' ) {
                excludes "searchable"
        }
}

プラグインのスコープも可能。

plugins {
        build( ':weceem:0.8' ) 
}


GORMでのダーティーチェック
オブジェクトが変更されたかを確認する新しいメソッドが追加されました。

def airport = Airport.get(10)
assert !airport.isDirty()
airport.properties = params
if (airport.isDirty()) {
   on changed state
}
   // do something based

フィールド毎の確認も可能です。

def airport = Airport.get(10)
assert !airport.isDirty()
airport.properties = params
if (airport.isDirty('name')) {
   // フィールドnameが変更されたときの処理
}

GORM派生プロパティ対応

class Product {
  Float price
  Float finalPrice

static mapping = { finalPrice formula: 'PRICE * 1.155' } }

ネームドクエリー対応に追加クライテリア

class Publication {
    String title
    String author
    Date datePublished
    Integer numberOfPages

static namedQueries = { recentPublications { def now = new Date() gt 'datePublished', now - 365 } } }

def books = Publication.recentPublications {
    or {
        like 'author', 'Tony%'
        like 'author', 'Phil%'
    }
}

GSP joinタグ

<g:join in="['Grails', 'Groovy', 'Gradle']" delimiter="_"/>

以下が生成されます:

Grails_Groovy_Gradle


他にも、Changelog http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=11063&version=15400を見るといろいろと更新がされていたりします。じっくり読んでみるのも良いかもですね。
まだ検証していないですが、個人的に興味深い物を一部紹介すると、


3月30日(火)に行われる「第8回 G* ワークショップ」で、Grails 1.3を紹介させていただきます。
お時間がある方は是非ご参加ください!

日時: 2010年3月30日(火) 19:00〜21:00 頃 (18:30受付開始)
場所: IBM渋谷オフィス
東京渋谷区道玄坂一丁目12-1 マークシティウェスト18階
http://www-06.ibm.com/software/jp/swcoc/guide/tokyo/access.html


詳しくは以下のページを参照ください。
http://www.jggug.org/news/dai8kaiwakushoppu



Grails 1.3 M1を試す際の注意点
acegiプラグインでもなのですが、コマンドを追加するプラグインが一部動作しません。
調べないと何とも言えませんが(少なくとも1.2.1では問題無かった)。コマンド用GANTスクリプトの仕様変更なのか、それともGANTの更新に伴う変更なのか・・。
これを一時的に解決する方補は、対象のGANTスクリプトの最後に以下の行を追加すると動きます。

setDefaultTarget('default')

つまりデフォルトのタスクを指定してやらないと動きません。
プラグインはUSER_HOME/.grails/ 以下の階層にあるのですが、そちらを編集するよりはプラグインフォルダをプロジェクトディレクトリに持ってきた方が変更しやすいです。
grails-app/conf/BuildConfig.groovyに以下を追記するとプロジェクトディレクトリの直下にpluginsフォルダが作成されて、その中にプラグインが保持されるようになります。

grails.project.plugins.dir="plugins"