package Catalyst::Request;
+use MRO::Compat;
+use mro 'c3';
use IO::Socket qw[AF_INET inet_aton];
use Carp;
use utf8;
use URI::http;
use URI::https;
use URI::QueryParam;
+use HTTP::Headers;
use Moose;
-has action => (is => 'rw');
-has address => (is => 'rw');
-has arguments => (is => 'rw', default => sub { [] });
-has cookies => (is => 'rw', default => sub { {} });
-has query_keywords => (is => 'rw');
-has match => (is => 'rw');
-has method => (is => 'rw');
-has protocol => (is => 'rw');
+has action => (is => 'rw');
+has address => (is => 'rw');
+has arguments => (is => 'rw', default => sub { [] });
+has cookies => (is => 'rw', default => sub { {} });
+has query_keywords => (is => 'rw');
+has match => (is => 'rw');
+has method => (is => 'rw');
+has protocol => (is => 'rw');
has query_parameters => (is => 'rw', default => sub { {} });
-has secure => (is => 'rw', default => 0);
-has captures => (is => 'rw', default => sub { [] });
-has uri => (is => 'rw');
-has user => (is => 'rw');
-has headers => (
+has secure => (is => 'rw', default => 0);
+has captures => (is => 'rw', default => sub { [] });
+has uri => (is => 'rw');
+has user => (is => 'rw');
+has headers => (
is => 'rw',
isa => 'HTTP::Headers',
handles => [qw(content_encoding content_length content_type header referer user_agent)],
+ default => sub { HTTP::Headers->new() },
+ required => 1,
+ lazy => 1,
);
+#Moose ToDo:
+#can we lose the before modifiers which just call prepare_body ?
+#they are wasteful, slow us down and feel cluttery.
+# Can we call prepare_body at BUILD time?
+# Can we make _body an attribute and have the rest of these lazy build from there?
+
has _context => (
is => 'rw',
weak_ref => 1,
+ handles => ['read'],
);
has body_parameters => (
- is => 'rw',
- required => 1,
- lazy => 1,
- default => sub { {} },
+ is => 'rw',
+ required => 1,
+ lazy => 1,
+ default => sub { {} },
);
before body_parameters => sub {
};
has uploads => (
- is => 'rw',
- required => 1,
- lazy => 1,
- default => sub { {} },
+ is => 'rw',
+ required => 1,
+ lazy => 1,
+ default => sub { {} },
);
-before uploads => sub {
- my ($self) = @_;
- $self->_context->prepare_body;
-};
+# modifier was a noop (groditi)
+# before uploads => sub {
+# my ($self) = @_;
+# #$self->_context->prepare_body;
+# };
has parameters => (
is => 'rw',
before parameters => sub {
my ($self, $params) = @_;
- $self->_context->prepare_body();
+ #$self->_context->prepare_body();
if ( $params && !ref $params ) {
$self->_context->log->warn(
"Attempt to retrieve '$params' with req->params(), " .
};
has base => (
- is => 'rw',
- required => 1,
- lazy => 1,
- default => sub {
+ is => 'rw',
+ required => 1,
+ lazy => 1,
+ default => sub {
my $self = shift;
- if( $self->uri ){
- return $self->path;
- }
+ return $self->path if $self->uri;
},
);
You have to set MyApp->config->{parse_on_demand} to use this directly.
-=cut
-
-sub read { shift->_context->read(@_); }
-
=head2 $req->referer
Shortcut for $req->headers->referer. Returns the referring page.