package Mojolicious::Plugin::Vparam::Vsort;
use Mojo::Base -strict;
use Mojolicious::Plugin::Vparam::Common;
sub register {
my ($class, $self, $app, $conf) = @_;
# Same as vparams but add standart table sort parameters for:
# ORDER BY, LIMIT, OFFSET
$app->helper(vsort => sub{
my ($self, %attr) = @_;
my $sort = delete $attr{'-sort'};
die 'Key "-sort" must be ArrayRef'
if defined($sort) and 'ARRAY' ne ref $sort;
$attr{ $conf->{vsort_page} } = {
type => 'int',
default => 1,
} if defined $conf->{vsort_page};
$attr{ $conf->{vsort_rws} } = {
type => 'int',
default => $conf->{rows},
} if defined $conf->{vsort_rws};
$attr{ $conf->{vsort_oby} } = {
type => 'int',
default => 0,
post => sub { $sort->[ $_[1] ] or ($_[1] + 1) or 1 },
} if defined $conf->{vsort_oby};
$attr{ $conf->{vsort_ods} } = {
type => 'str',
default => $conf->{ods},
post => sub { uc $_[1] },
regexp => qr{^(?:asc|desc)$}i,
} if defined $conf->{vsort_ods};
my $result = $self->vparams( %attr );
return wantarray ? %$result : $result;
});
return;
}
1;