Contents
プラグインの作り方
qwikWebのプラグインがどのような仕組みでできているかを説明する。 (qwikWebのinstall方法は省略。とりあえず、普通に起動するところまで動か してください。)
lib/qwik/act-sample.rb というコードが、サンプルコードである。重要なの は最初の3つのmethodである。
プラグイン
ブロックレベル・プラグイン
二つ目のmethod、これはquoteというプラグインを定義している。
def plg_quote
text = yield
ar = []
text.each {|line|
ar << line
ar << [:br]
}
[:blockquote,
[:p, {:style=>"font-size:smaller;"}, *ar]]
endquoteプラグインは、先程と違い、ブロックレベル・プラグインである。
{{quote
一行目
二行目
}}一行目
二行目
このように複数行の入力をとる。最初の text = yield で、プラグインに囲ま れた文字列を取得する。その後、一行づつに分解し、<br/>をお尻につけなが ら、追加しているそして最後にblockquoteタグとpタグで囲んでいる。ついで にstyleも指定している。attributeはこのように、Hashで指定する。
qwikWebではこのように、xmlをArrayやHashなどだけの集合で指定している。 これは高林哲氏による「わびさび方式」をそのまま借りてきたものである。
アクション
ここまでの二つはいわゆるプラグインであり、文中に埋め込んで使うものだっ た。次に、アクションについて説明する。/lib/qwik/act-hello.rbを開くと以下のようにコードが書かれている。
def act_hello
c_notice("hello, world!") { "hi, there." }
endこれがアクション。
http://127.0.0.1:9190/.hello
このURLにアクセスすると、なにかメッセージページがでてくる。タイトルが hello, メッセージがhi, thereとでる。このようにドットで始まるURLは、 act_helloというメソッドの呼び出しに対応している。メソッドの中で実行さ れた結果が、ページとして返ってくる。
実はqwikWebでは、通常のページ表示や編集画面も、全てこのアクションとい う仕組みで作られている。FrontPage.htmlというURLは、FrontPageというペー ジに対してhtmlというアクションを実行せよという意味になる。そこで、 FrontPageというページから文字列を読み込み、htmlに変換して出力している というわけである。(本当はもうちょっと複雑なんだけどね。) FrontPage.editは、FrontPageの編集画面を表示せよ、という意味になる。 qwikWebは、このようなアクションの連鎖だけで全ての処理を実現している。
テストコード
コードの後半は何をやっているかというと、テストコードになっている。
assert_wiki([:tt, "t"], "{{tt(t)}}")例えばこのコードは、Wiki記法として{{tt(t)}}という風に記述すると、 その部分は結果的にこのようなhtmlへと変換される、ということをテストして いる。
アクションも同様にテストしている。
session("/test/.hello")
assert_tag("hello, world", "title")これは、.helloというアクションにアクセスして、そこで生成されたページか らtitleというタグをもってくると、その中身はhello, worldというテキスト になっている、ということをテストしている。assert_tagは、"title"という タグを探してきて、その中のテキストを取得し、比較するというassertなわけ だ。
titleタグであれば文中で一つしかないためこの方式で問題ないが、 通常はタグはたくさんあって、それをうまく指定するのは難しい。 そこで、XPathを使ってタグを指定する仕組みも用意している。
assert_xpathでは、XPathを使って検査したい部分を指定し、 その中身をわびさび方式のArrayと比較する。
このような仕組みを用意することによって、テストを自動化することに 成功している。
自動再読み込み
デバッグモード、-dオプション付きでqwikWebを起動すると、ファイルの自動 再読み込み機能がオンになる。この状態で任意のコードを編集し、セーブする と、即座にそのファイルが再読み込みされ、そのコードが有効となる。(正確 には、一秒に一回チェックしている。ファイルが更新されてたら読むという動 作をしている。)
例えば、qwikwebを起動している最中に、先程のttタグのところを、例えば bタグに変える。そうすると、コマンドラインに、reloadをしたというメッセー ジが表示される。
reload: "/cygdrive/c/qwik/lib/qwik/act-sample.rb"
それからブラウザでリロードすると、先程まではttタグだったところがbタグ に変わっているのがわかるはずだ。
このようにサーバを再起動しなくてもコードの変更を反映させられるような仕 組みにしている。これによって、サーバを動作させながらプログラムを更新し ていくことができる。
自分で作ってみる
自分自身のプラグインやアクションを作りたい場合は、最初は試しに act-sample.rbを書き換えながらリロードしていくのがいいだろう。
自分なりのファイルがまとまったら、lib/qwikというdirectoryに、act-から 始まるファイルを作って置けばよい。qwikWebは、自動的にact-から始まるファ イルをロードする。
Happy Hacking!
