has
'_base_namespace'
,
is
=>
'ro'
,
isa
=> Str,
default
=>
sub
{
'Rapi::Blog::Template::Postprocessor'
};
has
'_post_processor'
,
is
=>
'rw'
,
isa
=> Maybe[Str],
default
=>
sub
{
undef
};
sub
AUTOLOAD {
my
$self
=
shift
;
my
$method
= (
reverse
(
split
(
'::'
,
our
$AUTOLOAD
)))[0];
$self
->_call_process(
$method
,
@_
)
}
sub
_call_process {
my
(
$self
,
$processor
,
$content
) =
@_
;
die
"ppRender: no Postprocessor and/or content supplied"
unless
(
$processor
);
if
(!
$content
&&
$self
->_post_processor) {
$content
=
$processor
;
$processor
=
$self
->_post_processor
}
$content
//=
''
;
my
$class
=
$processor
=~ /\:\:/
?
$processor
:
join
(
'::'
,
$self
->_base_namespace,
$processor
);
Module::Runtime::require_module(
$class
);
$class
->can(
'process'
) or
die
"$class is not a Template Processor class without a ->process method"
;
my
$content_ref
=
ref
$content
?
$content
: \
$content
;
$class
->process(
$content_ref
)
}
1;