DTL-Fast
view release on metacpan or search on metacpan
lib/DTL/Fast/FilterManager.pm view on Meta::CPAN
package DTL::Fast::FilterManager;
use strict;
use utf8;
use warnings FATAL => 'all';
use parent 'DTL::Fast::Replacer';
use DTL::Fast::Template;
use Scalar::Util qw(weaken);
sub new
{
my ( $proto, %kwargs ) = @_;
$proto = ref $proto || $proto;
my $self = $proto->SUPER::new(
filters => [ ],
filters_number => 0,
replacement => $kwargs{replacement}, # if strings were back-uped before
);
if ($self->{replacement})
{
weaken($self->{replacement});
}
if ($kwargs{filters})
{
if (ref $kwargs{filters} eq 'ARRAY')
{
$self->add_filters($kwargs{filters});
}
else
{
$self->parse_filters($kwargs{filters});
}
}
return $self;
}
sub filter
{
my $self = shift;
my $value = shift;
my $context = shift;
$self->{safe} = 0;
foreach my $filter (@{$self->{filters}})
{
$value = $filter->filter($self, $value, $context)
if (defined $filter);
}
return $value;
}
sub parse_filters
{
my $self = shift;
my $filter_string = shift;
$filter_string =~ s/(^\s+|\s+$)//gsi;
return $self->add_filters([ split /\s*\|+\s*/x, $filter_string ]);
}
sub add_filters
{
my $self = shift;
my $filter_names = shift;
foreach my $filter_name (@$filter_names)
{
$self->add_filter($filter_name);
}
return $self;
}
sub add_filter
{
my $self = shift;
my $filter_name = shift;
( run in 2.206 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )