Amon2
view release on metacpan or search on metacpan
lib/Amon2/Web.pm view on Meta::CPAN
margin-bottom: 40px;
}
.message {
font-size: 400%;
}
</style>
</head>
<body>
<div class="number">$codestr</div>
<div class="message">$message</div>
</body>
</html>
...
$self->create_response(
$code,
[
'Content-Type' => 'text/html; charset=utf-8',
'Content-Length' => length($content),
],
[$content]
);
}
sub res_403 {
my ($self) = @_;
return $self->create_simple_status_page(403, 'Forbidden');
}
sub res_404 {
my ($self) = @_;
return $self->create_simple_status_page(404, 'File Not Found');
}
sub res_405 {
my ($self) = @_;
return $self->create_simple_status_page(405, 'Method Not Allowed');
}
sub res_500 {
my ($self) = @_;
return $self->create_simple_status_page(500, 'Internal Server Error');
}
sub to_app {
my ($class, ) = @_;
return sub { $class->handle_request(shift) };
}
sub handle_request {
my ($class, $env) = @_;
my $req = $class->create_request($env);
my $self = $class->new(
request => $req,
);
my $guard = $self->context_guard();
my $response;
for my $code ($self->get_trigger_code('BEFORE_DISPATCH')) {
$response = $code->($self);
goto PROCESS_END if Scalar::Util::blessed($response) && $response->isa('Plack::Response');
}
$response = $self->dispatch() or die "cannot get any response";
PROCESS_END:
$self->call_trigger('AFTER_DISPATCH' => $response);
return $response->finalize;
}
sub uri_for {
my ($self, $path, $query) = @_;
my $root = $self->req->{env}->{SCRIPT_NAME} || '/';
$root =~ s{([^/])$}{$1/};
$path =~ s{^/}{};
my @q;
while (my ($key, $val) = each %$query) {
$val = URI::Escape::uri_escape(Encode::encode($self->encoding, $val));
push @q, "${key}=${val}";
}
$root . $path . (scalar @q ? '?' . join('&', @q) : '');
}
sub render {
my $self = shift;
my $html = $self->create_view()->render(@_);
for my $code ($self->get_trigger_code('HTML_FILTER')) {
$html = $code->($self, $html);
}
$html = $self->encode_html($html);
return $self->create_response(
200,
[
'Content-Type' => $self->html_content_type,
'Content-Length' => length($html)
],
$html,
);
}
# You can override this method on your application.
sub encode_html {
my ($self, $html) = @_;
return Encode::encode($self->encoding, $html);
}
1;
__END__
=head1 NAME
Amon2::Web - Web Application Base.
=head1 SYNOPSIS
package MyApp;
use parent qw/Amon2/;
( run in 2.474 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )