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=7631c860416b1b22db13800631bc810af83e3d28;hp=86ac3b974e14ae4f27276bfa875780ead491ac60;hb=0fc2d522eec43202c21e9f0062e43f10db4d9008;hpb=e5ecd5bc38bac3e2fcfaf643ea2a4c6ab46d7e57 diff --git a/lib/Catalyst/Dispatcher.pm b/lib/Catalyst/Dispatcher.pm index 86ac3b9..7631c86 100644 --- a/lib/Catalyst/Dispatcher.pm +++ b/lib/Catalyst/Dispatcher.pm @@ -18,21 +18,22 @@ use Scalar::Util (); use overload '""' => sub { return ref(shift) }, fallback => 1; +#do these belong as package vars or should we build these via a builder method? # Preload these action types our @PRELOAD = qw/Index Path Regex/; # Postload these action types our @POSTLOAD = qw/Default/; -has _tree => (is => 'rw'); -has _dispatch_types => (is => 'rw'); -has _registered_dispatch_types => (is => 'rw'); -has _method_action_class => (is => 'rw'); -has _action_container_class => (is => 'rw'); -has preload_dispatch_types => (is => 'rw', required => 1, lazy => 1, default => sub { [@PRELOAD] }); -has postload_dispatch_types => (is => 'rw', required => 1, lazy => 1, default => sub { [@POSTLOAD] }); -has _action_hash => (is => 'rw', required => 1, lazy => 1, default => sub { {} }); -has _container_hash => (is => 'rw', required => 1, lazy => 1, default => sub { {} }); +has _tree => (is => 'rw'); +has _dispatch_types => (is => 'rw'); +has _registered_dispatch_types => (is => 'rw'); +has _method_action_class => (is => 'rw'); +has _action_container_class => (is => 'rw'); +has preload_dispatch_types => (is => 'rw', required => 1, lazy => 1, default => sub { [@PRELOAD] }); +has postload_dispatch_types => (is => 'rw', required => 1, lazy => 1, default => sub { [@POSTLOAD] }); +has _action_hash => (is => 'rw', required => 1, lazy => 1, default => sub { {} }); +has _container_hash => (is => 'rw', required => 1, lazy => 1, default => sub { {} }); no Moose; @@ -51,7 +52,7 @@ application based on the attributes you set. =head1 METHODS -=head2 new +=head2 new Construct a new dispatcher. @@ -170,10 +171,11 @@ sub forward { no warnings 'recursion'; - #moose todo: reaching inside another object is bad - local $c->request->{arguments} = \@args; + my $orig_args = $c->request->arguments(); + $c->request->arguments(\@args); $action->dispatch( $c ); - + $c->request->arguments($orig_args); + return $c->state; } @@ -281,7 +283,6 @@ sub prepare_action { unshift @args, $arg; } - #Moose todo: This seems illegible, even if efficient. s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg for grep { defined } @{$req->captures||[]}; $c->log->debug( 'Path is "' . $req->match . '"' ) @@ -306,9 +307,9 @@ 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 path. +Returns the named action by its full path. =cut @@ -518,7 +519,7 @@ sub _load_dispatch_types { for my $type (@types) { my $class = ( $type =~ /^\+(.*)$/ ) ? $1 : "Catalyst::DispatchType::${type}"; - #eval "require $class"; + eval { Class::MOP::load_class($class) }; Catalyst::Exception->throw( message => qq/Couldn't load "$class"/ ) if $@; @@ -530,6 +531,7 @@ sub _load_dispatch_types { return @loaded; } +no Moose; __PACKAGE__->meta->make_immutable; =head2 meta