Mercurial > pub > Impl
annotate Lib/IMPL/Class/PropertyInfo.pm @ 209:a8db61d0ed33
IMPL::Class::Meta refactoring
author | cin |
---|---|
date | Mon, 28 May 2012 19:58:56 +0400 |
parents | d1676be8afcc |
children | 431db7034a88 |
rev | line source |
---|---|
49 | 1 package IMPL::Class::PropertyInfo; |
2 use strict; | |
163 | 3 use IMPL::_core::version; |
49 | 4 |
209 | 5 use IMPL::declare { |
6 base =>{ | |
7 'IMPL::Class::MemberInfo' => '@_' | |
8 } | |
9 }; | |
49 | 10 |
60
b0c068da93ac
Lazy activation for the configuration objects (final concept)
wizard
parents:
49
diff
changeset
|
11 __PACKAGE__->mk_accessors(qw(Type Mutators canGet canSet ownerSet)); |
49 | 12 |
13 my %LoadedModules; | |
14 | |
15 sub CTOR { | |
16 my $this = shift; | |
17 | |
18 if ( my $type = $this->Attributes ? delete $this->Attributes->{type} : undef ) { | |
19 $this->Type($type); | |
20 } | |
21 | |
22 $this->Mutators(0) unless defined $this->Mutators; | |
23 } | |
24 | |
25 sub Implementor { | |
26 my $this = shift; | |
134 | 27 |
49 | 28 if (@_) { |
29 $this->SUPER::Implementor(@_); | |
30 } else { | |
31 my $implementor = $this->SUPER::Implementor; | |
32 return $implementor if $implementor; | |
33 | |
34 $implementor = $this->SelectImplementor(); | |
35 | |
36 if (my $class = ref $implementor ? undef : $implementor) { | |
134 | 37 eval "require $class; 1;" or die $@ unless $LoadedModules{$class}++; |
49 | 38 } |
39 | |
40 $this->Implementor($implementor); | |
41 } | |
42 | |
43 } | |
44 | |
45 sub SelectImplementor { | |
134 | 46 eval {$_[0]->Class->_PropertyImplementor} or die new IMPL::Exception('Can\'t find a property implementor for the specified class',$_[0]->Class); |
49 | 47 } |
48 | |
49 1; | |
180 | 50 |
51 __END__ | |
52 | |
53 =pod | |
54 | |
209 | 55 =head1 NAME |
56 | |
57 C<IMPL::Class::PropertyInfo> - метаданные о свойствах объектов. Используются для отражения и | |
58 проверки данных объектов. | |
59 | |
60 =head1 DESCRIPTION | |
61 | |
62 В зависимости от типа каждый объект предоставляет способ хранения данных, например хеши позволяют | |
63 хранить состояние в виде ассоциативного массива и т.д. Информация о свойстве предоставляет определенный | |
64 уровень абстракции. | |
65 | |
180 | 66 =cut |