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 )