X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FBase.pm;h=18e6f6e2d02ee2bc0a49b7086e94d2ec57a4d7a3;hb=e112461ad1af391bfdc158350bba343a2624c892;hp=addc3ae12e5f7de63f36ec965f592019be8f7482;hpb=5b707014dd4a5a756d22bcafc6c99e2b00a52d06;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Base.pm b/lib/Catalyst/Base.pm index addc3ae..18e6f6e 100644 --- a/lib/Catalyst/Base.pm +++ b/lib/Catalyst/Base.pm @@ -72,10 +72,15 @@ See L Catalyst Base Class +This is the base class for all Catalyst components. It also handles +dispatch of actions for controllers. + =head1 METHODS =head2 $self->action_namespace($c) +Determine the namespace for actions in this component. + =cut sub action_namespace { @@ -86,8 +91,18 @@ sub action_namespace { || ''; } +=head2 $self->path_prefix($c) + +alias for action_namespace + +=cut + +sub path_prefix { shift->action_namespace(@_); } + =head2 $self->register_actions($c) +register all actions for this component based on a given context. + =cut sub register_actions { @@ -163,27 +178,44 @@ sub _parse_Global_attr { return $self->_parse_Path_attr( $c, $name, "/$name" ); } -*_parse_Absolute_attr = \&_parse_Global_attr; +sub _parse_Absolute_attr { shift->_parse_Global_attr(@_); } sub _parse_Local_attr { my ( $self, $c, $name, $value ) = @_; return $self->_parse_Path_attr( $c, $name, $name ); } -*_parse_Relative_attr = \&_parse_Local_attr; +sub _parse_Relative_attr { shift->_parse_Local_attr(@_); } sub _parse_Path_attr { my ( $self, $c, $name, $value ) = @_; $value ||= ''; if ( $value =~ m!^/! ) { return ( 'Path', $value ); - } elsif ( length $value ) { - return ( 'Path', join( '/', $self->action_namespace($c), $value ) ); - } else { - return ( 'Path', $self->action_namespace($c) ); + } + elsif ( length $value ) { + return ( 'Path', join( '/', $self->path_prefix($c), $value ) ); + } + else { + return ( 'Path', $self->path_prefix($c) ); } } +sub _parse_Regex_attr { + my ( $self, $c, $name, $value ) = @_; + return ( 'Regex', $value ); +} + +sub _parse_Regexp_attr { shift->_parse_Regex_attr(@_); } + +sub _parse_LocalRegex_attr { + my ( $self, $c, $name, $value ) = @_; + unless ( $value =~ s/^\^// ) { $value = "(?:.*?)$value"; } + return ( 'Regex', '^' . $self->path_prefix($c) . "/${value}" ); +} + +sub _parse_LocalRegexp_attr { shift->_parse_LocalRegex_attr(@_); } + =head1 SEE ALSO L, L.