X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FDispatcher.pm;h=08a4248e0d4f066513d76e02c629515dcb44ead7;hp=c06c2a4f7ec315054e4ad6b24a68c4e0f3d70006;hb=7b442de55a57592a0a9f09db2e85b135bb0c123f;hpb=3cd3bc6ae6c0282f98f1dd65676b98be379933ce diff --git a/lib/Catalyst/Dispatcher.pm b/lib/Catalyst/Dispatcher.pm index c06c2a4..08a4248 100644 --- a/lib/Catalyst/Dispatcher.pm +++ b/lib/Catalyst/Dispatcher.pm @@ -61,7 +61,7 @@ application based on the attributes you set. =head1 METHODS -=head2 new +=head2 new Construct a new dispatcher. @@ -411,7 +411,7 @@ sub get_action { return $self->_action_hash->{"${namespace}/${name}"}; } -=head2 $self->get_action_by_path( $path ); +=head2 $self->get_action_by_path( $path ); Returns the named action by its full private path. @@ -531,9 +531,29 @@ sub register { } } + my @dtypes = @{ $self->_dispatch_types }; + my @normal_dtypes; + my @low_precedence_dtypes; + + for my $type ( @dtypes ) { + if ($type->isa('Catalyst::DispatchType::Index') || + $type->isa('Catalyst::DispatchType::Default')) { + push @low_precedence_dtypes, $type; + } else { + push @normal_dtypes, $type; + } + } + # Pass the action to our dispatch types so they can register it if reqd. - foreach my $type ( @{ $self->_dispatch_types } ) { - $type->register( $c, $action ); + my $was_registered = 0; + foreach my $type ( @normal_dtypes ) { + $was_registered = 1 if $type->register( $c, $action ); + } + + if (not $was_registered) { + foreach my $type ( @low_precedence_dtypes ) { + $type->register( $c, $action ); + } } my $namespace = $action->namespace; @@ -661,7 +681,7 @@ sub _load_dispatch_types { Get the DispatchType object of the relevant type, i.e. passing C<$type> of C would return a L object (assuming -of course it's being used.) +of course it's being used.) =cut @@ -692,12 +712,12 @@ use Moose; # See also t/lib/TestApp/Plugin/AddDispatchTypes.pm # Alias _method_name to method_name, add a before modifier to warn.. -foreach my $public_method_name (qw/ - tree - dispatch_types - registered_dispatch_types - method_action_class - action_hash +foreach my $public_method_name (qw/ + tree + dispatch_types + registered_dispatch_types + method_action_class + action_hash container_hash /) { my $private_method_name = '_' . $public_method_name; @@ -707,7 +727,6 @@ foreach my $public_method_name (qw/ my %package_hash; # Only warn once per method, per package. These are infrequent enough that # I haven't provided a way to disable them, patches welcome. $meta->add_before_method_modifier($public_method_name, sub { - my $class = blessed(shift); my $class = caller(2); chomp($class); $package_hash{$class}++ || do { @@ -732,7 +751,7 @@ Catalyst Contributors, see Catalyst.pm =head1 COPYRIGHT -This program is free software, you can redistribute it and/or modify it under +This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. =cut