remove an extra mention of uploads being experimental
[catagits/Web-Simple.git] / lib / Web / Simple.pm
index c925bda..53e9eec 100644 (file)
@@ -6,7 +6,7 @@ use warnings::illegalproto ();
 use Moo ();
 use Web::Dispatch::Wrapper ();
 
-our $VERSION = '0.013';
+our $VERSION = '0.018';
 
 sub import {
   my ($class, $app_package) = @_;
@@ -30,6 +30,8 @@ sub _export_into {
   $INC{"${name}.pm"} = 'Set by "use Web::Simple;" invocation';
 }
 
+1;
+
 =head1 NAME
 
 Web::Simple - A quick and easy way to build simple web applications
@@ -398,6 +400,26 @@ subdispatchers to scope common activities.  For example:
 You should note the special case path match C<sub (~)> which is only meaningful
 when it is contained in this type of path match. It matches to an empty path.
 
+=head4 Naming your patch matches
+
+Any */**/*.*/**.* match can be followed with :name to make it into a named
+match, so:
+
+  sub (/*:one/*:two/*:three/*:four) {
+    "I match /1/2/3/4 capturing { one => 1, two =>  2, three => 3, four => 4 }"
+  }
+  
+  sub (/**.*:allofit) {
+    "I match anything capturing { allofit => \$whole_path }"
+  }
+
+In the specific case of a simple single-* match, the * may be omitted, to
+allow you to write:
+
+  sub (/:one/:two/:three/:four) {
+    "I match /1/2/3/4 capturing { one => 1, two =>  2, three => 3, four => 4 }"
+  }
+
 =head4 C</foo> and C</foo/> are different specs
 
 As you may have noticed with the difference between C<sub(/foo/...)> and
@@ -439,8 +461,7 @@ Query and body parameters can be match via
 
 The body spec will match if the request content is either
 application/x-www-form-urlencoded or multipart/form-data - the latter
-of which is required for uploads, which are now handled experimentally
-- see below.
+of which is required for uploads - see below.
 
 The param spec is elements of one of the following forms -
 
@@ -503,11 +524,7 @@ hashref style, the arrayref and single parameters will appear in C<@_> in the
 order you defined them in the protoype, but all hashrefs will merge into a
 single C<$params>, as in the example above.
 
-=head3 Upload matches (EXPERIMENTAL)
-
-Note: This feature is experimental. This means that it may not remain
-100% in its current form. If we change it, notes on updating your code
-will be added to the L</CHANGES BETWEEN RELEASES> section below.
+=head3 Upload matches
 
   sub (*foo=) { # param specifier can be anything valid for query or body
 
@@ -589,6 +606,45 @@ from subroutine prototypes, so this is equivalent to
 
   sub (GET+/user/*) {
 
+=head3 Accessing parameters via C<%_>
+
+If your dispatch specification causes your dispatch subroutine to receive
+a hash reference as its first argument, the contained named parameters
+will be accessible via C<%_>.
+
+This can be used to access your path matches, if they're named:
+
+  sub (GET + /foo/:path_part) {
+    [ 200,
+      ['Content-type' => 'text/plain'],
+      ["We are in $_{path_part}"],
+    ];
+  }
+
+Or, if your first argument would be a hash reference containing named
+query parameters:
+
+  sub (GET + /foo + ?:some_param=) {
+    [ 200,
+      ['Content-type' => 'text/plain'],
+      ["We received $_{some_param} as parameter"],
+    ];
+  }
+
+Of course this also works when all you are doing is slurping the whole set
+of parameters by their name:
+
+  sub (GET + /foo + ?*) {
+    [ 200,
+      ['Content-type' => 'text/plain'],
+      [exists($_{foo}) ? "Received a foo: $_{foo}" : "No foo!"],
+    ],
+  }
+
+Note that only the first hash reference will be avaialble via C<%_>. If
+you receive additional hash references, you will need to access them as
+usual.
+
 =head3 Accessing the PSGI env hash
 
 In some cases you may wish to get the raw PSGI env hash - to do this,
@@ -778,6 +834,8 @@ Robin Edwards <robin.ge@gmail.com>
 
 Andrew Rodland (hobbs) <andrew@cleverdomain.org>
 
+Robert Sedlacek (phaylon) <r.sedlacek@shadowcat.co.uk>
+
 =head1 COPYRIGHT
 
 Copyright (c) 2011 the Web::Simple L</AUTHOR> and L</CONTRIBUTORS>
@@ -789,5 +847,3 @@ This library is free software and may be distributed under the same terms
 as perl itself.
 
 =cut
-
-1;