NAME
Valiant::Validator::With - Filter using a coderef and options opts
SYNOPSIS
package
Local::Test::User;
use
Moo;
use
Valiant::Filters;
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'
);
$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