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;
},
);
present.
http://localhost/path?some+keywords
-
+
$c->request->query_keywords will contain 'some keywords'
=head2 $req->match
=head2 $req->param
-Returns GET and POST parameters with a CGI.pm-compatible param method. This
+Returns GET and POST parameters with a CGI.pm-compatible param method. This
is an alternative method for accessing parameters in $c->req->parameters.
$value = $c->request->param( 'foo' );
print $c->request->query_parameters->{field};
print $c->request->query_parameters->{field}->[0];
-
+
=head2 $req->read( [$maxlength] )
Reads a chunk of data from the request body. This method is intended to be
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.
=head2 $req->uploads
Returns a reference to a hash containing uploads. Values can be either a
-L<Catalyst::Request::Upload> object, or an arrayref of
+L<Catalyst::Request::Upload> object, or an arrayref of
L<Catalyst::Request::Upload> objects.
my $upload = $c->request->uploads->{field};
sub uri_with {
my( $self, $args ) = @_;
-
+
carp( 'No arguments passed to uri_with()' ) unless $args;
for my $value ( values %$args ) {
utf8::encode( $_ ) if utf8::is_utf8($_);
}
};
-
+
my $uri = $self->uri->clone;
-
+
$uri->query_form( {
%{ $uri->query_form_hash },
%$args