X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FRequest.pm;h=c85ca09e2fec6e7b0a234e9290d002da1f053d0e;hb=88eee38e25dd1a991008fb5f61b848fcecb97ad0;hp=099b13713dcd02dfcf155bad019b9291f314bb0c;hpb=5fb12dbb7e69039e0ea22ec4d7cb627206b4508b;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Request.pm b/lib/Catalyst/Request.pm index 099b137..c85ca09 100644 --- a/lib/Catalyst/Request.pm +++ b/lib/Catalyst/Request.pm @@ -6,6 +6,7 @@ use utf8; use URI::http; use URI::https; use URI::QueryParam; +use HTTP::Headers; use Moose; @@ -26,11 +27,21 @@ 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 => ( @@ -52,10 +63,11 @@ has uploads => ( 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,7 +78,7 @@ has parameters => ( 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(), " . @@ -432,10 +444,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. @@ -529,7 +537,8 @@ Returns a URI object for the current request. Stringifies to the URI text. =head2 $req->uri_with( { key => 'value' } ); Returns a rewritten URI object for the current request. Key/value pairs -passed in will override existing parameters. Unmodified pairs will be +passed in will override existing parameters. You can remove an existing +parameter by passing in an undef value. Unmodified pairs will be preserved. =cut @@ -539,7 +548,7 @@ sub uri_with { carp( 'No arguments passed to uri_with()' ) unless $args; - for my $value ( values %$args ) { + foreach my $value ( values %$args ) { next unless defined $value; for ( ref $value eq 'ARRAY' ? @$value : $value ) { $_ = "$_"; @@ -547,11 +556,12 @@ sub uri_with { } }; - my $uri = $self->uri->clone; - + my $uri = $self->uri->clone; + my %query = ( %{ $uri->query_form_hash }, %$args ); + $uri->query_form( { - %{ $uri->query_form_hash }, - %$args + # remove undef values + map { defined $query{ $_ } ? ( $_ => $query{ $_ } ) : () } keys %query } ); return $uri; } @@ -572,9 +582,7 @@ Provided by Moose =head1 AUTHORS -Sebastian Riedel, C - -Marcus Ramberg, C +Catalyst Contributors, see Catalyst.pm =head1 COPYRIGHT