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 )