« ボウラード | メイン | スヌーカーの知名度を上げるには? »
2005年04月14日 (木)
AmritaHandler(仮) [テクニカル]
RubyにはAmritaというすばらしいHTML/XMLテンプレートエンジンがあるのだが、これをS2JSF風に簡単に使えるようにしてみよう~という発想で、WEBrickを使ってWebアプリケーションフレームワーク(というほどのものではないのだが)を作ってみた。
とりあえずWEBrickのFileHandlerのサブハンドラとして作ったので、AmritaHandler(仮)という名前。
amritahandler_0413.zip download
動作にはAmrita2 1.9.4
以下、少し説明。
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にコンポーネントの設定をする(別ファイルに分離予定)だけで動きます。
トラックバック
このエントリーのトラックバックURL:
http://www.4bit.net/x/mt/mt-tb.cgi/47