Fixed docs for comp()
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Request.pm
index 3aaa6af..cd8d20c 100644 (file)
@@ -6,7 +6,7 @@ use base 'Class::Accessor::Fast';
 use IO::Socket qw[AF_INET inet_aton];
 
 __PACKAGE__->mk_accessors(
-    qw/action address arguments base cookies handle headers match method
+    qw/action address arguments cookies headers match method
       protocol query_parameters secure snippets uri user/
 );
 
@@ -44,7 +44,6 @@ Catalyst::Request - Catalyst Request Class
     $req->content_type;
     $req->cookie;
     $req->cookies;
-    $req->handle;
     $req->header;
     $req->headers;
     $req->hostname;
@@ -102,9 +101,40 @@ Returns a reference to an array containing the arguments.
 
     print $c->request->arguments->[0];
 
+For example, if your action was
+
+       package MyApp::C::Foo;
+       
+       sub moose : Local {
+               ...
+       }
+
+And the URI for the request was C<http://.../foo/moose/bah> the string C<bah>
+would be the first and only argument.
+
 =item $req->base
 
-Contains the url base. This will always have a trailing slash.
+Contains the URI base. This will always have a trailing slash.
+
+If your application was queried with the URI C<http://localhost:3000/some/path>
+then C<base> is C<http://localhost:3000/>.
+
+=cut
+
+sub base {
+    my ( $self, $base ) = @_;
+
+    return $self->{base} unless $base;
+
+    $self->{base} = $base;
+
+    # set the value in path for backwards-compat
+    if ( $self->uri ) {
+        $self->path;
+    }
+
+    return $self->{base};
+}
 
 =item $req->body
 
@@ -128,6 +158,8 @@ be either a scalar or an arrayref containing scalars.
 
     print $c->request->body_parameters->{field};
     print $c->request->body_parameters->{field}->[0];
+
+These are the parameters from the POST part of the request, if any.
     
 =item $req->body_params
 
@@ -188,9 +220,8 @@ Returns a reference to a hash containing the cookies.
 
     print $c->request->cookies->{mycookie}->value;
 
-=item $req->handle
-
-Request IO handle.
+The cookies in the hash are indexed by name, and the values are C<CGI::Cookie>
+objects.
 
 =item $req->header
 
@@ -247,10 +278,19 @@ Contains the request method (C<GET>, C<POST>, C<HEAD>, etc).
 Get request parameters with a CGI.pm-compatible param method. This 
 is a method for accessing parameters in $c->req->parameters.
 
-    $value  = $c->request->param('foo');
-    @values = $c->request->param('foo');
+    $value  = $c->request->param( 'foo' );
+    @values = $c->request->param( 'foo' );
     @params = $c->request->param;
 
+Like L<CGI>, and B<unlike> previous versions of Catalyst, passing multiple
+arguments to this method, like this:
+
+       $c->request( 'foo', 'bar', 'gorch', 'quxx' );
+
+will set the parameter C<foo> to the multiple values C<bar>, C<gorch> and
+C<quxx>. Previously this would have added C<bar> as another value to C<foo>
+(creating it if it didn't exist before), and C<quxx> as another value for C<gorch>.
+
 =cut
 
 sub param {
@@ -279,23 +319,9 @@ sub param {
               : $self->parameters->{$param};
         }
     }
-
-    if ( @_ > 1 ) {
-
-        while ( my ( $field, $value ) = splice( @_, 0, 2 ) ) {
-
-            next unless defined $field;
-
-            if ( exists $self->parameters->{$field} ) {
-                for ( $self->parameters->{$field} ) {
-                    $_ = [$_] unless ref($_) eq "ARRAY";
-                    push( @$_, $value );
-                }
-            }
-            else {
-                $self->parameters->{$field} = $value;
-            }
-        }
+    elsif ( @_ > 1 ) {
+        my $field = shift;
+        $self->parameters->{$field} = [@_];
     }
 }
 
@@ -311,6 +337,8 @@ be either a scalar or an arrayref containing scalars.
     print $c->request->parameters->{field};
     print $c->request->parameters->{field}->[0];
 
+This is the combination of C<query_parameters> and C<body_parameters>.
+
 =cut
 
 sub parameters {
@@ -334,19 +362,21 @@ alias for path, added for compability with L<CGI>
 
 sub path {
     my ( $self, $params ) = @_;
-    
-    if ( $params ) {
-        # base must always have a trailing slash
-        $params .= '/' unless ( $params =~ /\/$/ );
-        $self->uri->path( $params );
+
+    if ($params) {
+        $self->uri->path($params);
+    }
+    else {
+        return $self->{path} if $self->{path};
     }
 
-    my $path = $self->uri->path;
+    my $path     = $self->uri->path;
     my $location = $self->base->path;
     $path =~ s/^(\Q$location\E)?//;
     $path =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
     $path =~ s/^\///;
-    
+    $self->{path} = $path;
+
     return $path;
 }
 
@@ -361,6 +391,9 @@ be either a scalar or an arrayref containing scalars.
 
     print $c->request->query_parameters->{field};
     print $c->request->query_parameters->{field}->[0];
+
+These are the parameters from the query string portion of the request's URI, if
+any.
     
 =item $req->read( [$maxlength] )
 
@@ -380,7 +413,7 @@ Shortcut to $req->headers->referer. Referring page.
 
 =item $req->secure
 
-Contains a boolean whether the communciation is secure.
+Contains a boolean denoting whether the communication is secure.
 
 =item $req->snippets
 
@@ -469,7 +502,7 @@ Returns a URI object for the request.
 
 =item $req->user
 
-Contains the user name of user if authentication check was successful.
+Returns the user.
 
 =item $req->user_agent