X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FWeb%2FSimple.pm;h=29c99330c7c5701f834e8deb68a7853e0e2c4710;hb=1cf4503c909a3b4eabf07e7c30f214e8a6da7fa6;hp=c925bda4b3d2a4c44618a36a8e6eb1500b0b4168;hpb=ed6e2c15d23a24b24e56c04c00ee799d4f6d7433;p=catagits%2FWeb-Simple.git diff --git a/lib/Web/Simple.pm b/lib/Web/Simple.pm index c925bda..29c9933 100644 --- a/lib/Web/Simple.pm +++ b/lib/Web/Simple.pm @@ -6,7 +6,7 @@ use warnings::illegalproto (); use Moo (); use Web::Dispatch::Wrapper (); -our $VERSION = '0.013'; +our $VERSION = '0.020'; 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 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 and C are different specs As you may have noticed with the difference between C 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 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 Andrew Rodland (hobbs) +Robert Sedlacek (phaylon) + =head1 COPYRIGHT Copyright (c) 2011 the Web::Simple L and L @@ -789,5 +847,3 @@ This library is free software and may be distributed under the same terms as perl itself. =cut - -1;