Amon2
view release on metacpan or search on metacpan
lib/Amon2/Web.pm view on Meta::CPAN
}
# -------------------------------------------------------------------------
# Attributes:
sub request { $_[0]->{request} }
sub req { $_[0]->{request} }
# -------------------------------------------------------------------------
# Methods:
sub redirect {
my ($self, $location, $params) = @_;
my $url = do {
if ($location =~ m{^https?://}i) {
$location;
} else {
my $url = $self->request->base;
$url =~ s{/+$}{};
$location =~ s{^/+([^/])}{/$1};
$url .= $location;
}
};
if (my $ref_params = ref $params) {
if ($ref_params eq 'ARRAY') {
my $uri = URI->new($url);
$uri->query_form($uri->query_form, map { Encode::encode($self->encoding, $_) } @$params);
$url = $uri->as_string;
} elsif ($ref_params eq 'HASH') {
my @ary;
my $encoding = $self->encoding;
while (my ($k, $v) = each %$params) {
push @ary, Encode::encode($encoding, $k);
push @ary, Encode::encode($encoding, $v);
}
my $uri = URI->new($url);
$uri->query_form($uri->query_form, @ary);
$url = $uri->as_string;
}
}
return $self->create_response(
302,
['Location' => $url],
[]
);
}
sub create_simple_status_page {
my ($self, $code, $message) = @_;
my $codestr = Plack::Util::encode_html($code);
$message = Plack::Util::encode_html($message);
my $content = <<"...";
<!doctype html>
<html>
<head>
<meta charset=utf-8 />
<title>$codestr $message</title>
<style type="text/css">
body {
text-align: center;
font-family: 'Menlo', 'Monaco', Courier, monospace;
background-color: whitesmoke;
padding-top: 10%;
}
.number {
font-size: 800%;
font-weight: bold;
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,
);
( run in 1.294 second using v1.01-cache-2.11-cpan-f56aa216473 )