refactored to leave synopsis to the top, and move the rest of the pod to the
[catagits/Catalyst-Runtime.git] / lib / Catalyst / ActionChain.pm
index ceb7c81..2fd63d9 100644 (file)
@@ -3,6 +3,23 @@ package Catalyst::ActionChain;
 use strict;
 use base qw/Catalyst::Action/;
 
+
+=head1 NAME
+
+Catalyst::ActionChain - Chain of Catalyst Actions
+
+=head1 SYNOPSIS
+
+See L<Catalyst::Manual::Intro> for more info about Chained actions.
+
+=head1 DESCRIPTION
+
+This class represents a chain of Catalyst Actions. It behaves exactly like
+the action at the *end* of the chain except on dispatch it will execute all
+the actions in the chain in order.
+
+=cut
+
 __PACKAGE__->mk_accessors(qw/chain/);
 
 use overload (
@@ -18,19 +35,32 @@ use overload (
 
 );
 
-=head1 NAME
-
-Catalyst::ActionChain - Chain of Catalyst Actions
 
-=head1 SYNOPSIS
+sub dispatch {
+    my ( $self, $c ) = @_;
+    my @captures = @{$c->req->captures||[]};
+    my @chain = @{ $self->chain };
+    my $last = pop(@chain);
+    foreach my $action ( @chain ) {
+        my @args;
+        if (my $cap = $action->attributes->{CaptureArgs}) {
+          @args = splice(@captures, 0, $cap->[0]);
+        }
+        local $c->request->{arguments} = \@args;
+        $action->dispatch( $c );
+    }
+    $last->dispatch( $c );
+}
 
-See L<Catalyst>.
+sub from_chain {
+    my ( $self, $actions ) = @_;
+    my $final = $actions->[-1];
+    return $self->new({ %$final, chain => $actions });
+}
 
-=head1 DESCRIPTION
+1;
 
-This class represents a chain of Catalyst Actions. It behaves exactly like
-the action at the *end* of the chain except on dispatch it will execute all
-the actions in the chain in order.
+__END__
 
 =head1 METHODS
 
@@ -44,21 +74,6 @@ objects encapsulated by this chain.
 Dispatch this action chain against a context; will dispatch the encapsulated
 actions in order.
 
-=cut
-
-sub dispatch {
-    my ( $self, $c ) = @_;
-    my @captures = @{$c->req->captures||[]};
-    foreach my $action ( @{ $self->chain } ) {
-        my @args;
-        if (my $cap = $action->attributes->{Captures}) {
-          @args = splice(@captures, 0, $cap->[0]);
-        }
-        local $c->request->{arguments} = \@args;
-        $action->dispatch( $c );
-    }
-}
-
 =head2 from_chain( \@actions )
 
 Takes a list of Catalyst::Action objects and constructs and returns a
@@ -66,12 +81,6 @@ Catalyst::ActionChain object representing a chain of these actions
 
 =cut
 
-sub from_chain {
-    my ( $self, $actions ) = @_;
-    my $final = $actions->[-1];
-    return $self->new({ %$final, chain => $actions });
-}
-
 =head1 AUTHOR
 
 Matt S. Trout
@@ -82,5 +91,3 @@ This program is free software, you can redistribute it and/or modify it under
 the same terms as Perl itself.
 
 =cut
-
-1;