Mercurial > pub > Impl
diff Lib/IMPL/Class/PropertyInfo.pm @ 0:03e58a454b20
Создан репозитарий
author | Sergey |
---|---|
date | Tue, 14 Jul 2009 12:54:37 +0400 |
parents | |
children | e59f44f75f20 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/Class/PropertyInfo.pm Tue Jul 14 12:54:37 2009 +0400 @@ -0,0 +1,38 @@ +package IMPL::Class::PropertyInfo; +use strict; + +use base qw(IMPL::Class::MemberInfo); + +__PACKAGE__->mk_accessors(qw(Type Mutators canGet canSet)); +__PACKAGE__->PassThroughArgs; + +our @Implementors = ( ['IMPL::Object' => 'IMPL::Class::Property::Direct'] ); + +my %LoadedModules; + +sub CTOR { + my $this = shift; + + my $implementor = $this->Implementor($this->SelectImplementor()); + if (my $class = ref $implementor ? undef : $implementor) { + if (not $LoadedModules{$class}) { + (my $package = $class.'.pm') =~ s/::/\//g; + require $package; + $LoadedModules{$class} = 1; + } + } + + $this->Mutators(0) unless defined $this->Mutators; +} + +sub SelectImplementor { + my ($this) = @_; + + foreach my $item (@Implementors) { + return $item->[1] if $this->Class->isa($item->[0]); + } + + die new IMPL::Exception('Can\'t find a property implementor for the specified class',$this->Class); +} + +1;