package Document::Page;
use Moose;
has 'body' => ( is => 'rw', isa => 'Str', default => sub {''} );
sub create {
my $self = shift;
my $arg = shift; warn $arg;
$self->open_page;
inner($arg);
$self->close_page;
}
sub append_body {
my ( $self, $appendage ) = @_;
$self->body( $self->body . $appendage );
}
sub open_page { (shift)->append_body('') }
sub close_page { (shift)->append_body('') }
package Document::PageWithHeadersAndFooters;
use Moose;
extends 'Document::Page';
augment 'create' => sub {
my $self = shift;
my $arg = shift; warn $arg;
$self->create_header;
inner($arg);
$self->create_footer;
};
sub create_header { (shift)->append_body('') }
sub create_footer { (shift)->append_body('') }
package TPSReport;
use Moose;
extends 'Document::PageWithHeadersAndFooters';
augment 'create' => sub {
my $self = shift;
my $arg = shift; warn $arg;
$self->create_tps_report;
inner($arg);
};
sub create_tps_report {
(shift)->append_body('');
}
package main;
#
my $report_xml = TPSReport->new->create('food');
print "$report_xml\n";