[Moscow.pm] Mouse: обратный coerce
Dmitry Karasik
dmitry на karasik.eu.org
Вт Сен 24 12:10:18 PDT 2013
если как бд используется DBIx::Class, у него есть 2хсторонние средства inflate/deflate,
достаточно красиво
/dk
On Tue, Sep 24, 2013 at 10:24:55PM +0400, Ivan Petrov wrote:
> имеется выборка из БД
>
> {
> 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 mailing list
> moscow-pm на pm.org | http://moscow.pm.org
--
Sincerely,
Dmitry Karasik
Подробная информация о списке рассылки Moscow-pm