More on rows-per-page...

Added helpers and updated MyModel with a view to making rows-per-page
a user preference.
This commit is contained in:
barnold 2022-09-19 10:04:57 +01:00
parent 74ae6e1745
commit 6ea53c5657
8 changed files with 40 additions and 9 deletions

View File

@ -10,6 +10,19 @@ sub add_my_helpers ($self) {
return scalar reverse $rev;
}
);
$self->helper(
default_rpp => sub ($self) {
return $self->config->{'default-rows-per-page'};
}
);
$self->helper(
logname => sub ($self) { $self->session('logname'); }
);
$self->helper(
rpp => sub ($self) {
$self->session('rows_per_page') // $self->default_rpp;
}
);
return;
}
@ -39,7 +52,7 @@ sub startup ($self) {
# Put a route under athentication.
my $auth = $r->under(
'/' => sub ($c) {
return 1 if ($c->session('logname'));
return 1 if ($c->logname);
$c->flash('naughty' => 1);
$c->session('post_login' => $c->current_route);
$c->redirect_to('auth');

View File

@ -5,8 +5,11 @@ use MyModel::Author;
sub books ($self) {
my $page_number = $self->param('page_number') // 1;
my $book_model = MyModel::Book->new;
my $book_page = $book_model->get_page($page_number, $self->param('title_like'));
my $book_model = MyModel::Book->new(rows_per_page => $self->rpp);
my $book_page = $book_model->get_page(
$page_number,
$self->param('title_like'),
);
$self->render(
book_page => $book_page,
pager => $book_page->pager,
@ -15,7 +18,7 @@ sub books ($self) {
sub authors ($self) {
my $page_number = $self->param('page_number') // 1;
my $author_model = MyModel::Author->new;
my $author_model = MyModel::Author->new(rows_per_page => $self->rpp);;
my $author_page = $author_model->get_page(
$page_number,
$self->param('name_like'),

View File

@ -1,10 +1,24 @@
package MyModel;
use feature qw( signatures );
use Moose;
use Moose::Util::TypeConstraints;
use Mojo::Log;
use Book::Schema;
use List::Util qw( max min );
no warnings qw( experimental::signatures );
# Keep rows-per-page within a sane range.
subtype 'RowsPerPage',
as 'Int',
where { 5 <= $_ && $_ <= 100 };
has 'rows_per_page' => (
is => 'rw',
isa => 'RowsPerPage',
required => 1,
default => 20,
);
our $logger = Mojo::Log->new;
# Share this among all model instances.

View File

@ -18,7 +18,7 @@ sub get_page ($self, $page_number = 1, $title_like = undef) {
{ prefetch => [ "author" ],
order_by => [ "me.title " ],
page => $page_number,
rows => 10,
rows => $self->rows_per_page,
},
);
return $rs;

View File

@ -1,3 +1,4 @@
---
secrets:
- 197b9b0060f3285c0909d83598e54f9ec0602151
default-rows-per-page: 10

View File

@ -10,7 +10,7 @@ $t->get_ok('/about')->status_is(200)->content_like(qr/about/i);
$t->get_ok('/account')->status_is(302);
$t->get_ok('/auth')->status_is(200)->content_like(qr/login/i);
$t->post_ok('/login' => form => { logname => 'Dobby' });
$t->get_ok('/')->status_is(200)->content_like(qr/dobby/i);
$t->get_ok('/account')->status_is(200)->content_like(qr/dobby/i);
$t->get_ok('/books/1')->status_is(200)->content_like(qr/[[:digit:]] books found/i);
$t->get_ok('/authors/1')->status_is(200)->content_like(qr/[[:digit:]] authors found/i);
$t->get_ok('/logout')->status_is(302);

View File

@ -1,5 +1,5 @@
% layout 'default';
% title 'Account';
<h1><%= session 'logname' %>'s account on MyApp</h1>
<h1><%= logname %>'s account on MyApp</h1>
Account details here.

View File

@ -14,8 +14,8 @@
<% } %>
</div>
<div>
<% if (session('logname')) { %>
You are logged in as <%= session 'logname' %>.
<% if (logname) { %>
You are logged in as <%= logname %>.
<%= link_to("Logout" => 'logout') %>
<% } elsif (current_route ne 'auth') { %>
<%= link_to("Login" => 'auth') %>