Moonshine-Template
view release on metacpan or search on metacpan
lib/Moonshine/Template.pm view on Meta::CPAN
package Moonshine::Template;
use strict;
use warnings;
our $VERSION = '0.06';
use Moonshine::Element;
use Ref::Util qw/:all/;
use Hash::Merge qw/merge/;
use Hash::Util qw/unlock_hashref/;
our @ISA;
BEGIN { @ISA = ('UNIVERSAL::Object') }
our %HAS;
BEGIN {
%HAS = ( base_element => sub { undef } );
}
sub BUILD {
my ( $self, $build_args ) = @_;
unlock_hashref($self);
my $config = $self->_merge_configs( $build_args->{config} // {} );
my $base_element = $self->add_base_element( $build_args->{base_element}
// delete $config->{base_element} );
if ( defined $config ) {
$config = $self->_process_config( $config, $base_element );
}
die "build_html is not defined" unless $self->can('build_html');
if ( is_blessed_ref($base_element) ) {
$self->{base_element} = $base_element;
}
$base_element =
$self->build_html( $self->_return_base_element($base_element) );
$self->{base_element} = $base_element;
return $self;
}
sub add_base_element {
my ( $self, $base_element_args ) = @_;
if ( $self->can('base_element') ) {
$base_element_args = merge( $self->base_element, $base_element_args );
}
if ( is_hashref($base_element_args) ) {
return
defined $base_element_args->{template}
? $base_element_args->{template}
->new( $base_element_args->{template_args} // {} )
: Moonshine::Element->new($base_element_args);
}
return undef;
}
sub render {
return $_[0]->{base_element}->render;
}
( run in 0.835 second using v1.01-cache-2.11-cpan-0b5f733616e )