authors cleanup
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Action.pm
1 package Catalyst::Action;
2
3 use strict;
4 use base qw/Class::Accessor::Fast/;
5
6
7 =head1 NAME
8
9 Catalyst::Action - Catalyst Action
10
11 =head1 SYNOPSIS
12
13     <form action="[%c.uri_for(c.action.reverse)%]">
14
15 =head1 DESCRIPTION
16
17 This class represents a Catalyst Action. You can access the object for the 
18 currently dispatched action via $c->action. See the L<Catalyst::Dispatcher>
19 for more information on how actions are dispatched. Actions are defined in
20 L<Catalyst::Controller> subclasses.
21
22 =cut
23
24 __PACKAGE__->mk_accessors(qw/class namespace reverse attributes name code/);
25
26 use overload (
27
28     # Stringify to reverse for debug output etc.
29     q{""} => sub { shift->{reverse} },
30
31     # Codulate to execute to invoke the encapsulated action coderef
32     '&{}' => sub { my $self = shift; sub { $self->execute(@_); }; },
33
34     # Make general $stuff still work
35     fallback => 1,
36
37 );
38
39 sub dispatch {    # Execute ourselves against a context
40     my ( $self, $c ) = @_;
41     return $c->execute( $self->class, $self );
42 }
43
44 sub execute {
45   my $self = shift;
46   $self->{code}->(@_);
47 }
48
49 sub match {
50     my ( $self, $c ) = @_;
51     return 1 unless exists $self->attributes->{Args};
52     my $args = $self->attributes->{Args}[0];
53     return 1 unless defined($args) && length($args);
54     return scalar( @{ $c->req->args } ) == $args;
55 }
56
57 1;
58
59 __END__
60
61 =head1 METHODS
62
63 =head2 attributes
64
65 The sub attributes that are set for this action, like Local, Path, Private
66 and so on. This determines how the action is dispatched to.
67
68 =head2 class
69
70 Returns the class name where this action is defined.
71
72 =head2 code
73
74 Returns a code reference to this action.
75
76 =head2 dispatch( $c )
77
78 Dispatch this action against a context
79
80 =head2 execute( $controller, $c, @args )
81
82 Execute this action's coderef against a given controller with a given
83 context and arguments
84
85 =head2 match( $c )
86
87 Check Args attribute, and makes sure number of args matches the setting.
88 Always returns true if Args is omitted.
89
90 =head2 namespace
91
92 Returns the private namespace this action lives in.
93
94 =head2 reverse
95
96 Returns the private path for this action.
97
98 =head2 name
99
100 returns the sub name of this action.
101
102 =head1 AUTHORS
103
104 Catalyst Contributors, see Catalyst.pm
105
106 =head1 COPYRIGHT
107
108 This program is free software, you can redistribute it and/or modify it under
109 the same terms as Perl itself.
110
111 =cut