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;
Published: 2010-03-22(Mon) 13:34