« ボウラード | メイン | スヌーカーの知名度を上げるには? »

2005年04月14日 (木)

AmritaHandler(仮) [テクニカル]

RubyにはAmritaというすばらしいHTML/XMLテンプレートエンジンがあるのだが、これをS2JSF風に簡単に使えるようにしてみよう~という発想で、WEBrickを使ってWebアプリケーションフレームワーク(というほどのものではないのだが)を作ってみた。

とりあえずWEBrickのFileHandlerのサブハンドラとして作ったので、AmritaHandler(仮)という名前。

amritahandler_0413.zip download
動作にはAmrita2 1.9.41.9.3Needle 1.2.0が必須。

以下、少し説明。

S2JSFと同じようなサンプルのadd.htmlとlist.htmlがあります。まだHTMLではinputにしか対応してなくて、select/optionは実装中。

対応するRubyのソースは見てくれればわかりますが、すごくシンプルです。たとえばlist.rbはこんな感じ。


class ListItem
attr_accessor :delete, :input
ATTR_ACTION_INPUT = [:delete, :input]
def initialize
@delete = ''
@input = ''
end
end
class List
attr_reader :items
def initialize
item1 = ListItem.new
item1.input = 'foo'
item2 = ListItem.new
item2.input = 'bar'
@items = [item1, item2]
end
end

ポイントは定数アノテーション ATTR_ACTION_INPUT = [:delete, :input] の部分です。これを書いておくとdeleteとinputがHTMLのINPUT要素と認識され、適切に値が埋め込まれます。Seasar2からアイデアをパクりました(笑)。

そしてActionを担当するlistaction.rbはこんな感じ。


class ListAction
def initialize(list)
@list = list
end
def update
@list.items.reject! { |item| item.delete == 'on' }
end
def addrow
@list.items << ListItem.new
end
def action
'list'
end
end

どちらも非常にシンプルで、しかも全く他のモジュールに依存していないことがわかります。ロジックはこれだけです。あとはwebserver.rbの中でDIコンテナであるNeedleにコンポーネントの設定をする(別ファイルに分離予定)だけで動きます。

投稿者 4bit : 2005年04月14日 01:09 このエントリーを含むはてなブックマーク

トラックバック

このエントリーのトラックバックURL:
http://www.4bit.net/x/mt/mt-tb.cgi/47

コメント

コメントしてください




保存しますか?