Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
split up name listing into passed and failed methods for validated pa…
…rameters
  • Loading branch information
kraih committed Feb 23, 2015
1 parent 61f1e70 commit adb21cd
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 27 deletions.
4 changes: 2 additions & 2 deletions Changes
Expand Up @@ -3,7 +3,7 @@
- Code name "Clinking Beer Mugs", this is a major release.
- Removed name listing support from param method in Mojolicious::Controller.
- Removed name listing support from param method in Mojo::Parameters.
- Removed name listing support from param method in
- Removed name listing support from error and param methods in
Mojolicious::Validator::Validation.
- Removed multi-name support from cookie, param and signed_cookie methods in
Mojolicious::Controller.
Expand All @@ -24,7 +24,7 @@
Mojolicious::Controller.
- Removed deprecated keep_alive_requests setting from Hypnotoad.
- Added names method to Mojo::Parameters.
- Added names method to Mojolicious::Validator::Validation.
- Added failed and passed methods to Mojolicious::Validator::Validation.

5.82 2015-02-22
- Deprecated Mojo::Reactor::is_readable.
Expand Down
42 changes: 23 additions & 19 deletions lib/Mojolicious/Validator/Validation.pm
Expand Up @@ -43,13 +43,10 @@ sub csrf_protect {
}

sub error {
my $self = shift;

return [sort keys %{$self->{error}}] unless defined(my $name = shift);
my ($self, $name) = (shift, shift);
return $self->{error}{$name} unless @_;
$self->{error}{$name} = shift;
delete $self->output->{$name};

return $self;
}

Expand All @@ -58,14 +55,14 @@ sub every_param {
return [ref $value eq 'ARRAY' ? @$value : $value];
}

sub failed { [sort keys %{shift->{error}}] }

sub has_data { !!keys %{shift->input} }

sub has_error { $_[1] ? exists $_[0]{error}{$_[1]} : !!keys %{$_[0]{error}} }

sub is_valid { exists $_[0]->output->{$_[1] // $_[0]->topic} }

sub names { [sort keys %{shift->output}] }

sub optional {
my ($self, $name) = @_;

Expand All @@ -79,6 +76,8 @@ sub optional {

sub param { shift->every_param(shift)->[-1] }

sub passed { [sort keys %{shift->output}] }

sub required {
my ($self, $name) = @_;
return $self if $self->optional($name)->is_valid;
Expand Down Expand Up @@ -169,16 +168,12 @@ Validate C<csrf_token> and protect from cross-site request forgery.
=head2 error
my $names = $validation->error;
my $err = $validation->error('foo');
$validation = $validation->error(foo => ['custom_check']);
Get or set details for failed validation check, at any given time there can
only be one per field.
# Names of all parameters that failed validation
say for @{$validation->error};
# Details about failed validation
my ($check, $result, @args) = @{$validation->error('foo')};
Expand All @@ -192,6 +187,15 @@ array reference.
# Get first value
my $first = $validation->every_param('foo')->[0];
=head2 failed
my $names = $validation->failed;
Return a list of all names for parameters that failed validation.
# Names of all parameters that failed
say for @{$validation->failed};
=head2 has_data
my $bool = $validation->has_data;
Expand All @@ -213,15 +217,6 @@ Check if validation resulted in errors, defaults to checking all fields.
Check if validation was successful and field has a value, defaults to checking
the current L</"topic">.
=head2 names
my $names = $validation->names;
Return a list of all validated parameter names.
# Names of all parameters that passed validation
say for @{$validation->names};
=head2 optional
$validation = $validation->optional('foo');
Expand All @@ -236,6 +231,15 @@ Access validated parameters. If there are multiple values sharing the same
name, and you want to access more than just the last one, you can use
L</"every_param">.
=head2 passed
my $names = $validation->passed;
Return a list of all names for parameters that passed validation.
# Names of all parameters that passed
say for @{$validation->passed};
=head2 required
$validation = $validation->required('foo');
Expand Down
12 changes: 6 additions & 6 deletions t/mojolicious/validation_lite_app.t
Expand Up @@ -32,20 +32,20 @@ my $t = Test::Mojo->new;

# Required and optional values
my $validation = $t->app->validation->input({foo => 'bar', baz => 'yada'});
is_deeply $validation->names, [], 'no names';
is_deeply $validation->error, [], 'no names';
is_deeply $validation->passed, [], 'no names';
is_deeply $validation->failed, [], 'no names';
is $validation->param('foo'), undef, 'no value';
is_deeply $validation->every_param('foo'), [], 'no values';
ok $validation->required('foo')->is_valid, 'valid';
is_deeply $validation->output, {foo => 'bar'}, 'right result';
is $validation->param('foo'), 'bar', 'right value';
is_deeply $validation->every_param('foo'), ['bar'], 'right values';
is_deeply $validation->names, ['foo'], 'right names';
is_deeply $validation->passed, ['foo'], 'right names';
ok !$validation->has_error, 'no error';
ok $validation->optional('baz')->is_valid, 'valid';
is_deeply $validation->output, {foo => 'bar', baz => 'yada'}, 'right result';
is $validation->param('baz'), 'yada', 'right value';
is_deeply $validation->names, [qw(baz foo)], 'right names';
is_deeply $validation->passed, [qw(baz foo)], 'right names';
ok !$validation->has_error, 'no error';
ok !$validation->optional('does_not_exist')->is_valid, 'not valid';
is_deeply $validation->output, {foo => 'bar', baz => 'yada'}, 'right result';
Expand All @@ -71,7 +71,7 @@ ok !$validation->optional('yada')->equal_to('foo')->is_valid, 'not valid';
is_deeply $validation->output, {foo => 'bar'}, 'right result';
ok $validation->has_error, 'has error';
is_deeply $validation->error('yada'), [qw(equal_to 1 foo)], 'right error';
is_deeply $validation->error, [qw(baz yada)], 'right names';
is_deeply $validation->failed, [qw(baz yada)], 'right names';

# In
$validation = $t->app->validation->input(
Expand All @@ -85,7 +85,7 @@ ok !$validation->required('baz')->in(qw(yada whatever))->is_valid, 'not valid';
is_deeply $validation->output, {foo => [qw(bar whatever)]}, 'right result';
ok $validation->has_error, 'has error';
is_deeply $validation->error('baz'), [qw(in 1 yada whatever)], 'right error';
is_deeply $validation->error, ['baz'], 'right names';
is_deeply $validation->failed, ['baz'], 'right names';

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

0 comments on commit adb21cd

Please sign in to comment.