Tuesday, April 17, 2007

Grails Tips : Grails Artefacts Class をいじる

ドメインクラス関連に引き続き、どうせなら他のクラスもいじってみましょう。
Grailsの、"規約によるコーディング"に使われる「Artefacts」(米語スペルだとArtifacts)、
ドキュメント翻訳時は、なんと翻訳して良いのかわからず、
他の技術系の資料を参考にして「成果物」と訳しました。
今回ここでは、カタカナで「アーティファクト」と書きます。

その「Artefacts」関係が、Grails 0.5 から、GrailsApplicationが大幅改良されて、
結構おもしろそう。(おかげでPlugin関連一部作り直しです。)
というわけで、よく使うであろう項目をまとめてみます。

GrailsApplicationは、コントローラ、
タグリブ、GSP内などで、grailsApplication と記述して呼びだします。
class DashboardController{
def index = {
println grailsApplication
}
}


全アーティファクトクラスリストを返す
Grailsが起動している際に、使用されているアーティファクトClassリストを返す。
grailsApplication.allArtefacts.each{
println it
}




アーティファクト以外
grailsApplication.allClasses.each{
//falseのみをアウトプット
if(!grailsApplication.isArtefact(it)) println it
}


アーティファクトクラスを名前で取得
前回と同じ内容(0.5版)
def domainCls = grailsApplication.getDomainClass("Book")
//又は、
def domainCls = grailsApplication.getArtefact("Domain","Book")


各アーティファクトクラスのリストを返す
ドメインクラスを名指しで取得する場合と同じように、
grailsApplication.getArtefact("Domain","Book")
と書いて、"Domain"の部分を各アーティファクト名に変更することで、
他のアーティファクトクラスも取得できます。

・ Domain - ドメインクラス
・ Controller - コントローラクラス
・ TagLib - タグリブクラス
・ Service - サービスクラス
・ Codec - コーデック
・ Task - タスク
・ DataSource - データソース
・ UrlMappings - URLマッピング
・ Bootstrap - ブートストラップ

以下は、ドメインクラスを取得する例:
def domainsInfo = grailsApplication.getArtefactInfo("Domain")
domainsInfo.getClassesByName().each{
println "クラス名:${it.key} クラス:${it.value}"
}


GSPで、ザックリとアーティファクトリストを出すサンプル:
<%
def artefactsMap = ["Domain":"ドメインクラス",
"Controller":"コントローラクラス",
"TagLib":"タグリブクラス",
"Service":"サービスクラス",
"Codec":"コーデック",
"Task":"タスク",
"DataSource":"データソース",
"UrlMappings":"URLマッピング",
"Bootstrap":"ブートストラップ"]
%>
<g:each var="art" in="${artefactsMap}">
<div id="aset">
<h1>${art.key} : ${art.value}</h1>
<%
def info = grailsApplication.getArtefactInfo(art.key)
def cls = info.getClassesByName()
%>
<ul>
<g:each in="${cls}">
<li>${it}</li>
</g:each>
</ul>
</div>
</g:each>

これと、各アーティファクトクラスの情報を色々取得してまとめると、
概要仕様書( GrailsDocs )っぽいのもができそうですね。

作ってみようかな?

Labels: ,

2 Comments:

At Thu Apr 19, 01:56:00 AM GMT+9, Anonymous Anonymous said...

Hi,
Just tried to run your plugin from http://sky.geocities.jp/acegiongrails/ but my cpu maxed on login!
Just thought I would let you know.

 
At Thu Apr 19, 05:41:00 PM GMT+9, Blogger T.Yamamoto said...

Can you try from http://grails.org/AcegiSecurity+Plugin

 

Post a Comment

<< Home