Google Analytics

2010-03-09

[Plack] response bodyを変更するMiddlewareの試作

Webアプリケーションが見事にコードリファレンス一つに抽象化されているPSGIでは、あるアプリケーションに前処理・後処理を追加して、動作をちょっと変更するMiddlewareという仕組みがあって、それで色々と面白いことができそうなので、試しにくだらないものを作ってみました。

今回作ったのは、実用性皆無ですが、後処理を追加することで、出力をすべて大文字にしてくれるMiddlewareです。

必要なモジュール: Plack, Twiggy

使い方: plackup -s Twiggy app.psgi で動かして、http://localhost:5000/streamなどを見てみる。

hirataraさんの記事 PSGI 1.03のMiddlewareを書いてみるを参考にしながら作ってみたのですが、Plack::Component::response_cbの定義をよく見ると、body_filterとして返すコードリファレンスの内容は、return undefをすると$res->[2]に無駄なundefが入るので、return ()の方を使うこのコードの方がよいと思います。

2010-03-01

JavaScriptのcallとapplyのサンプル

JavaScriptの関数オブジェクトについている不思議なメソッド、callとapplyについての記事です。これを使うと使いたいメソッドを実行時に文字列で指定するような感じの動的メソッド呼び出しが実現できます。

call, applyの第一引数は、呼ばれた先でのthisを指定します。

callとapplyの違いは、引数の与え方です。例: fn.call(context, arg1, arg2, ...); fn.apply(context, [arg1, arg2, ...])

var list = [];
list.push("hoge0");
list["push"].call(list, "hoge1");
var m = "push";
list[m].apply(list, ["hoge2"]);
console.log(list); // output: ["hoge0", "hoge1", "hoge2"]