2016/05/04 このエントリーをはてなブックマークに追加 はてなブックマーク - Skinny Frameworkの素振りをする(3スイング目)

Skinny Frameworkの素振りをする(3スイング目)

カテゴリ:


これまでのあらすじ。

Skinny Frameworkの素振りをする(1スイング目)
Skinny Frameworkの素振りをする(2スイング目)


さて、引き続き何かしよう。








メッセージ定義はsrc/main/resources配下にあるmessage.confで定義可能。
ロケールごとにmessages_{locale}.confと言うかたちで定義する。
日本語であればmessages_ja.confとなる。

ちなみにDB設定はapplication.confに書いてある。

ところで、skinnyのi18nがnullしか取れないんだがどうやって設定するんだろう…と思って調べたらちゃんと載ってました。
http://skinny-framework.org/documentation/i18n.html


messages_ja.confを仕込んだ上で、 これに従い、ApplicationControllerでi18nの設定をjaにすると無事に日本語が表示されました!




どうやらParamTypeというtraitでモデルの型定義をしているよう。
多分、こんな風につくってFormの生成をしている処理に仕込めば良い。
想定するデータのパターンマッチで弾く感じ。僕が作りたいのは3つの値しか持たないコンボボックスとかそういうための型。

case object CustomParamType extends AbstractParamType ({
    case null => NONE
   // ココに処理を書いていく
})


TypeConverterというのがあって、これも関係しているかもしれない。

たぶんここらへん。
Skinny-ORM
書いてあることに近いような遠いような。


あと、Entity側の型マッピングもやらないとダメなような気がする。
TimeStampのの実装を見るとTimestampsFeature[Entity]というふうになっている。
これを模倣してCustomのFeature作ってやればうまくいくかなぁ。





scaffoldでCRUDが自動生成されるわけだけど、ルーティングはこんな感じにやってくれる。

hogehoge/{id}・・・詳細画面
hogehoge/new・・・新規画面
hogehoge/{id}/edit・・・編集画面


ただ、生成されたControllerでやってんのかなぁと思ったのだけど、なんか見当たらないというかどこかわからない。

生成されたControllerではSkinnyApiResourceActionsとSkinnyResourceActionsのoverrideしかない。
処理的にはvalidationとform生成のみ。綺麗に抽象化されているなぁ。。。



で、追っていくと、SkinnyResourceRoutesというtraitが定義しているよう。
こんな感じ。


val newUrl = get(s"${resourcesBasePath}/new")(newResource).as('new)

val editUrl = get(s"${resourcesBasePath}/:${idParamName}/edit") {
    params.getAs[Id](idParamName).map(id => editResource(id)) getOrElse haltWithBody(404)
}.as('edit)


追い続けるとすごい数のtraitが実装されている。おおう。





ということで、3スイング目はここまで。


追伸:

せらさんからコメントいただきました!!
https://gist.github.com/seratch/dd0314f4c9d74f9f9cf344c1db4bdc70




0 件のコメント:

コメントを投稿