Handle a controller where the namespace is the empty string nicely.
[catagits/CatalystX-Routes.git] / lib / CatalystX / Routes.pm
index 1bde24f..ccd2fa7 100644 (file)
@@ -48,10 +48,15 @@ sub _add_route {
         $attrs->{Chained} = q{/};
     }
 
+    my $name = $_[0];
+    $name =~ s{^/}{};
+
     # We need to turn the full chain name into a path, since two end points
     # from two different chains could have the same end point name.
-    my $name = ( $attrs->{Chained} eq '/' ? q{} : $attrs->{Chained} ) . q{/}
-        . $_[0];
+    $name = ( $attrs->{Chained} eq '/' ? q{} : $attrs->{Chained} ) . q{/}
+        . $name;
+
+    $name =~ s{/}{|}g;
 
     my $meth_base = '__route__' . $name;
 
@@ -75,6 +80,7 @@ sub _add_chain_point {
     my ( $attrs, $sub ) = _process_args( $meta, @_ );
 
     my $name = $_[0];
+    $name =~ s{/}{|}g;
 
     $meta->add_chain_point( $name => [ $attrs, $sub ] );
 }
@@ -106,6 +112,7 @@ sub _process_args {
             unless ( $part =~ s{^/}{} ) {
                 $part = join q{/},
                     $meta->name()->action_namespace('FakeConfig'), $part;
+                $part =~ s{^/}{};
             }
         }
 
@@ -216,7 +223,7 @@ __END__
      => sub { ... };
 
   # GET /user/foo
-  get 'foo' => sub { ... }
+  get 'foo' => sub { ... };
 
   sub _post { ... }
 
@@ -311,7 +318,7 @@ Use this to declare an action class. By default, this will be
 L<Catalyst::Action::REST::ForBrowsers> for end points. For other parts of a
 chain, it simply won't be set.
 
-=head1 Path Generation
+=head1 PATH GENERATION
 
 All of the end point function (C<get>, C<post>, etc.) take a path as the first
 argument. By default, this will be used as the C<path_part> for the chain. You
@@ -330,6 +337,15 @@ root URI, C</>, as the root of the chain.
 By default, no arguments are specified for a chain's end point, meaning it
 will accept any number of arguments.
 
+=head1 CAVEATS
+
+When adding subroutines for end points to your controller, a name is generated
+for each subroutine based on the chained path to the subroutine. Some
+template-based views will automatically pick a template based on the
+subroutine's name if you don't specify one explicitly. This won't work very
+well with the bizarro names that this module generates, so you are strongly
+encouraged to specify a template name explicitly.
+
 =head1 BUGS
 
 Please report any bugs or feature requests to