DTL-Fast

 view release on metacpan or  search on metacpan

lib/DTL/Fast/FilterManager.pm  view on Meta::CPAN

    }

    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;

    my @arguments = split /\s*\:\s*/x, $self->backup_strings($filter_name);
    $filter_name = shift @arguments;

    if (
        not exists $DTL::Fast::FILTER_HANDLERS{$filter_name}
            and exists $DTL::Fast::KNOWN_FILTERS{$filter_name}
    )
    {
        require Module::Load;
        Module::Load::load($DTL::Fast::KNOWN_FILTERS{$filter_name});
        $DTL::Fast::LOADED_MODULES{$DTL::Fast::KNOWN_FILTERS{$filter_name}} = time;
    }

    if (exists $DTL::Fast::FILTER_HANDLERS{$filter_name})
    {
        my $args = [ ];

        foreach my $argument (@arguments)
        {
            push @$args, $self->get_backup_or_variable($argument) // $argument;
        }

        push @{$self->{filters}}, $DTL::Fast::FILTER_HANDLERS{$filter_name}->new($args);

        $self->{filters_number}++;
    }
    else
    {
        warn $self->get_parse_error( "unknown filter $filter_name" );
    }

    return $self;
}

1;



( run in 0.946 second using v1.01-cache-2.11-cpan-39bf76dae61 )