When emulating $obj->{column} do not call any custom column method, just
Michael G Schwern [Wed, 13 Feb 2008 01:16:29 +0000 (17:16 -0800)]
access the data directly with get/set_column().

lib/DBIx/Class/CDBICompat/ColumnsAsHash.pm
t/cdbi-t/columns_as_hashes.t

index 50acf88..9a006d6 100644 (file)
@@ -84,7 +84,7 @@ sub FETCH {
     carp "Column '$col' of '$class/$id' was fetched as a hash"
         if $ENV{DBIC_CDBICOMPAT_HASH_WARN};
 
-    return $obj->$col();
+    return $obj->get_column($col);
 }
 
 sub STORE {
@@ -96,7 +96,7 @@ sub STORE {
     carp "Column '$col' of '$class/$id' was stored as a hash"
         if $ENV{DBIC_CDBICOMPAT_HASH_WARN};
 
-    $obj->$col(shift);
+    $obj->set_column($col => shift);
 }
 
 1;
index 4e39cb7..1280f6f 100644 (file)
@@ -7,7 +7,7 @@ use Test::Warn;
 BEGIN {
   eval "use DBIx::Class::CDBICompat;";
   plan $@ ? (skip_all => "Class::Trigger and DBIx::ContextualFetch required: $@")
-          : (tests=> 9);
+          : (tests=> 10);
 }
 
 use lib 't/testlib';
@@ -50,4 +50,19 @@ is @films, 1, "column updated as hash was saved";
 warning_is {
     local $ENV{DBIC_CDBICOMPAT_HASH_WARN} = 0;
     $waves->{rating}
-} '', 'DBIC_CDBICOMPAT_HASH_WARN controls warnings';
\ No newline at end of file
+} '', 'DBIC_CDBICOMPAT_HASH_WARN controls warnings';
+
+
+{
+    local $ENV{DBIC_CDBICOMPAT_HASH_WARN} = 0;
+    
+    $waves->rating("R");
+    $waves->update;
+    
+    no warnings 'redefine';
+    local *Film::rating = sub {
+        return "wibble";
+    };
+    
+    is $waves->{rating}, "R";
+}