さっきかいたの
PACKAGE->inflate_column( query => { inflate => sub { my $u = URI->new; $u->query(shift);
my $ret = {};
for my $k ( $u->query_param ) {
my @v = $u->query_param($k);
$ret->{$k} = @v > 1 ? [@v] : $v[0];
}
$ret;
},
deflate => sub {
my $utf8off = sub {
my $str = shift;
utf8::encode($str) if utf8::is_utf8($str);
};
my $hash = shift;
for ( keys %$hash ) {
if ( ref $hash->{$_} eq 'ARRAY' ) {
$utf8off->($_) for @{ $hash->{$_} };
}
else {
$utf8off->( $hash->{$_} );
}
}
my $u = URI->new;
$u->query_param(%$hash);
$u->query;
},
}
);
foo=bar&baz=blah
みたいなクエリを保存するカラムに、ハッシュで保存してハッシュで取り出すというやつ。
短くかけるかと思って書き始めたら、URIの query_form
や query_param
にutf8フラグったの渡すとこけたり、foo=bar&foo=baz
のように配列になるべきものがうまくハッシュにできなかったりとかしてこんなに長く。
ls *.pl
ホームディレクトリには何も置いてないのだけど、~/temp
でやったら
$ ls *.pl
array.pl flickrtoken.pl mua_list.pl proxy.pl test_gmail2.pl
atomclient.pl geo.pl musicsync.pl require.pl test_utf8.pl
atomtest.pl gmail.pl num.pl stdin.pl testdns.pl
classdata.pl import.pl* orz.pl super.pl testmore.pl
daap-server.pl love.pl overload.pl syntaxhilight.pl testtemp.pl
datetime.pl maketable.pl pathclass.pl termtest.pl under.pl
dbic_test.pl mime.pl plagger_test.pl* test.pl weaken.pl
filetemp.pl mimelite.pl podload.pl test_emacs.pl
find.pl movizotest.pl podtest.pl test_get.pl
flickrtest.pl mua_count.pl postmovie.pl test_gmail.pl
こんなにでた。。
Catalyst::Plugin::Flavour 0.03pre
あぷ。新機能のドキュメント、テスト書いてないので Developer release にしておいてみる(ぉ
いままでは flavour とはいうものの Blosxom とは違い最初のパスを flavour としていたのを、Blosxom 互換な拡張子による方法に対応。
設定で、flavour, flavours_except が定義されていない場合この互換モードになるようにしておいた。
あと最初のパスを flavour にするモードの場合に、いままでは
flavours => [ 'html', 'rss', 'js', ]
などとして定義したものだけを flavour として扱うということをしていたけど、
flavours_except => [ 'about', 'login', ]
などと、特定のパス以外はすべて flavour として扱うオプションも追加。これではてなっぽいアプリが簡単に作れるかね。
あと、date_flavour 機能もつけた。
これは /2005/04/08 などのような日付っぽいURLにアクセスされた場合、$c->flavour->(year|month|day)
に日付を格納し、その日付部分をパスから除く。
この機能はデフォルトONで date_flavour => 0 とすればOFFにできる。
一気に機能追加しすぎてドキュメント書くのがあれすぎる。
しかも日本語の説明でも上記みたいに意味不明になっちゃうのに英語だとどうなっちゃうんだ、という。