2013年5月24日
Params::TinyとHash::MultiValue、もしくは本物のTinyについて
tl;dr
- Params::Tinyってのを書いた
- 驚きのTiny
- ニーズ無さそう
- Hash::MultiValueがparamメソッド持ってれば良くね?ってなったけど、Requestクラスじゃない単なるデータコンテナクラスがそういうの持ってるの微妙なのかなー?ってなってる
本題
旧来からPerlにおいて、古くはCGI.pm、最近ではPlack::Requestまで、Requestオブジェクト
的なやつは $req->param
が呼び出せることが期待されておりました。
なので、FormValidator的なモジュールはCGIが来ようがCatalyst::Requestが来ようがPlack::Request が来ようが値の検証が行えておりました。Duck typing的なあれです。
しかし逆に、単にハッシュとかからサクッとparam
の生えてるオブジェクトを作るのは
大変というか、ニーズもないし逆に簡単すぎるので、誰もあんまそういうモジュールを
作ったり使ってこなかったのだと思います。一応、
Class::Paramってのはあるようです。
たまーにそういうの欲しいなーって思うことはあるんですが、だいたいテスト用の
モックだかスタブだかで欲しいだけなので、CGI->new
で良いかってなるわけです。
ただ、今回FormValidator::Liteにハッシュ渡したいみたいな要件があったみたいで、 じゃあなんかそういうブリッジをするやつを書いてもいいのかなーと思ったら、 驚くほどのTinyコードになった。予想はしてた。 Hash::MultiValue継承してparamメソッド追加しただけ。
こういうのって、CGI.pmぽいコンテキスト見るparamメソッドになってるのが良いのか なーと思ったので、Hash::MultiValue使っててPlack::Requestと同じような感じになってる。その辺の話は このへん。
結局Yoshina::Validatorみたいなのをsoh335先生が作るってことで落ち着いた。別にこ のコード使われると思ってなかったし、使おうとも思ってなかった。
Hash::MultiValueにparamメソッド生えててもいいのかもなー、でも微妙だしそもそも ニーズ無いけど、たまに欲しいしなーとか思った。
ぼくはこう思う
コード書くよりこのエントリー書くのに何十倍も時間かかってる。