fix restricted class existence check to work on perl 5.18
D. Ilmari Mannsåker [Fri, 14 Jun 2013 13:55:41 +0000 (14:55 +0100)]
In 5.18 every class name inherits from UNIVERSAL and thus
->can('can'), whether it's been defined in any way or not.

Instead, check if the class alredy inherits from the correct
restricting component.

Changes
lib/DBIx/Class/Schema/RestrictWithObject.pm

diff --git a/Changes b/Changes
index c06c3e0..f9f7130 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,6 @@
 0.00002 
   -reuse coderefs from can
+  -fix restricted class existence check to work on perl 5.18
 
 0.00001
   -initial release
index 05f3477..494beef 100644 (file)
@@ -136,10 +136,10 @@ Return an appropriate class name for a restricted class of type $type.
 sub _get_restricted_class {
   my ($self, $type, $target) = @_;
   my $r_class = join('::', $target, '__RestrictedWithObject');
-  unless (eval { $r_class->can('can') }) {
-    my $r_comp = join(
-      '::', 'DBIx::Class::Schema::RestrictWithObject::RestrictComp', $type
-    );
+  my $r_comp = join(
+    '::', 'DBIx::Class::Schema::RestrictWithObject::RestrictComp', $type
+  );
+  unless ($r_class->isa($r_comp)) {
     $self->inject_base($r_class, $r_comp, $target);
   }
   return $r_class;