sub _add_route {
my $rest = shift;
my $meta = shift;
- my ( $name, $attrs, $sub ) = _process_args(@_);
+ my ( $name, $attrs, $sub ) = _process_args( $meta, @_ );
my $meth_base = '__route__' . $name;
return;
}
-sub path_part ($) {
- return ( PathPart => [ $_[0] ] );
-}
-
sub chained ($) {
return ( Chained => [ $_[0] ] );
}
return ( CaptureArgs => [ $_[0] ] );
}
+sub path_part ($) {
+ return ( PathPart => [ $_[0] ] );
+}
+
sub action ($) {
return ( ActionClass => [ $_[0] ] );
}
sub _process_args {
+ my $meta = shift;
my $path = shift;
my $sub = pop;
my %p = @_;
- $p{ActionClass} ||= 'REST';
+ $p{ActionClass} ||= 'REST::ForBrowsers';
unless ( exists $p{Chained} ) {
$p{Chained} = q{/};
- unless ( exists $p{PathPart} ) {
- ( my $part = $path ) =~ s{^/}{};
+ unless ( $p{PathPart} ) {
+ my $part = $path;
+ unless ( $part =~ s{^/}{} ) {
+ $part = $meta->name()->action_namespace('FakeConfig') . q{/} . $part;
+ }
+
$p{PathPart} = [$part];
}
}
- unless ( exists $p{Args} ) {
+ unless ( $p{Args} || $p{Local} ) {
$p{Args} = [0];
}
&& length "$_[0]" );
}
+{
+ # This is a nasty hack around some weird back compat code in
+ # Catalyst::Controller->action_namespace
+ package FakeConfig;
+
+ sub config {
+ return { case_sensitive => 0 };
+ }
+}
+
1;
use Catalyst::Test 'MyApp1';
use HTTP::Request::Common qw( GET PUT POST DELETE );
-get('/foo');
-
-is(
- $MyApp1::Controller::C1::REQ{get}, 1,
- 'GET request for /foo went to the right sub'
-);
-
-request(
- GET '/foo',
- [
- Accept => '*/*',
- ]
-);
-
-is(
- $MyApp1::Controller::C1::REQ{get_html}, 1,
- 'GET request for /foo that looks like a browser went to the right sub'
-);
-
-request( POST '/foo' );
-
-is(
- $MyApp1::Controller::C1::REQ{post}, 1,
- 'POST request for /foo went to the right sub'
-);
-
-request( PUT '/foo' );
-
-is(
- $MyApp1::Controller::C1::REQ{put}, 1,
- 'PUT request for /foo went to the right sub'
-);
-
-request( DELETE '/foo' );
-
-is(
- $MyApp1::Controller::C1::REQ{delete}, 1,
- 'DELETE request for /foo went to the right sub'
-);
-
-get('/normal');
-
-is(
- $MyApp1::Controller::C1::REQ{normal}, 1,
- 'GET request for /norma went to the right sub'
-);
-
-request( POST '/normal' );
-
-is(
- $MyApp1::Controller::C1::REQ{normal}, 2,
- 'POST request for /norma went to the right sub'
-);
+{
+ request(
+ GET '/foo',
+ [
+ Accept => 'application/json',
+ ]
+ );
+
+ is(
+ $MyApp1::Controller::C1::REQ{get}, 1,
+ 'GET request for /foo went to the right sub'
+ );
+
+ request(
+ GET '/foo',
+ [
+ Accept => '*/*',
+ ]
+ );
+
+ is(
+ $MyApp1::Controller::C1::REQ{get_html}, 1,
+ 'GET request for /foo that looks like a browser went to the right sub'
+ );
+
+ request( POST '/foo' );
+
+ is(
+ $MyApp1::Controller::C1::REQ{post}, 1,
+ 'POST request for /foo went to the right sub'
+ );
+
+ request( PUT '/foo' );
+
+ is(
+ $MyApp1::Controller::C1::REQ{put}, 1,
+ 'PUT request for /foo went to the right sub'
+ );
+
+ request( DELETE '/foo' );
+
+ is(
+ $MyApp1::Controller::C1::REQ{delete}, 1,
+ 'DELETE request for /foo went to the right sub'
+ );
+}
+
+{
+ get('c1/bar');
+
+ is(
+ $MyApp1::Controller::C1::REQ{get}, 2,
+ 'GET request for c1/bar went to the right sub'
+ );
+
+ request(
+ GET 'c1/bar',
+ [
+ Accept => '*/*',
+ ]
+ );
+
+ is(
+ $MyApp1::Controller::C1::REQ{get_html}, 2,
+ 'GET request for c1/bar that looks like a browser went to the right sub'
+ );
+
+ request( POST 'c1/bar' );
+
+ is(
+ $MyApp1::Controller::C1::REQ{post}, 2,
+ 'POST request for c1/bar went to the right sub'
+ );
+
+ request( PUT 'c1/bar' );
+
+ is(
+ $MyApp1::Controller::C1::REQ{put}, 2,
+ 'PUT request for c1/bar went to the right sub'
+ );
+
+ request( DELETE 'c1/bar' );
+
+ is(
+ $MyApp1::Controller::C1::REQ{delete}, 2,
+ 'DELETE request for c1/bar went to the right sub'
+ );
+}
+
+{
+ get('/normal');
+
+ is(
+ $MyApp1::Controller::C1::REQ{normal}, 1,
+ 'GET request for /norma went to the right sub'
+ );
+
+ request( POST '/normal' );
+
+ is(
+ $MyApp1::Controller::C1::REQ{normal}, 2,
+ 'POST request for /norma went to the right sub'
+ );
+}
done_testing();