[Bast-commits] r5891 - in DBIx-Class-InflateColumn-FS/1.000/trunk:
. lib/DBIx/Class/InflateColumn t
semifor at dev.catalyst.perl.org
semifor at dev.catalyst.perl.org
Fri Apr 17 23:25:03 GMT 2009
Author: semifor
Date: 2009-04-18 00:25:03 +0100 (Sat, 18 Apr 2009)
New Revision: 5891
Modified:
DBIx-Class-InflateColumn-FS/1.000/trunk/Changes
DBIx-Class-InflateColumn-FS/1.000/trunk/lib/DBIx/Class/InflateColumn/FS.pm
DBIx-Class-InflateColumn-FS/1.000/trunk/t/01-fs_columns.t
Log:
Fixed new 'copy' method and infinite recursion on create with fs_new_on_update column(s)
Modified: DBIx-Class-InflateColumn-FS/1.000/trunk/Changes
===================================================================
--- DBIx-Class-InflateColumn-FS/1.000/trunk/Changes 2009-04-17 08:10:19 UTC (rev 5890)
+++ DBIx-Class-InflateColumn-FS/1.000/trunk/Changes 2009-04-17 23:25:03 UTC (rev 5891)
@@ -1,4 +1,6 @@
-0.01003 2009-04-16
+0.01003 2009-04-17
+ - use DBIx::Class::UUIDColumns for get_uuid rather than inheriting from it
+ - fixed infinite recursion on create with fs_new_on_update column(s)
- added copy method
0.01002 2009-03-17
Modified: DBIx-Class-InflateColumn-FS/1.000/trunk/lib/DBIx/Class/InflateColumn/FS.pm
===================================================================
--- DBIx-Class-InflateColumn-FS/1.000/trunk/lib/DBIx/Class/InflateColumn/FS.pm 2009-04-17 08:10:19 UTC (rev 5890)
+++ DBIx-Class-InflateColumn-FS/1.000/trunk/lib/DBIx/Class/InflateColumn/FS.pm 2009-04-17 23:25:03 UTC (rev 5891)
@@ -2,7 +2,7 @@
use strict;
use warnings;
-use base 'DBIx::Class::UUIDColumns';
+use DBIx::Class::UUIDColumns;
use File::Spec;
use File::Path;
use File::Copy ();
@@ -95,7 +95,7 @@
sub fs_file_name {
my ($self, $column, $column_info) = @_;
- return $self->get_uuid;
+ return DBIx::Class::UUIDColumns->get_uuid;
}
sub _fs_column_storage {
@@ -142,27 +142,25 @@
my ($self, $changes) = @_;
$changes ||= {};
- my $col_data = { %{$self->{_column_data}} };
- my $inflated_col = { %{$self->{_inflated_column}} };
+ my $col_data = { %{$self->{_column_data}} };
foreach my $col ( keys %$col_data ) {
my $column_info = $self->result_source->column_info($col);
if ( $column_info->{is_fs_column}
- && defined $col_data->{$col} # nothing special required for NULLs
- && !exists $changes->{$col} ) {
+ && defined $col_data->{$col} ) { # nothing special required for NULLs
$col_data->{$col} = undef;
# pass the original file to produce a copy on deflate
my $accessor = $column_info->{accessor} || $col;
- $changes->{$col} = $self->$accessor;
-
- delete $inflated_col->{$col};
+ $changes->{$col} ||= $self->$accessor;
}
}
- my $copy = bless { %$self, _column_data => $col_data, _inflated_column => $inflated_col }, ref $self;
- $copy = $copy->next::method($changes);
+ my $temp = bless { _column_data => $col_data }, ref $self;
+ $temp->result_source($self->result_source);
+ my $copy = $temp->next::method($changes);
+
# force reinflation of fs colmuns on next access
delete $copy->{_inflated_column}{$_}
for grep { $self->result_source->column_info($_)->{is_fs_column} }
@@ -254,7 +252,7 @@
my $fs_new_on_update = $self->result_source->column_info($column)->{fs_new_on_update};
my $file = $self->_fs_column_storage($column, 1);
- if ( $fs_new_on_update && (my $oldfile = $self->get_column($column)) ) {
+ if ( $fs_new_on_update && (my $oldfile = $self->{_column_data}{$column}) ) {
my $column_info = $self->result_source->column_info($column);
Path::Class::File->new($column_info->{fs_column_path}, $oldfile)->remove;
}
Modified: DBIx-Class-InflateColumn-FS/1.000/trunk/t/01-fs_columns.t
===================================================================
--- DBIx-Class-InflateColumn-FS/1.000/trunk/t/01-fs_columns.t 2009-04-17 08:10:19 UTC (rev 5890)
+++ DBIx-Class-InflateColumn-FS/1.000/trunk/t/01-fs_columns.t 2009-04-17 23:25:03 UTC (rev 5891)
@@ -1,8 +1,8 @@
-#!perl -wT
+#!perl -w
use warnings;
use strict;
use DBICx::TestDatabase;
-use Test::More tests => 15;
+use Test::More tests => 19;
use Path::Class qw/file/;
use File::Compare;
use lib qw(t/lib);
@@ -74,6 +74,28 @@
$book->discard_changes;
ok( -e $book->cover_image, 'storage renamed on PK change' );
+#--------------------------------- test copy ---------------------------------
+my $orig_column_data = { %{$book->{_column_data}} };
my $copy = $book->copy;
isnt( $copy->cover_image, $book->cover_image, 'copy has its own file backing' );
ok( compare($copy->cover_image, $book->cover_image) == 0, 'copy contents correct' );
+
+# an update of book shouldn't change the source's _column_data
+is_deeply ( $book->{_column_data}, $orig_column_data, 'copy source unchanged' );
+
+# Regression test (failed on a prior implementation of copy)
+$book = $rs->find({ id => 1, });
+ok( eval{ $copy = $book->copy }, 'copy works with selected elements' );
+
+#----------------------------- infinite recursion ----------------------------
+$book = $rs->create({
+ name => 'The Never Ending Story',
+ cover_image => $file,
+ cover_image_2 => $file,
+});
+
+my $cover_image = $book->cover_image->stringify;
+my $cover_image_2 = $book->cover_image->stringify;
+$book->update({ cover_image => $file, cover_image_2 => $file });
+is( $book->cover_image, $cover_image, 'backing filename did not change' );
+isnt( $book->cover_image_2, $cover_image_2, 'backing filename did change for fs_new_on_update column' );
More information about the Bast-commits
mailing list