[Moscow.pm] Mouse: обратный coerce
Ivan Petrov
i.petro.77.00 на gmail.com
Вт Сен 24 11:24:55 PDT 2013
имеется выборка из БД
{
name => 'name',
point => '{ x: 1, y: 2 }'
}
далее класс
package Point;
use Mouse;
require JSON::XS;
has x => is => 'ro', isa => 'Num';
has y => is => 'ro', isa => 'Num';
sub jstr {
my ($class, $str) = @_;
my $json = JSON::XS->new->decode( $str );
return $class->new(x => $json->{x}, y => $json->{y});
}
package Obj;
use Mouse;
use Mouse::Util::TypeConstraints;
coerce Point
=> from 'Str',
=> via sub { Point->jstr( $_) };
has name => is => 'rw', isa => 'Str';
has point => is => 'rw', isa => 'Point', coerce => 1;
из БД в поле point приходит нераспакованный JSON.
соответственно при помощи coerce мы его распаковываем прозрачно.
выборку из БД просто кормим конструктору Obj.
все красиво.
а теперь как сделать красиво чтобы обратно в БД записать?
кроме как сериализационный метод у Point есть какие-то
варианты?
Подробная информация о списке рассылки Moscow-pm