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 ||= {};
name varchar NOT NULL
);
+--
+-- Table: serialized
+--
+CREATE TABLE serialized (
+ id INTEGER PRIMARY KEY NOT NULL,
+ serialized text NOT NULL
+);
+
COMMIT;
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 ) },
($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;