Updated Catalyst::Request and Catalyst::Response to have sensible defaults for attributes
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Dispatcher.pm
index 067f721..0818f85 100644 (file)
@@ -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,9 +171,11 @@ sub forward {
 
     no warnings 'recursion';
 
-    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;
 }
 
@@ -280,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 . '"' )
@@ -305,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
 
@@ -529,6 +531,9 @@ sub _load_dispatch_types {
     return @loaded;
 }
 
+no Moose;
+__PACKAGE__->meta->make_immutable;
+
 =head2 meta
 
 Provided by Moose