98 lines
2.8 KiB
Perl
98 lines
2.8 KiB
Perl
package MyApp;
|
|
use Mojo::Base 'Mojolicious', -signatures;
|
|
|
|
# Define home-made helpers.
|
|
sub add_my_helpers ($self) {
|
|
$self->helper(
|
|
# Return either the nonnegative integer that $maybe_nn is or
|
|
# resembles, or return undef if it looks bogus. There's surely
|
|
# a utility somewhere to do this already but I didn't find it.
|
|
accept_nnint => sub ($self, $maybe_nn) {
|
|
my $verdict = do {
|
|
if ((defined $maybe_nn) && ($maybe_nn =~ m/^[[:digit:]]+$/)) {
|
|
$maybe_nn;
|
|
} elsif ((!defined $maybe_nn) || ($maybe_nn eq '')) {
|
|
0;
|
|
} else {
|
|
undef;
|
|
}
|
|
};
|
|
return $verdict;
|
|
}
|
|
);
|
|
$self->helper(
|
|
accept_posint => sub ($self, $maybe_nn) {
|
|
my $maybe_pos = $self->accept_nnint($maybe_nn);
|
|
return ((defined $maybe_pos) && 0 < $maybe_pos)
|
|
? $maybe_pos : undef ;
|
|
}
|
|
);
|
|
$self->helper(
|
|
commify => sub ($self, $number) {
|
|
my $rev = reverse $number;
|
|
while ($rev =~ s/(\d{3})(\d)/$1,$2/) {};
|
|
return scalar reverse $rev;
|
|
}
|
|
);
|
|
$self->helper(
|
|
default_rpp => sub ($self) {
|
|
return $self->config->{'default-rows-per-page'};
|
|
}
|
|
);
|
|
$self->helper(
|
|
gutenberg_url => sub ($self, $gid) {
|
|
return "https://gutenberg.org/ebooks/" . $gid;
|
|
}
|
|
);
|
|
$self->helper(
|
|
logname => sub ($self) { $self->session('logname'); }
|
|
);
|
|
$self->helper(
|
|
max_rpp => sub ($self) {
|
|
return $self->config->{'maximum-rows-per-page'};
|
|
}
|
|
);
|
|
$self->helper(
|
|
rpp => sub ($self) {
|
|
$self->session('rows_per_page') // $self->default_rpp;
|
|
}
|
|
);
|
|
$self->helper(
|
|
trct => sub ($self, $str, $len) {
|
|
do {
|
|
if (length($str) <= $len) {
|
|
$str;
|
|
} else {
|
|
substr($str, 0, $len - 1) . '…';
|
|
}
|
|
};
|
|
}
|
|
);
|
|
return;
|
|
}
|
|
|
|
sub startup ($self) {
|
|
# Set a "secret" for signing cookies, preventing "Your secret
|
|
# passphrase needs to be changed" in the log, using my_app.yml.
|
|
my $config = $self->plugin('NotYAMLConfig');
|
|
# Apply local overrides, if any.
|
|
if (-e $self->home->child('local-override.yml')) {
|
|
$config = $self->plugin('NotYAMLConfig', { file => 'local-override.yml' });
|
|
}
|
|
$self->secrets([ $config->{secrets} ]);
|
|
|
|
# Add home-made helper(s).
|
|
$self->add_my_helpers;
|
|
|
|
# Set routes.
|
|
my $r = $self->routes;
|
|
$r->get('/<page_number:num>')->to('book#books', page_number => 1)->name('books');
|
|
$r->get('/about')->to('book#about')->name('about');
|
|
$r->get('/authors/<page_number:num>')
|
|
->to('book#authors', page_number => 1)->name('authors');
|
|
$r->get('/author/<id:num>/<page_number:num>')->to('book#author')->name('author');
|
|
$r->post('/set_rpp')->to('book#set_rpp')->name('set_rpp');
|
|
}
|
|
|
|
1;
|