BEGIN { require 5.008001; }
-our $VERSION = '0.81';
+our $VERSION = '0.88';
$VERSION = eval $VERSION;
-sub new {
- my $class = shift;
- my $config = shift;
- Catalyst::Request::REST->_insert_self_into( $config->{class} );
- return $class->next::method($config, @_);
+sub BUILDARGS {
+ my $class = shift;
+ my $config = shift;
+ Catalyst::Request::REST->_insert_self_into( $config->{class} );
+ return $class->SUPER::BUILDARGS($config, @_);
}
=head1 NAME
# Common case, for foo_GET etc
if ( $code = $controller->action_for($rest_method) ) {
+ $c->execute( $self->class, $self, @{ $c->req->args } ); # Execute normal 'foo' action.
+ return $c->forward( $code, $c->req->args ); # Forward to foo_GET if it's an action
+ }
+ elsif ($code = $controller->can($rest_method)) {
+ # Execute normal action
$c->execute( $self->class, $self, @{ $c->req->args } );
- return $c->forward( $code, $c->req->args );
- } elsif ($code = $controller->can($rest_method)) {
- # Exceute normal action
- $c->execute( $self->class, $self, @{ $c->req->args } );
- $name = $rest_method;
+ $name = $rest_method; # Stash name and code to run 'foo_GET' like an action below.
}
# Generic handling for foo_OPTIONS
- if (!$code && $c->request->method eq "OPTIONS") {
- $name = $rest_method;
- $code = sub { $self->_return_options($self->name, @_) };
- }
-
- # Otherwise, not implemented.
if (!$code) {
- $name = $self->name . "_not_implemented";
- $code = $controller->can($name) # User method
- # Generic not implemented
- || sub { $self->_return_not_implemented($self->name, @_) };
+ if ( $c->request->method eq "OPTIONS") {
+ $name = $rest_method;
+ $code = sub { $self->_return_options($self->name, @_) };
+ }
+ else {
+ # Otherwise, not implemented.
+ $name = $self->name . "_not_implemented";
+ $code = $controller->can($name) # User method
+ # Generic not implemented
+ || sub { $self->_return_not_implemented($self->name, @_) };
+ }
}
# localise stuff so we can dispatch the action 'as normal, but get
. $c->uri_for( $method_name ) );
}
+__PACKAGE__->meta->make_immutable;
+
1;
=back
sensible set of defaults for a controller doing REST.
This class automatically adds the L<Catalyst::TraitFor::Request::REST> role to
-your request class. If you're writing a webapp which provides RESTful
+your request class. If you're writing a web application which provides RESTful
responses and still needs to accommodate web browsers, you may prefer to use
L<Catalyst::TraitFor::Request::REST::ForBrowsers> instead.
=head1 CONTRIBUTORS
-Arthur Axel "fREW" Schmidt E<lt>frioux@gmail.comE<gt>
-
-Christopher Laco
-
-Luke Saunders
+Tomas Doran (t0m) E<lt>bobtfish@bobtfish.netE<gt>
John Goulah
-Daisuke Maki E<lt>daisuke@endeworks.jpE<gt>
+Christopher Laco
-J. Shirley E<lt>jshirley@gmail.comE<gt>
+Daisuke Maki E<lt>daisuke@endeworks.jpE<gt>
Hans Dieter Pearcey
-Tomas Doran (t0m) E<lt>bobtfish@bobtfish.netE<gt>
-
Dave Rolsky E<lt>autarch@urth.orgE<gt>
+Luke Saunders
+
+Arthur Axel "fREW" Schmidt E<lt>frioux@gmail.comE<gt>
+
+J. Shirley E<lt>jshirley@gmail.comE<gt>
+
=head1 COPYRIGHT
Copyright the above named AUTHOR and CONTRIBUTORS