The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
# ABSTRACT: Wrap HTTP::Tiny response as objects with accessors
our $VERSION = '0.006';
# Declare custom accessor before Class::Tiny loads
use subs 'headers';
use Class::Tiny 1.000 qw( success url status reason content protocol headers );
#pod =attr success
#pod
#pod =attr url
#pod
#pod =attr protocol
#pod
#pod =attr status
#pod
#pod =attr reason
#pod
#pod =attr content
#pod
#pod =attr headers
#pod
#pod =method header
#pod
#pod $response->header( "Content-Length" );
#pod
#pod Return a header out of the headers hash. The field is case-insensitive. If
#pod the header was repeated, the value returned will be an array reference.
#pod Otherwise it will be a scalar value.
#pod
#pod =cut
# Don't return the original hash reference because the caller could
# alter that referred-to hash, which in turn would alter this object's
# internals, which we almost certainly do not want!
sub headers {
my ($self) = @_;
my $headers = $self->{headers};
my %copy;
while ( my ( $k, $v ) = each %$headers ) {
$copy{$k} = ref($v) eq 'ARRAY' ? [@$v] : $v;
}
return \%copy;
}
sub header {
my ( $self, $field ) = @_;
# NB: lc() can potentially use non-English (e.g., Turkish)
# lowercasing logic, which we very likely do not want here.
$field =~ tr/A-Z/a-z/;
# We don't return the original array reference for the same reason
# why headers() doesn't return the original hash reference.
my $hdr = $self->{headers}{$field};
return ref($hdr) eq 'ARRAY' ? [@$hdr] : $hdr;
}
1;
# vim: ts=4 sts=4 sw=4 et:
__END__
=pod
=encoding UTF-8
=head1 NAME
HTTP::Tiny::UA::Response - Wrap HTTP::Tiny response as objects with accessors
=head1 VERSION
version 0.006
=head1 SYNOPSIS
my $res = HTTP::Tiny::UA->new->get( $url );
if ( $res->success ) {
say "Got " . $res->header("Content-Length") . " bytes";
}
=head1 DESCRIPTION
This module wraps an L<HTTP::Tiny> response as an object to provide some
accessors and convenience methods.
=head1 ATTRIBUTES
=head2 success
=head2 url
=head2 protocol
=head2 status
=head2 reason
=head2 content
=head2 headers
=head1 METHODS
=head2 header
$response->header( "Content-Length" );
Return a header out of the headers hash. The field is case-insensitive. If
the header was repeated, the value returned will be an array reference.
Otherwise it will be a scalar value.
=for Pod::Coverage BUILD
=head1 AUTHOR
David Golden <dagolden@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2013 by David Golden.
This is free software, licensed under:
The Apache License, Version 2.0, January 2004
=cut