=head1 NAME

APR::Emulate::PSGI - Class that Emulates the mod_perl2 APR Object (Apache2::RequestRec, et al)

=head1 SYNOPSIS

  use APR::Emulate::PSGI;
  my $r = APR::Emulate::PSGI->new($psgi_env);

  # Or in a CGI environment:
  my $r = APR::Emulate::PSGI->new();

=head1 DESCRIPTION

This class emulates the mod_perl2 APR object.  It expects either a
PSGI environment hashref to be passed in, or to read HTTP environment
information from the global %ENV.

Currently this module is little more than a proof of concept.  There
are rough edges.

Use at your own discretion.  Contributions welcome.


=cut

=head1 METHODS

=over 4

=item new

Creates an object that emulates the mod_perl2 APR object.

    my $r = APR::Emulate::PSGI->new($psgi_env);

HTTP environment information is read from the PSGI environment that is
passed in as a parameter.  If no PSGI environment is supplied,
environment information is read from the global %ENV.


=cut

=item psgi_status

Returns the numeric HTTP response that should be used when building
a PSGI response.

    my $status = $r->psgi_status();

The value is determined by looking at the current value of L</status_line>,
or if that is not set, the current value of L</status>, or if that is not
set, defaults to 200.


=cut

=item psgi_headers

Returns an arrayref of headers which can be used when building a PSGI
response.

A Content-Length header is not included, and must be added in accordance
with the L<PSGI> specification, while building the PSGI response.

    my $headers_arrayref = $r->psgi_headers();


=cut

=back

=head2 Request Methods

=over 4

=item headers_in

Emulates L<Apache2::RequestRec/headers_in>.


=cut

=item method

Emulates L<Apache2::RequestRec/method>.


=cut

=item uri

Emulates L<Apache2::RequestRec/uri>.


=cut

=item parsed_uri

Emulates L<Apache2::URI/parsed_uri>.


=cut

=item args

Emulates L<Apache2::RequestRec/args>.


=cut

=item read

Emulates L<Apache2::RequestIO/read>.


=cut

=item pool

Emulates L<Apache2::RequestRec/pool>.


=cut

=back

=head2 Response Methods

=over 4

=item headers_out

Emulates L<Apache2::RequestRec/headers_out>.


=cut

=item err_headers_out

Emulates L<Apache2::RequestRec/err_headers_out>.


=cut

=item no_cache

Emulates L<Apache2::RequestUtil/no_cache>.


=cut

=item status

Emulates L<Apache2::RequestRec/status>.


=cut

=item status_line

Emulates L<Apache2::RequestRec/status_line>.


=cut

=item content_type

Emulates L<Apache2::RequestRec/content_type>.

If no PSGI enviroment is provided to L</new>, calling this
method with a parameter will cause HTTP headers to be sent.


=cut

=item print

Emulates L<Apache2::RequestIO/print>.


=cut

=item rflush

Emulates L<Apache2::RequestIO/rflush>.


=cut

=back


=cut

=head1 SEE ALSO

=over 4

=item Plack

=item CGI::Emulate::PSGI

=back

=head1 AUTHOR

Nathan Gray, E<lt>kolibrie@cpan.orgE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2013, 2014 by Nathan Gray

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.14.2 or,
at your option, any later version of Perl 5 you may have available.


=cut