Skip to content

Commit

Permalink
added num check to Mojolicious::Validator::Validation
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed Nov 14, 2017
1 parent 56fdbf9 commit 420cfcf
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
3 changes: 2 additions & 1 deletion Changes
@@ -1,5 +1,6 @@

7.56 2017-11-12
7.56 2017-11-14
- Added num check to Mojolicious::Validator.
- Improved built-in templates with high resolution logos.

7.55 2017-11-06
Expand Down
14 changes: 14 additions & 0 deletions lib/Mojolicious/Validator.pm
Expand Up @@ -9,6 +9,7 @@ has checks => sub {
equal_to => \&_equal_to,
in => \&_in,
like => sub { $_[2] !~ $_[3] },
num => \&_num,
size => \&_size,
upload => sub { !ref $_[2] || !$_[2]->isa('Mojo::Upload') }
};
Expand All @@ -34,6 +35,12 @@ sub _in {
return 1;
}

sub _num {
my ($validation, $name, $value, $min, $max) = @_;
return 1 if $value !~ /^\d+$/;
return defined $min && $max ? $min > $value || $max < $value : undef;
}

sub _size {
my ($validation, $name, $value, $min, $max) = @_;
my $len = ref $value ? $value->size : length $value;
Expand Down Expand Up @@ -86,6 +93,13 @@ String value needs to match one of the values in the list.
String value needs to match the regular expression.
=head2 num
$validation = $validation->num;
$validation = $validation->num(2, 5);
String value needs to be numeric and if provided in the given range.
=head2 size
$validation = $validation->size(2, 5);
Expand Down
21 changes: 21 additions & 0 deletions t/mojolicious/validation_lite_app.t
Expand Up @@ -125,6 +125,27 @@ is_deeply $validation->output, {foo => 'bar'}, 'right result';
ok $validation->has_error, 'has error';
is_deeply $validation->error('baz'), ['like', 1, $re], 'right error';

# Num
$validation = $t->app->validation->input({foo => 23, bar => 0, baz => 'fail'});
ok $validation->required('foo')->num->is_valid, 'valid';
is_deeply $validation->output, {foo => 23}, 'right result';
ok $validation->required('bar')->num->is_valid, 'valid';
is_deeply $validation->output, {foo => 23, bar => 0}, 'right result';
ok !$validation->has_error, 'no error';
ok !$validation->required('baz')->num->is_valid, 'not valid';
is_deeply $validation->error('baz'), [qw(num 1)], 'right error';
is_deeply $validation->failed, ['baz'], 'right names';
$validation = $t->app->validation->input({foo => 23});
ok $validation->required('foo')->num(22, 24)->is_valid, 'valid';
$validation = $t->app->validation->input({foo => 23});
ok $validation->required('foo')->num(23, 24)->is_valid, 'valid';
$validation = $t->app->validation->input({foo => 23});
ok $validation->required('foo')->num(22, 23)->is_valid, 'valid';
$validation = $t->app->validation->input({foo => 23});
ok !$validation->required('foo')->num(24, 25)->is_valid, 'not valid';
ok $validation->has_error, 'has error';
is_deeply $validation->error('foo'), [qw(num 1 24 25)], 'right error';

# Size
$validation
= $t->app->validation->input({foo => 'bar', baz => 'yada', yada => 'yada'});
Expand Down

0 comments on commit 420cfcf

Please sign in to comment.