The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package MojoMojo::Extensions::Counter;

use strict;
use warnings;

use base qw(MojoMojo::Extension); # ISA Catalyst::Controller

=head1 Name

MojoMojo::Extensions::Counter - a page counter

=head2 Methods

=head2 index

View page.

=cut

sub index :Path('counter') :Args(0) {
    my ( $self, $c ) = @_;

    $c->detach('view');
}

=head2 view

Add count into the view.

=cut

sub view :Path('counter.view') :Args(0) {
    my ( $self, $c ) = @_;
    @{$c->stash}{qw(current_view template count)} = ('TT', 'extensions/counter.tt', $c->session->{count} || 0);
}

=head2 add

Increment count by 1.

=cut

sub add :Path('counter.add') :Args(0) {
    my ( $self, $c ) = @_;

    my $session = $c->session;
    my $count = $session->{count} || 0;
    $session->{count} = $count + 1;

    $c->res->redirect($c->uri_for('/special/counter'));
}

=head2 subtract

Reduce count by 1.

=cut

sub subtract :Path('counter.subtract') :Args(0) {
    my ( $self, $c ) = @_;

    my $session = $c->session;
    my $count = $session->{count} || 0;
    $session->{count} = $count - 1;

    $c->res->redirect($c->uri_for('/special/counter'));
}

1;