Amon::Web::Dispatcher::Lite をかいたこと
Router-Simple をつくったり MojaMoja をかいたりしていたのだが、Amon でかいたちょっとしたアプリで、コントローラクラスが数個にしかならないような規模の場合に、いちいち MyApp::C::* を開いて書くのが面倒なので、Amon::Web::Dispatcher::Lite というのをかいて、これを利用できるようにした。
以下は nopaste っぽいサイトの例だが、てっとりばやくかけてよい。
http://github.com/tokuhirom/p5-OreOre-NoPaste
package OreOre::NoPaste::Web::Dispatcher; use Amon::Web::Dispatcher::Lite -base; use Data::UUID; use Encode; my $uuid_gen = Data::UUID->new; get '/' => sub { render("index.mt"); }; post '/post' => sub { my $body = param_decoded("body") or return redirect('/'); my $uuid = $uuid_gen->create_str(); my $sth = db->insert( entry => { id => $uuid, body => $body, } ); return redirect("/entry/$uuid"); }; get '/entry/{entry_id}' => sub { my ($c, $args) = @_; my $entry_id = $args->{entry_id} or return res_404(); my $entry = db->single( entry => { id => $entry_id, } ); return res_404() unless $entry; return render('show.mt', $entry->body); }; 1;