tweaked ChildOf debug output
[catagits/Catalyst-Runtime.git] / lib / Catalyst / ActionChain.pm
CommitLineData
141459fa 1package Catalyst::ActionChain;
2
3use strict;
4use base qw/Catalyst::Action/;
5
6__PACKAGE__->mk_accessors(qw/chain/);
7
8use overload (
9
10 # Stringify to reverse for debug output etc.
11 q{""} => sub { shift->{reverse} },
12
13 # Codulate to execute to invoke the encapsulated action coderef
14 '&{}' => sub { my $self = shift; sub { $self->execute(@_); }; },
15
16 # Make general $stuff still work
17 fallback => 1,
18
19);
20
21=head1 NAME
22
23Catalyst::ActionChain - Chain of Catalyst Actions
24
25=head1 SYNOPSIS
26
27See L<Catalyst>.
28
29=head1 DESCRIPTION
30
31This class represents a chain of Catalyst Actions. It behaves exactly like
32the action at the *end* of the chain except on dispatch it will execute all
33the actions in the chain in order.
34
35=head1 METHODS
36
37=head2 chain
38
39Accessor for the action chain; will be an arrayref of the Catalyst::Action
40objects encapsulated by this chain.
41
42=head2 dispatch( $c )
43
44Dispatch this action chain against a context; will dispatch the encapsulated
45actions in order.
46
47=cut
48
49sub dispatch {
50 my ( $self, $c ) = @_;
51 foreach my $action ( @{ $self->chain } ) {
52 $action->dispatch( $c );
53 }
54}
55
56=head2 from_chain( \@actions )
57
58Takes a list of Catalyst::Action objects and constructs and returns a
59Catalyst::ActionChain object representing a chain of these actions
60
61=cut
62
63sub from_chain {
64 my ( $self, $actions ) = @_;
65 my $final = $actions->[-1];
66 return $self->new({ %$final, chain => $actions });
67}
68
69=head1 AUTHOR
70
71Matt S. Trout
72
73=head1 COPYRIGHT
74
75This program is free software, you can redistribute it and/or modify it under
76the same terms as Perl itself.
77
78=cut
79
801;