Current code assume deflated state for values coming from database as well as from end-user code, and wrongly triggers inflate event when accessing this value, even without ever reaching database, as illustrated by the following test case:
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;
package My::DB;
use base qw(Rose::DB);
__PACKAGE__->use_private_registry;
__PACKAGE__->register_db(
driver => 'mysql',
host => 'localhost',
database => 'fake',
username => 'fake',
password => 'fake',
);
package My::Object;
use base qw(Rose::DB::Object);
use JSON;
__PACKAGE__->meta->setup(
table => 'table',
columns => [
column => { type => 'scalar', inflate => \&_inflate, deflate => \&_deflate },
]
);
sub init_db { My::DB->new() }
sub _deflate {
my $self = shift;
my $value = shift;
return $value ? encode_json($value) : undef;
}
sub _inflate {
my $self = shift;
my $value = shift;
return $value ? decode_json($value) : undef;
}
package main;
my $object = My::Object->new();
$object->column({ key => 'value' });
say $object->column();
The PR #14 fixes this issue.
Current code assume deflated state for values coming from database as well as from end-user code, and wrongly triggers inflate event when accessing this value, even without ever reaching database, as illustrated by the following test case:
The PR #14 fixes this issue.