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 )