X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FRequest.pm;h=21a26bffe3a5d53a43fa49f8138a6cb6d8474210;hb=f3414019f472b55682ef3af53f761b6db7955887;hp=e134fbebc0eea2e625f9cc20aaee79cdac115011;hpb=059c085bfcead450e70ace9ef193aa99ac2ab37d;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Request.pm b/lib/Catalyst/Request.pm index e134fbe..21a26bf 100644 --- a/lib/Catalyst/Request.pm +++ b/lib/Catalyst/Request.pm @@ -1,43 +1,55 @@ package Catalyst::Request; +use Class::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 => ( - is => 'rw', +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 { @@ -46,16 +58,17 @@ 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', @@ -66,9 +79,9 @@ has parameters => ( before parameters => sub { my ($self, $params) = @_; - $self->_context->prepare_body(); + #$self->_context->prepare_body(); if ( $params && !ref $params ) { - $self->_context->log->warn( + $self->_context->log->warn( "Attempt to retrieve '$params' with req->params(), " . "you probably meant to call req->param('$params')" ); $params = undef; @@ -77,14 +90,12 @@ before parameters => sub { }; 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; }, ); @@ -223,7 +234,7 @@ be either a scalar or an arrayref containing scalars. print $c->request->body_parameters->{field}->[0]; These are the parameters from the POST part of the request, if any. - + =head2 $req->body_params Shortcut for body_parameters. @@ -290,7 +301,7 @@ Returns an L object containing the headers for the current reques =head2 $req->hostname Returns the hostname of the client. - + =head2 $req->input Alias for $req->body. @@ -434,10 +445,6 @@ defaults to the size of the request if not specified. 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. @@ -585,4 +592,6 @@ it under the same terms as Perl itself. =cut +__PACKAGE__->meta->make_immutable; + 1;