remove warning for undef captures
[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     local $c->namespace = $self->namespace;
42     return $c->execute( $self->class, $self );
43 }
44
45 sub execute {
46   my $self = shift;
47   $self->{code}->(@_);
48 }
49
50 sub match {
51     my ( $self, $c ) = @_;
52     return 1 unless exists $self->attributes->{Args};
53     my $args = $self->attributes->{Args}[0];
54     return 1 unless defined($args) && length($args);
55     return scalar( @{ $c->req->args } ) == $args;
56 }
57
58 1;
59
60 __END__
61
62 =head1 METHODS
63
64 =head2 attributes
65
66 The sub attributes that are set for this action, like Local, Path, Private
67 and so on. This determines how the action is dispatched to.
68
69 =head2 class
70
71 Returns the class name where this action is defined.
72
73 =head2 code
74
75 Returns a code reference to this action.
76
77 =head2 dispatch( $c )
78
79 Dispatch this action against a context
80
81 =head2 execute( $controller, $c, @args )
82
83 Execute this action's coderef against a given controller with a given
84 context and arguments
85
86 =head2 match( $c )
87
88 Check Args attribute, and makes sure number of args matches the setting.
89 Always returns true if Args is omitted.
90
91 =head2 namespace
92
93 Returns the private namespace this action lives in.
94
95 =head2 reverse
96
97 Returns the private path for this action.
98
99 =head2 name
100
101 returns the sub name of this action.
102
103 =head1 AUTHOR
104
105 Matt S. Trout
106
107 =head1 COPYRIGHT
108
109 This program is free software, you can redistribute it and/or modify it under
110 the same terms as Perl itself.
111
112 =cut