« Perl製のWebアプリケーションをherokuで3分で動かすの法 | メイン | memcachedのflagsってのが何のためにあるのかっていう話 »

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メソッド生えててもいいのかもなー、でも微妙だしそもそも ニーズ無いけど、たまに欲しいしなーとか思った。

ぼくはこう思う

コード書くよりこのエントリー書くのに何十倍も時間かかってる。

投稿者 Songmu : 2013年5月24日 22:27