Compare commits
3 Commits
74ae6e1745
...
be0b5673de
Author | SHA1 | Date |
---|---|---|
barnold | be0b5673de | |
barnold | 2ac594269d | |
barnold | 6ea53c5657 |
18
lib/MyApp.pm
18
lib/MyApp.pm
|
@ -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,14 +52,15 @@ 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');
|
||||
return undef;
|
||||
}
|
||||
);
|
||||
$auth->get('/account')->to('auth#account');
|
||||
$auth->get('/account')->to('auth#account')->name('account');
|
||||
$auth->post('/preferences')->to('auth#preferences')->name('preferences');
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -26,4 +26,12 @@ sub logout ($self) {
|
|||
$self->redirect_to('home');
|
||||
}
|
||||
|
||||
sub preferences ($self) {
|
||||
$self->session(rows_per_page => $self->param('rows_per_page'));
|
||||
$self->flash(
|
||||
confirmation => sprintf("Updated rows per page to %s.", $self->rpp)
|
||||
);
|
||||
$self->redirect_to('account');
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -13,7 +13,7 @@ sub get_page ($self, $page_number = 1, $name_like = undef) {
|
|||
{ prefetch => [ "books" ],
|
||||
order_by => [ "me.name " ],
|
||||
page => $page_number,
|
||||
rows => 10,
|
||||
rows => $self->rows_per_page,
|
||||
},
|
||||
);
|
||||
return $rs;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
---
|
||||
secrets:
|
||||
- 197b9b0060f3285c0909d83598e54f9ec0602151
|
||||
default-rows-per-page: 10
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
table {
|
||||
border: 1px solid grey;
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Welcome to the Mojolicious real-time web framework!</title>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Welcome to the Mojolicious real-time web framework!</h2>
|
||||
This is the static document "public/index.html",
|
||||
<a href="/">click here</a> to get back to the start.
|
||||
</body>
|
||||
</html>
|
|
@ -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);
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<p/>
|
||||
Page <%= commify($pager->current_page) %>
|
||||
Showing <%= $pager->entries_on_this_page %> items
|
||||
on page <%= commify($pager->current_page) %>
|
||||
of <%= commify($pager->last_page) %>
|
||||
|
||||
|
||||
<% if ($pager->total_entries > rpp) { %>
|
||||
<br/>
|
||||
<%= link_to url_with(page_number => 1) => begin %>◄ First<% end %>
|
||||
|
||||
% if (my $prev = $pager->previous_page) {
|
||||
|
@ -18,3 +20,4 @@ Next ►
|
|||
% }
|
||||
|
||||
<%= link_to url_with(page_number => $pager->last_page) => begin %>Last ►<% end %>
|
||||
<% } %>
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
% layout 'default';
|
||||
% title 'Account';
|
||||
<h1><%= session 'logname' %>'s account on MyApp</h1>
|
||||
<h1><%= logname %>'s account on MyApp</h1>
|
||||
|
||||
Account details here.
|
||||
%= form_for preferences => begin
|
||||
%= label_for rows_per_page => 'Rows per page'
|
||||
<%= number_field rows_per_page => $c->rpp,
|
||||
min => 5, max => 100, maxlength => 4, size => 4 %>
|
||||
%= submit_button "Update"
|
||||
% end
|
||||
<p/>
|
||||
%= flash('confirmation')
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head><title><%= title %></title></head>
|
||||
<head>
|
||||
<title><%= title %></title>
|
||||
<link rel="stylesheet" href="/default.css">
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
<%= content %>
|
||||
|
@ -14,8 +17,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') %>
|
||||
|
|
Loading…
Reference in New Issue