big kahuna

This commit is contained in:
2026-08-15 23:05:57 -06:00
parent 6fec70c7c8
commit 84893662ca
25 changed files with 3886 additions and 27 deletions

View File

@@ -10,13 +10,18 @@ has h => (
has _request => (
is => 'ro',
init_arg => 'request',
required => 1
required => 1,
handles => [qw(env)]
);
sub new_response {
my ( $self, @args ) = @_;
my $response = $self->_request->new_response(@args);
return CW::Plack::Response->new( response => $response, h => $self->h );
return CW::Plack::Response->new(
request => $self,
response => $response,
h => $self->h
);
}
1;

View File

@@ -1,6 +1,7 @@
package CW::Plack::Response;
use Moo;
use Carp ();
has _response => (
is => 'ro',
@@ -9,15 +10,53 @@ has _response => (
handles => [qw(finalize status body headers header)]
);
has request => (
is => 'ro',
required => 1,
handles => [qw(env)]
);
has h => (
is => 'ro',
required => 1
);
sub template {
my ( $self, $template ) = @_;
my $html = $self->h->html($template);
my ( $self, $template, $ctx ) = @_;
my $html;
# If rendering inline
if ( ref($template) && ref($template) eq 'ARRAY' ) {
$html = $self->h->html($template);
}
elsif ( !ref($template) ) {
$ctx //= {};
$ctx->{env} = $self->env;
## no strict [BuiltinFunctions::ProhibitStringyEval]
my $template_pkg = "CW::Template::$template";
eval "use $template_pkg";
my $layout_pkg =
"CW::Layout::" . ( delete( $ctx->{layout} ) // 'Default' );
## no strict [BuiltinFunctions::ProhibitStringyEval]
eval "use $layout_pkg";
my $layout = $layout_pkg->new(
template => $template_pkg->new( ctx => $ctx ),
ctx => $ctx
);
$html = $self->h->html( $layout->render );
}
else {
Carp::croak("Invalid value passed to template call: $template");
}
$self->_response->header( 'Content-Type' => 'text/html; encoding=utf-8' );
$self->_response->body($html);
return $self;
}