X-Git-Url: https://git.decadent.org.uk/gitweb/?p=maypole.git;a=blobdiff_plain;f=lib%2FMaypole.pm;h=4954ec74cb09747c180e21972e6b65a8d27fc271;hp=c6cef443b397ddf128dc25354cd61553dbf599c2;hb=373c588aa7b5a4f0d99a5940fade8a767c6d9426;hpb=ef6d6cc9adeae9b32f41b1bf388fa1be5013a5c9 diff --git a/lib/Maypole.pm b/lib/Maypole.pm index c6cef44..4954ec7 100644 --- a/lib/Maypole.pm +++ b/lib/Maypole.pm @@ -1,5 +1,4 @@ package Maypole; -use Class::C3; use base qw(Class::Accessor::Fast Class::Data::Inheritable); use UNIVERSAL::require; use strict; @@ -13,7 +12,7 @@ use URI::QueryParam; use NEXT; use File::MMagic::XS qw(:compat); -our $VERSION = '2.12'; +our $VERSION = '2.121'; our $mmagic = File::MMagic::XS->new(); # proposed privacy conventions: @@ -437,8 +436,10 @@ sub handler : method { die "status undefined after start_request_hook()" unless defined $self->status; - $self->session($self->get_session); - $self->user($self->get_user); + my $session = $self->get_session; + $self->session($self->{session} || $session); + my $user = $self->get_user; + $self->user($self->{user} || $user); my $status = $self->handler_guts; return $status unless $status == OK; @@ -462,7 +463,7 @@ to call those actions. You may pass a query string in the usual URL style. You should not fully qualify the Maypole URLs. Note: any HTTP POST or URL parameters passed to the parent are not passed to the -component sub-request, only what is included in the url passed as an argyument +component sub-request, only what is included in the url passed as an argument to the method =cut @@ -983,8 +984,7 @@ properties. Calls C before parsing path and setting properties. =cut -sub parse_path -{ +sub parse_path { my ($self) = @_; # Previous versions unconditionally set table, action and args to whatever @@ -1009,19 +1009,32 @@ sub parse_path =item preprocess_path Sometimes when you don't want to rewrite or over-ride parse_path but -want to rewrite urls or extract data from them before it is parsed. +want to rewrite urls or extract data from them before it is parsed, +the preprocess_path/location methods allow you to munge paths and urls +before maypole maps them to actions, classes, etc. This method is called after parse_location has populated the request information and before parse_path has populated the model and action information, and is passed the request object. You can set action, args or table in this method and parse_path will -then leave those values in place or populate them if not present +then leave those values in place or populate them based on the current +value of the path attribute if they are not present. =cut sub preprocess_path { }; +=item preprocess_location + +This method is called at the start of parse_location, after the headers in, and allows you +to rewrite the url used by maypole, or dynamically set configuration +like the base_uri based on the hostname or path. + +=cut + +sub preprocess_location { }; + =item make_path( %args or \%args or @args ) This is the counterpart to C. It generates a path to use @@ -1045,6 +1058,7 @@ string. =cut + sub make_path { my $r = shift; @@ -1294,9 +1308,9 @@ sub param $self->params->{$key} = $new_val; } - return ref $val ? @$val : ($val) if wantarray; + return (ref $val eq 'ARRAY') ? @$val : ($val) if wantarray; - return ref $val ? $val->[0] : $val; + return (ref $val eq 'ARRAY') ? $val->[0] : $val; }