HTTP-Throwable
view release on metacpan or search on metacpan
lib/HTTP/Throwable.pm view on Meta::CPAN
package HTTP::Throwable 0.028;
our $AUTHORITY = 'cpan:STEVAN';
use Types::Standard qw(Int Str ArrayRef);
use Moo::Role;
use overload
'&{}' => 'to_app',
'""' => 'as_string',
fallback => 1;
use Plack::Util ();
with 'Throwable';
has 'status_code' => (
is => 'ro',
isa => Int,
builder => 'default_status_code',
);
has 'reason' => (
is => 'ro',
isa => Str,
required => 1,
builder => 'default_reason',
);
has 'message' => (
is => 'ro',
isa => Str,
predicate => 'has_message',
);
# TODO: type this attribute more strongly -- rjbs, 2011-02-21
has 'additional_headers' => ( is => 'ro', isa => ArrayRef );
sub build_headers {
my ($self, $body) = @_;
my @headers;
@headers = @{ $self->body_headers($body) };
if ( my $additional_headers = $self->additional_headers ) {
push @headers => @$additional_headers;
}
return \@headers;
}
sub status_line {
my $self = shift;
my $out = $self->status_code . " " . $self->reason;
$out .= " " . $self->message if $self->message;
return $out;
}
requires 'body';
requires 'body_headers';
requires 'as_string';
sub as_psgi {
my $self = shift;
my $body = $self->body;
my $headers = $self->build_headers( $body );
[ $self->status_code, $headers, [ defined $body ? $body : () ] ];
}
sub to_app {
my $self = shift;
sub { my $env; $self->as_psgi( $env ) }
}
sub is_redirect {
my $status = (shift)->status_code;
return $status >= 300 && $status < 400;
}
sub is_client_error {
my $status = (shift)->status_code;
return $status >= 400 && $status < 500;
}
sub is_server_error {
my $status = (shift)->status_code;
return $status >= 500 && $status < 600;
}
no Moo::Role; 1;
=pod
=encoding UTF-8
( run in 0.462 second using v1.01-cache-2.11-cpan-39bf76dae61 )