view Lib/IMPL/Object/PublicSerializable.pm @ 281:a8dbddf491dd

refactoring *IMPL::declare reset abstractProps static property after implementing these props *IMPL::Serialization: fixed bug with multiple text parts inside one node *IMPL::Web::Handler::TTView: removed obsolete property 'location' from 'view' template variable
author cin
date Mon, 11 Feb 2013 00:58:22 +0400
parents 4ddb27ff4a0b
children 8088779e539d
line wrap: on
line source

package IMPL::Object::PublicSerializable;
use strict;

use IMPL::Const qw(:access);

sub restore {
    my ($class,$data,$refSurrogate) = @_;
    
    if ($refSurrogate) {
        $refSurrogate->callCTOR(@$data);
        return $refSurrogate;
    } else {
        return $class->new(@$data);
    }
}

sub save {
    my ($this,$ctx) = @_;
    
    my %seen;
    
    my $val;
    
    defined($val = $this->$_()) and $ctx->AddVar($_,$val) foreach
        map $_->name,$this->GetMeta(
            'IMPL::Class::PropertyInfo',
            sub {
                $_->access == ACCESS_PUBLIC and
                $_->getter and
                not $_->ownerSet and
                not $seen{$_->name} ++
            },
            1
        );
}

1;