view Lib/IMPL/Class/PropertyInfo.pm @ 276:8a5da17d7ef9

*IMPL::Class refactoring property definition mechanism (incomplete).
author sergey
date Thu, 31 Jan 2013 17:37:44 +0400
parents 6253872024a4
children 4ddb27ff4a0b
line wrap: on
line source

package IMPL::Class::PropertyInfo;
use strict;

use parent qw(IMPL::Class::MemberInfo);

our %CTOR = ( 'IMPL::Class::MemberInfo' => '@_' );

__PACKAGE__->mk_accessors(qw(type mutators canGet canSet ownerSet isList));

my %LoadedModules;

sub CTOR {
    my $this = shift;
    
    if ( my $type = $this->attributes ? delete $this->attributes->{type} : undef ) {
        $this->type($type);
    }
    
    $this->mutators(0) unless defined $this->mutators;
}

sub implementor {
    my $this = shift;
        
    if (@_) {
        $this->SUPER::implementor(@_);
    } else {
        my $implementor = $this->SUPER::implementor;
        return $implementor if $implementor;
        
        $implementor = $this->SelectImplementor();
        
        $this->implementor($implementor);
    }
    
}

sub SelectImplementor {
    eval {$_[0]->class->_PropertyImplementor} or die new IMPL::Exception('Can\'t find a property implementor for the specified class',$_[0]->Class);
}

1;

__END__

=pod

=head1 NAME

C<IMPL::Class::PropertyInfo> - метаданные о свойствах объектов. Используются для отражения и
проверки данных объектов.

=head1 DESCRIPTION

В зависимости от типа каждый объект предоставляет способ хранения данных, например хеши позволяют
хранить состояние в виде ассоциативного массива и т.д. Информация о свойстве предоставляет определенный
уровень абстракции. 

=cut