Dave Cross: Still Munging Data With Perl: Online event - Mar 17 Learn more

NAME

Valiant::Validator::With - Filter using a coderef and options opts

SYNOPSIS

use Moo;
has 'name' => (is=>'ro', required=>1);
filters name => (
with => {
cb => sub {
my ($class, $attrs, $name, $opts) = @_;
return $attrs->{$name}.$opts->{a};
},
opts => +{ a=>'foo' },
},
with => sub {
my ($class, $attrs, $name) = @_;
return $attrs->{$name}.'bar';
},
with => [sub {
my ($class, $attrs, $name, $opts) = @_;
return $attrs->{$name}.$opts;
}, 'baz'],
);
my $user = Local::Test::User->new(name=>'john');
print $user->name; # 'johnfoobarbaz'

DESCRIPTIONi

this filter allows you to make a custom subroutine reference into a filter, with options options for parameterization. You can use this when you have a very special filter need but don't feel like writing a custom filter by subclassing Valiant::Filter::Each.

Passing parameters to $opts

You can pass parameters to the $opts hashref using the opts argument:

my $filter = sub {
my ($self, $class, $attrs, $attribute_name, $opts) = @_;
my $old_value = $attrs->{$attribute_name};
# ...
return $new_value
};
filters my_attribute => (
with => {
cb => $filter,
opts => {arg => 2000},
},
);

You might find this useful in creating more parametered callbacks. However at this point you might wish to consider just writing a custom filter class.

SHORTCUT FORM

This filter supports the follow shortcut forms:

validates attribute => ( with => sub { my $self = shift; ... }, ... );
validates attribute => ( with => [\&method, [1,2,3]], ... );

Which is the same as:

validates attribute => (
with => {
cb => sub { ... },
},
...
);
validates attribute => (
with => {
cb => \&method,
opts => [1,2,3],
},
...
);

SEE ALSO

Valiant, Valiant::Filter, Valiant::Filter::Each.

AUTHOR

See Valiant

COPYRIGHT & LICENSE

See Valiant