Solution
view release on metacpan or search on metacpan
lib/Solution/Tag/Assign.pm view on Meta::CPAN
package Solution::Tag::Assign;
{
use strict;
use warnings;
our $VERSION = '0.9.1';
use lib '../../../lib';
use Solution::Error;
use Solution::Utility;
BEGIN { our @ISA = qw[Solution::Tag]; }
Solution->register_tag('assign', __PACKAGE__) if $Solution::VERSION;
sub new {
my ($class, $args) = @_;
raise Solution::ContextError {message => 'Missing template argument',
fatal => 1
}
if !defined $args->{'template'};
raise Solution::ContextError {message => 'Missing parent argument',
fatal => 1
}
if !defined $args->{'parent'};
raise Solution::SyntaxError {
message => 'Missing argument list in ' . $args->{'markup'},
fatal => 1
}
if !defined $args->{'attrs'};
($args->{'variable'}, $args->{'value'}, my $filters)
= split m[\s*[=\|]\s+?],
$args->{'attrs'}, 3;
$args->{'name'} = 'a-' . $args->{'attrs'};
$args->{'filters'} = [];
if ($filters) {
for my $filter (split $Solution::Utility::FilterSeparator,
$filters)
{ my ($filter, $f_args)
= split $Solution::Utility::FilterArgumentSeparator,
$filter, 2;
$filter =~ s[\s*$][]; # XXX - the splitter should clean...
$filter =~ s[^\s*][]; # XXX - ...this up for us.
my @f_args
= $f_args ?
split $Solution::Utility::VariableFilterArgumentParser,
$f_args
: ();
push @{$args->{'filters'}}, [$filter, \@f_args];
}
}
return bless $args, $class;
}
sub render {
my ($self) = @_;
my $var = $self->{'variable'};
my $val = $self->resolve($self->{'value'});
{ # XXX - Duplicated in Solution::Variable::render
FILTER: for my $filter (@{$self->{'filters'}}) {
my ($name, $args) = @$filter;
map { $_ = m[^(['"])(.+)\1\s*$] ? $2 : $self->resolve($_) }
@$args;
PACKAGE: for my $package (@{$self->template->filters}) {
if (my $call = $package->can($name)) {
$val = $call->($val, @$args);
next FILTER;
}
else {
raise Solution::FilterNotFound $name;
}
}
}
}
$self->resolve($var, $val);
return '';
}
}
1;
=pod
=head1 NAME
Solution::Tag::Assign - Variable assignment construct
=head1 Synopsis
{% assign some.variable = 'this value' %}
=head1 Description
( run in 1.708 second using v1.01-cache-2.11-cpan-71847e10f99 )