Mercurial > pub > Impl
comparison Lib/IMPL/Class/Property/Base.pm @ 60:b0c068da93ac
Lazy activation for the configuration objects (final concept)
small fixes
| author | wizard | 
|---|---|
| date | Tue, 09 Mar 2010 19:47:39 +0300 | 
| parents | 0f3e369553bd | 
| children | 76b878ad6596 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 59:0f3e369553bd | 60:b0c068da93ac | 
|---|---|
| 3 | 3 | 
| 4 use IMPL::Class::Property; | 4 use IMPL::Class::Property; | 
| 5 | 5 | 
| 6 require IMPL::Class::Member; | 6 require IMPL::Class::Member; | 
| 7 | 7 | 
| 8 our @factoryParams = qw($class $name $set $get $validator); | 8 sub factoryParams { qw($class $name $set $get $validator) }; | 
| 9 | 9 | 
| 10 my %factoryCache; | 10 my %factoryCache; | 
| 11 | 11 | 
| 12 my $accessor_get_no = 'die new IMPL::Exception(\'The property is write only\',$name,$class) unless $get;'; | 12 my $accessor_get_no = 'die new IMPL::Exception(\'The property is write only\',$name,$class) unless $get;'; | 
| 13 my $accessor_set_no = 'die new IMPL::Exception(\'The property is read only\',$name,$class) unless $set;'; | 13 my $accessor_set_no = 'die new IMPL::Exception(\'The property is read only\',$name,$class) unless $set;'; | 
| 54 | 54 | 
| 55 return \%accessors; | 55 return \%accessors; | 
| 56 } | 56 } | 
| 57 | 57 | 
| 58 sub GenerateSet { | 58 sub GenerateSet { | 
| 59 die new IMPL::Exception("Standard accessors not supported"); | 59 die new IMPL::Exception("Standard accessors not supported",'Set'); | 
| 60 } | 60 } | 
| 61 | 61 | 
| 62 sub GenerateGet { | 62 sub GenerateGet { | 
| 63 die new IMPL::Exception("Standard accessors not supported"); | 63 die new IMPL::Exception("Standard accessors not supported",'Get'); | 
| 64 } | 64 } | 
| 65 | 65 | 
| 66 sub GenerateGetList { | 66 sub GenerateGetList { | 
| 67 die new IMPL::Exception("Standard accessors not supported"); | 67 die new IMPL::Exception("Standard accessors not supported",'GetList'); | 
| 68 } | 68 } | 
| 69 | 69 | 
| 70 sub GenerateSetList { | 70 sub GenerateSetList { | 
| 71 my ($self) = @_; | 71 my ($self) = @_; | 
| 72 die new IMPL::Exception("Standard accessors not supported"); | 72 die new IMPL::Exception("Standard accessors not supported",'SetList'); | 
| 73 } | 73 } | 
| 74 | 74 | 
| 75 sub Make { | 75 sub Make { | 
| 76 my ($self,$propInfo) = @_; | 76 my ($self,$propInfo) = @_; | 
| 77 | 77 | 
| 99 my $mutators = $propInfo->Mutators; | 99 my $mutators = $propInfo->Mutators; | 
| 100 | 100 | 
| 101 if (ref $mutators) { | 101 if (ref $mutators) { | 
| 102 $propInfo->canGet( $mutators->{get} ? 1 : 0 ); | 102 $propInfo->canGet( $mutators->{get} ? 1 : 0 ); | 
| 103 $propInfo->canSet( $mutators->{set} ? 1 : 0 ); | 103 $propInfo->canSet( $mutators->{set} ? 1 : 0 ); | 
| 104 $propInfo->ownerSet(0); | |
| 104 } else { | 105 } else { | 
| 105 $propInfo->canGet( $mutators & prop_get ); | 106 $propInfo->canGet( $mutators & prop_get ); | 
| 106 $propInfo->canSet( $mutators & prop_set ); | 107 $propInfo->canSet( $mutators & prop_set ); | 
| 108 $propInfo->ownerSet( ($mutators & owner_set) == owner_set ); | |
| 107 } | 109 } | 
| 108 } | 110 } | 
| 109 | 111 | 
| 110 # extract from property info: class, name, get_accessor, set_accessor, validator | 112 # extract from property info: class, name, get_accessor, set_accessor, validator | 
| 111 sub RemapFactoryParams { | 113 sub RemapFactoryParams { | 
| 131 sub MakeFactoryKey { | 133 sub MakeFactoryKey { | 
| 132 my ($self,$propInfo) = @_; | 134 my ($self,$propInfo) = @_; | 
| 133 | 135 | 
| 134 my ($access,$mutators,$validator) = ($propInfo->get(qw(Access Mutators)),$propInfo->Attributes->{validator}); | 136 my ($access,$mutators,$validator) = ($propInfo->get(qw(Access Mutators)),$propInfo->Attributes->{validator}); | 
| 135 | 137 | 
| 138 my $implementor = ref $self || $self; | |
| 139 | |
| 136 return join ('', | 140 return join ('', | 
| 141 $implementor, | |
| 137 $access, | 142 $access, | 
| 138 $validator ? 'v' : 'n', | 143 $validator ? 'v' : 'n', | 
| 139 ref $mutators ? | 144 ref $mutators ? | 
| 140 ('c' , $mutators->{get} ? 1 : 0, $mutators->{set} ? 1 : 0) | 145 ('c' , $mutators->{get} ? 1 : 0, $mutators->{set} ? 1 : 0) | 
| 141 : | 146 : | 
| 144 } | 149 } | 
| 145 | 150 | 
| 146 sub CreateFactory { | 151 sub CreateFactory { | 
| 147 my ($self,$codeAccessCheck,$codeValidator,$codeOwnerCheck,$codeGet,$codeSet) = @_; | 152 my ($self,$codeAccessCheck,$codeValidator,$codeOwnerCheck,$codeGet,$codeSet) = @_; | 
| 148 | 153 | 
| 149 my $strParams = join(',',@factoryParams); | 154 my $strParams = join(',',$self->factoryParams); | 
| 150 | 155 | 
| 151 my $factory = <<FACTORY; | 156 my $factory = <<FACTORY; | 
| 152 | 157 | 
| 153 sub { | 158 sub { | 
| 154 my ($strParams) = \@_; | 159 my ($strParams) = \@_; | 
