Updated Catalyst::Request and Catalyst::Response to have sensible defaults for attributes
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Action.pm
CommitLineData
fbcc39ad 1package Catalyst::Action;
2
b2ddf6d7 3=head1 NAME
4
5Catalyst::Action - Catalyst Action
6
7=head1 SYNOPSIS
8
85d9fce6 9 <form action="[%c.uri_for(c.action.reverse)%]">
10
b2ddf6d7 11=head1 DESCRIPTION
12
ac5c933b 13This class represents a Catalyst Action. You can access the object for the
b2ddf6d7 14currently dispatched action via $c->action. See the L<Catalyst::Dispatcher>
15for more information on how actions are dispatched. Actions are defined in
16L<Catalyst::Controller> subclasses.
17
18=cut
19
059c085b 20use Moose;
21
5fb12dbb 22has class => (is => 'rw');
23has namespace => (is => 'rw');
24has 'reverse' => (is => 'rw');
25has attributes => (is => 'rw');
26has name => (is => 'rw');
27has code => (is => 'rw');
059c085b 28
29no Moose;
30
31no warnings 'recursion';
32
33#__PACKAGE__->mk_accessors(qw/class namespace reverse attributes name code/);
fbcc39ad 34
35use overload (
36
37 # Stringify to reverse for debug output etc.
059c085b 38 q{""} => sub { shift->reverse() },
fbcc39ad 39
b8f669f3 40 # Codulate to execute to invoke the encapsulated action coderef
41 '&{}' => sub { my $self = shift; sub { $self->execute(@_); }; },
fbcc39ad 42
6a064886 43 # Make general $stuff still work
44 fallback => 1,
45
fbcc39ad 46);
47
b2ddf6d7 48sub dispatch { # Execute ourselves against a context
49 my ( $self, $c ) = @_;
e63bdf38 50 #Moose todo: grrrrrr. this is no good. i don't know enough about it to
51 # debug it though. why can't we just call the accessor?
6680c772 52 #local $c->{namespace} = $self->namespace;
53 #return $c->execute( $self->class, $self );
e63bdf38 54
55 #believed to be equivalent:
6680c772 56 my $orig = $c->namespace;
57 $c->namespace($self->namespace);
58 my $ret = $c->execute( $self->class, $self );
59 $c->namespace($orig);
60 return $ret;
b2ddf6d7 61}
fbcc39ad 62
b2ddf6d7 63sub execute {
64 my $self = shift;
059c085b 65 $self->code->(@_);
b2ddf6d7 66}
fbcc39ad 67
b2ddf6d7 68sub match {
69 my ( $self, $c ) = @_;
e5ecd5bc 70 #would it be unreasonable to store the number of arguments
71 #the action has as it's own attribute?
72 #it would basically eliminate the code below. ehhh. small fish
b2ddf6d7 73 return 1 unless exists $self->attributes->{Args};
74 my $args = $self->attributes->{Args}[0];
75 return 1 unless defined($args) && length($args);
76 return scalar( @{ $c->req->args } ) == $args;
77}
fbcc39ad 78
e5ecd5bc 79__PACKAGE__->meta->make_immutable;
80
b2ddf6d7 811;
fbcc39ad 82
b2ddf6d7 83__END__
4ab87e27 84
fbcc39ad 85=head1 METHODS
86
b5ecfcf0 87=head2 attributes
fbcc39ad 88
4ab87e27 89The sub attributes that are set for this action, like Local, Path, Private
b2ddf6d7 90and so on. This determines how the action is dispatched to.
4ab87e27 91
b5ecfcf0 92=head2 class
b96f127f 93
b2ddf6d7 94Returns the class name where this action is defined.
4ab87e27 95
b5ecfcf0 96=head2 code
11bd4e3e 97
b2ddf6d7 98Returns a code reference to this action.
4ab87e27 99
b8f669f3 100=head2 dispatch( $c )
4ab87e27 101
b8f669f3 102Dispatch this action against a context
fbcc39ad 103
b8f669f3 104=head2 execute( $controller, $c, @args )
105
106Execute this action's coderef against a given controller with a given
107context and arguments
108
649fd1fa 109=head2 match( $c )
4ab87e27 110
649fd1fa 111Check Args attribute, and makes sure number of args matches the setting.
b2ddf6d7 112Always returns true if Args is omitted.
4082e678 113
b5ecfcf0 114=head2 namespace
fbcc39ad 115
4ab87e27 116Returns the private namespace this action lives in.
117
b5ecfcf0 118=head2 reverse
6b239949 119
4ab87e27 120Returns the private path for this action.
121
b5ecfcf0 122=head2 name
fbcc39ad 123
4ab87e27 124returns the sub name of this action.
125
059c085b 126=head2 meta
127
128Provided by Moose
129
fbcc39ad 130=head1 AUTHOR
131
132Matt S. Trout
133
134=head1 COPYRIGHT
135
136This program is free software, you can redistribute it and/or modify it under
137the same terms as Perl itself.
138
85d9fce6 139=cut