From: Matt S Trout Date: Fri, 3 Mar 2006 15:18:27 +0000 (+0000) Subject: Fix to update(\%args) with inflation from test case by Peter Rabbitson X-Git-Tag: v0.06000~69 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=9fcda149ae69bff53f58a198d4b922e64e6b5c83;p=dbsrgits%2FDBIx-Class.git Fix to update(\%args) with inflation from test case by Peter Rabbitson --- diff --git a/lib/DBIx/Class/InflateColumn.pm b/lib/DBIx/Class/InflateColumn.pm index f60e112..6efbe13 100644 --- a/lib/DBIx/Class/InflateColumn.pm +++ b/lib/DBIx/Class/InflateColumn.pm @@ -124,6 +124,18 @@ sub _inflated_column_op { return $obj; } +sub update { + my ($class, $attrs, @rest) = @_; + $attrs ||= {}; + foreach my $key (keys %$attrs) { + if (ref $attrs->{$key} + && exists $class->column_info($key)->{_inflate_info}) { + $attrs->{$key} = $class->_deflated_column($key, $attrs->{$key}); + } + } + return $class->next::method($attrs, @rest); +} + sub new { my ($class, $attrs, @rest) = @_; $attrs ||= {}; diff --git a/t/lib/DBICTest/Schema.pm b/t/lib/DBICTest/Schema.pm index 2355aeb..8090e51 100644 --- a/t/lib/DBICTest/Schema.pm +++ b/t/lib/DBICTest/Schema.pm @@ -16,6 +16,7 @@ __PACKAGE__->load_classes(qw/ OneKey #dummy TwoKeys + Serialized /]}, ( 'FourKeys', diff --git a/t/lib/sqlite.sql b/t/lib/sqlite.sql index 8015b29..1ee7c21 100644 --- a/t/lib/sqlite.sql +++ b/t/lib/sqlite.sql @@ -131,4 +131,12 @@ CREATE TABLE self_ref ( name varchar NOT NULL ); +-- +-- Table: serialized +-- +CREATE TABLE serialized ( + id INTEGER PRIMARY KEY NOT NULL, + serialized text NOT NULL +); + COMMIT; diff --git a/t/run/08inflate.tl b/t/run/08inflate.tl index e21a6c6..97d0778 100644 --- a/t/run/08inflate.tl +++ b/t/run/08inflate.tl @@ -4,7 +4,7 @@ my $schema = shift; eval { require DateTime }; plan skip_all => "Need DateTime for inflation tests" if $@; -plan tests => 3; +plan tests => 5; DBICTest::Schema::CD->inflate_column( 'year', { inflate => sub { DateTime->new( year => shift ) }, @@ -27,6 +27,34 @@ $cd->update; ($cd) = $schema->resultset("CD")->search( year => $now->year ); is( $cd->year->year, $now->year, 'deflate ok' ); +use YAML; +DBICTest::Schema::Serialized->inflate_column( 'serialized', + { inflate => sub { Load (shift) }, + deflate => sub { die "Expecting a reference" unless (ref $_[0]); Dump (shift) } } +); +Class::C3->reinitialize; + +my $complex1 = { + id => 1, + serialized => { + a => 1, + b => 2, + }, +}; + +my $complex2 = { + id => 1, + serialized => [qw/a b 1 2/], +}; + +my $rs = $schema->resultset('Serialized'); + +my $entry = $rs->create($complex2); + +ok($entry->update ($complex1), "update with hashref deflating ok"); + +ok($entry->update ($complex2), "update with arrayref deflating ok"); + } 1;