X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FActionChain.pm;h=60fd6db947a5954951bafad00fb2385528cb170f;hp=6d161045f636a9561efe5d3bff3f8f786e95caf1;hb=059c085bfcead450e70ace9ef193aa99ac2ab37d;hpb=1c34f703cbd82cddceea95593001a579e1d5f646 diff --git a/lib/Catalyst/ActionChain.pm b/lib/Catalyst/ActionChain.pm index 6d16104..60fd6db 100644 --- a/lib/Catalyst/ActionChain.pm +++ b/lib/Catalyst/ActionChain.pm @@ -1,22 +1,9 @@ package Catalyst::ActionChain; -use strict; -use base qw/Catalyst::Action/; +use Moose; +extends qw(Catalyst::Action); -__PACKAGE__->mk_accessors(qw/chain/); - -use overload ( - - # Stringify to reverse for debug output etc. - q{""} => sub { shift->{reverse} }, - - # Codulate to execute to invoke the encapsulated action coderef - '&{}' => sub { my $self = shift; sub { $self->execute(@_); }; }, - - # Make general $stuff still work - fallback => 1, - -); +has chain => (is => 'rw'); =head1 NAME @@ -24,7 +11,7 @@ Catalyst::ActionChain - Chain of Catalyst Actions =head1 SYNOPSIS -See L. +See L for more info about Chained actions. =head1 DESCRIPTION @@ -32,19 +19,21 @@ 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. -=head1 METHODS +=cut -=head2 chain +use overload ( -Accessor for the action chain; will be an arrayref of the Catalyst::Action -objects encapsulated by this chain. + # Stringify to reverse for debug output etc. + q{""} => sub { shift->{reverse} }, -=head2 dispatch( $c ) + # Codulate to execute to invoke the encapsulated action coderef + '&{}' => sub { my $self = shift; sub { $self->execute(@_); }; }, -Dispatch this action chain against a context; will dispatch the encapsulated -actions in order. + # Make general $stuff still work + fallback => 1, + +); -=cut sub dispatch { my ( $self, $c ) = @_; @@ -62,18 +51,36 @@ sub dispatch { $last->dispatch( $c ); } +sub from_chain { + my ( $self, $actions ) = @_; + my $final = $actions->[-1]; + return $self->new({ %$final, chain => $actions }); +} + +1; + +__END__ + +=head1 METHODS + +=head2 chain + +Accessor for the action chain; will be an arrayref of the Catalyst::Action +objects encapsulated by this chain. + +=head2 dispatch( $c ) + +Dispatch this action chain against a context; will dispatch the encapsulated +actions in order. + =head2 from_chain( \@actions ) Takes a list of Catalyst::Action objects and constructs and returns a Catalyst::ActionChain object representing a chain of these actions -=cut +=head2 meta -sub from_chain { - my ( $self, $actions ) = @_; - my $final = $actions->[-1]; - return $self->new({ %$final, chain => $actions }); -} +Provided by Moose =head1 AUTHOR @@ -85,5 +92,3 @@ This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself. =cut - -1;