package HTML::FormFu::Filter;
use strict;
use Class::C3;
use HTML::FormFu::Attribute qw( mk_accessors );
use HTML::FormFu::ObjectUtil qw(
populate form name parent nested_name nested_names get_nested_hash_value
set_nested_hash_value nested_hash_key_exists );
use Carp qw( croak );
__PACKAGE__->mk_accessors(qw/ type localize_args /);
sub new {
my $class = shift;
my %attrs;
eval { %attrs = %{ $_[0] } if @_ };
croak "attributes argument must be a hashref" if $@;
my $self = bless {}, $class;
if ( exists $attrs{parent} ) {
$self->parent( delete $attrs{parent} );
}
$self->populate( \%attrs );
return $self;
}
sub process {
my ( $self, $result, $params ) = @_;
my $name = $self->nested_name;
my $value = $self->get_nested_hash_value( $params, $name );
my $filtered;
if ( ref $value eq 'ARRAY' ) {
$filtered = [ map { $self->filter( $_, $params ); } @$value ];
}
else {
$filtered = $self->filter( $value, $params );
}
$self->set_nested_hash_value( $params, $name, $filtered );
return;
}
sub clone {
my ($self) = @_;
my %new = %$self;
return bless \%new, ref $self;
}
1;
__END__
=head1 NAME
HTML::FormFu::Filter - Filter Base Class
=head1 SYNOPSIS
---
elements:
- type: Text
name: foo
filters:
- type: Encode
candidates:
- utf8
- Hebrew
- type: Text
name: bar
filters:
- LowerCase
- Encode
filters:
- TrimEdges
=head1 DESCRIPTION
C and C can be called on any L