hopefully fix atsushi kobayahi's ResultSetManager issue
David Kamholz [Thu, 16 Mar 2006 18:29:11 +0000 (18:29 +0000)]
lib/DBIx/Class.pm
lib/DBIx/Class/ResultSetManager.pm

index 45ec142..444dc59 100644 (file)
@@ -17,15 +17,21 @@ $VERSION = '0.05999_04';
 
 sub MODIFY_CODE_ATTRIBUTES {
     my ($class,$code,@attrs) = @_;
-    unless ($class->can('_attr_cache')) {
-        $class->mk_classdata('_attr_cache');
-        $class->_attr_cache({});
+    unless ($class->can('__attr_cache')) {
+        $class->mk_classdata('__attr_cache');
+        $class->__attr_cache({});
     }
-    my $cache = $class->_attr_cache;
-    $class->_attr_cache->{$code} = [@attrs];
+    $class->__attr_cache->{$code} = [@attrs];
     return ();
 }
 
+sub _attr_cache {
+    my $self = shift;
+    my $cache = $self->can('__attr_cache') ? $self->__attr_cache : {};
+    my $rest = eval { $self->next::method };
+    return $@ ? $cache : { %$cache, %$rest };
+}
+
 1;
 
 =head1 NAME 
index 360f070..476e8e1 100644 (file)
@@ -25,9 +25,9 @@ sub load_resultset_components {
 
 sub _register_attributes {
     my $self = shift;
-    return unless $self->can('_attr_cache');
-
     my $cache = $self->_attr_cache;
+    return if keys %$cache == 0;
+    
     foreach my $meth (@{Class::Inspector->methods($self) || []}) {
         my $attrs = $cache->{$self->can($meth)};
         next unless $attrs;