Catalyst::ActionChain - Chain of Catalyst Actions


Catalyst-Runtime documentation Contained in the Catalyst-Runtime distribution.

Index


Code Index:

NAME

Top

Catalyst::ActionChain - Chain of Catalyst Actions

SYNOPSIS

Top

See Catalyst::Manual::Intro for more info about Chained actions.

DESCRIPTION

Top

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.

METHODS

Top

chain

Accessor for the action chain; will be an arrayref of the Catalyst::Action objects encapsulated by this chain.

dispatch( $c )

Dispatch this action chain against a context; will dispatch the encapsulated actions in order.

from_chain( \@actions )

Takes a list of Catalyst::Action objects and constructs and returns a Catalyst::ActionChain object representing a chain of these actions

meta

Provided by Moose

AUTHORS

Top

Catalyst Contributors, see Catalyst.pm

COPYRIGHT

Top


Catalyst-Runtime documentation Contained in the Catalyst-Runtime distribution.
package Catalyst::ActionChain;

use Moose;
extends qw(Catalyst::Action);

has chain => (is => 'rw');

no Moose;

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 );
}

sub from_chain {
    my ( $self, $actions ) = @_;
    my $final = $actions->[-1];
    return $self->new({ %$final, chain => $actions });
}

__PACKAGE__->meta->make_immutable;
1;

__END__