Bootylicious
view release on metacpan or search on metacpan
bootylicious view on Meta::CPAN
my $timestamp = $self->param('timestamp');
my $pager = $self->get_articles(timestamp => $timestamp);
$self->stash(articles => $pager->articles, pager => $pager);
$self->render_smart('index');
}
get '/articles/:year/:month' => [year => qr/\d+/, month => qr/\d+/] =>
{year => undef, month => undef} => sub {
my $self = shift;
my $year = $self->stash('year');
my $month = $self->stash('month');
my $archive = $self->get_archive(year => $year, month => $month);
$self->stash(archive => $archive);
$self->render_smart;
} => 'articles';
get '/articles/:year/:month/:alias' =>
[year => qr/\d+/, month => qr/\d+/, alias => $ALIAS_RE] => sub {
my $self = shift;
my $article = $self->get_article(@{$self->stash}{qw/year month alias/});
return $self->reply->not_found unless $article;
$self->stash(article => $article);
$self->render_smart;
} => 'article';
post '/articles/:year/:month/:alias/comment' => sub {
my $self = shift;
return $self->reply->not_found unless $self->comments_enabled;
my $article = $self->get_article(@{$self->stash}{qw/year month alias/});
return $self->reply->not_found unless $article && $article->comments_enabled;
my $validator = $self->create_validator;
my $comment_name = md5_sum($article->created->year, $article->created->month, $article->name);
$validator->field('author')->required(1);
$validator->field('email')->email(1);
$validator->field('content')->length(0); # bot protection
$validator->field($comment_name)->required(1);
return $self->render('article', article => $article)
unless $self->validate($validator);
my $comment_params = $validator->values;
$comment_params->{content} = delete $comment_params->{$comment_name};
my $comment = $article->comment(%$comment_params);
return $self->redirect_to($self->href_to_article($article)
->fragment('comment-' . $comment->number));
} => 'comment';
get '/comments' => sub {
my $self = shift;
return $self->reply->not_found unless $self->comments_enabled;
$self->render_smart;
} => 'comments';
get '/tags/:tag' => [tag => $TAG_RE] => sub {
my $self = shift;
my $tag = $self->stash('tag');
my $timestamp = $self->param('timestamp');
my $pager = $self->get_articles_by_tag($tag, timestamp => $timestamp);
return $self->reply->not_found unless $pager->articles->size;
$self->stash(articles => $pager->articles, pager => $pager);
$self->render_smart;
} => 'tag';
get '/tags' => sub {
my $self = shift;
my $cloud = $self->get_tag_cloud;
$self->stash(tags => $cloud);
$self->render_smart;
} => 'tags';
get '/pages/:name' => [name => $ALIAS_RE] => sub {
my $self = shift;
my $name = $self->stash('name');
my $page = $self->get_page($name);
return $self->reply->not_found unless $page;
$self->stash(page => $page);
$self->render_smart;
} => 'page';
get '/drafts/:name' => [name => $ALIAS_RE] => sub {
my $self = shift;
my $name = $self->stash('name');
my $draft = $self->get_draft($name);
return $self->reply->not_found unless $draft;
$self->stash(draft => $draft);
( run in 0.860 second using v1.01-cache-2.11-cpan-364913b4093 )