Limits the special case code for DT::Regex to 1 sub and improves warnings
Mark Grimes [Thu, 28 Mar 2013 14:10:07 +0000 (10:10 -0400)]
- Moves the complexity into the standalone Catalyst::Dispatch::Regex
  distribution.
- Issues warning if an old version of the core Catalyst::Dispatch::Regex
  is loaded.

Signed-off-by: John Napiorkowski <jjnapiork@cpan.org>

lib/Catalyst/Controller.pm
lib/Catalyst/Dispatcher.pm

index f1f6e75..28b54be 100644 (file)
@@ -751,7 +751,7 @@ This is a general toolbox for attaching your action to a give path.
 
 =head2 Regexp
 
-Status: Deprecated.  Use Chained methods or other techniques.
+B<Status: Deprecated.>  Use Chained methods or other techniques.
 If you really depend on this, install the standalone 
 L<Catalyst::DispatchType::Regex> distribution.
 
@@ -761,7 +761,7 @@ A global way to match a give regular expression in the incoming request path.
 
 =head2 LocalRegexp
 
-Status: Deprecated.  Use Chained methods or other techniques.
+B<Status: Deprecated.>  Use Chained methods or other techniques.
 If you really depend on this, install the standalone 
 L<Catalyst::DispatchType::Regex> distribution.
 
index 73d3f84..dc52594 100644 (file)
@@ -517,14 +517,9 @@ sub register {
             # FIXME - Some error checking and re-throwing needed here, as
             #         we eat exceptions loading dispatch types.
             eval { Class::MOP::load_class($class) };
-            if( $@ ){
-                warn( "Attempt to use deprecated $key dispatch type.\n"
-                    . "  Use Chained methods instead or install\n"
-                    . "  Catalyst::DispatchType::Regex if necessary.\n")
-                    if $key =~ /^(Local)?Regex$/;
-            } else {
-                push( @{ $self->dispatch_types }, $class->new );
-            }
+            my $load_failed = $@;
+            $self->_check_depreciated_dispatch_type( $key, $load_failed );
+            push( @{ $self->dispatch_types }, $class->new ) unless $load_failed;
             $registered->{$class} = 1;
         }
     }
@@ -696,6 +691,28 @@ sub dispatch_type {
     return undef;
 }
 
+sub _check_depreciated_dispatch_type {
+    my ($self, $key, $load_failed) = @_;
+
+    return unless $key =~ /^(Local)?Regexp?/;
+
+    # TODO: Should these throw an exception rather than just warning?
+    if ($load_failed) {
+        warn(   "Attempt to use deprecated $key dispatch type.\n"
+              . "  Use Chained methods or install the standalone\n"
+              . "  Catalyst::DispatchType::Regex if necessary.\n" );
+    } elsif ( !defined $Catalyst::DispatchType::Regex::VERSION
+        || $Catalyst::DispatchType::Regex::VERSION <= 5.90020 ) {
+        # We loaded the old core version of the Regex module this will break
+        warn(   "The $key DispatchType has been removed from Catalyst core.\n"
+              . "  An old version of the core Catalyst::DispatchType::Regex\n"
+              . "  has been loaded and will likely fail. Please remove\n"
+              . "  $INC{'Catalyst::DispatchType::Regex'}\n"
+              . "  and use Chained methods or install the standalone\n"
+              . "  Catalyst::DispatchType::Regex if necessary.\n" );
+    }
+}
+
 use Moose;
 
 # 5.70 backwards compatibility hacks.