Mercurial > pub > Impl
comparison Lib/IMPL/Web/View/Metadata/ObjectMeta.pm @ 370:cbf4febf0930
ObjectMeta, Tests, migrating to the new metadata model.
| author | sergey |
|---|---|
| date | Tue, 10 Dec 2013 03:02:01 +0400 |
| parents | 7c784144d2f1 |
| children | d5c8b955bf8d |
comparison
equal
deleted
inserted
replaced
| 369:7c784144d2f1 | 370:cbf4febf0930 |
|---|---|
| 1 package IMPL::Web::View::Metadata::FormMeta; | 1 package IMPL::Web::View::Metadata::ObjectMeta; |
| 2 use strict; | 2 use strict; |
| 3 | 3 |
| 4 use IMPL::lang; | |
| 4 use IMPL::Const qw(:prop); | 5 use IMPL::Const qw(:prop); |
| 5 use IMPL::declare { | 6 use IMPL::declare { |
| 6 require => { | 7 require => { |
| 7 Exception => 'IMPL::Exception', | 8 Exception => 'IMPL::Exception', |
| 8 ArgException => '-IMPL::InvalidArgumentException', | 9 ArgException => '-IMPL::InvalidArgumentException', |
| 9 OpException => '-IMPL::InvalidOperationException', | 10 OpException => '-IMPL::InvalidOperationException', |
| 10 PropertyInfo => 'IMPL::Class::PropertyInfo', | 11 PropertyInfo => 'IMPL::Class::PropertyInfo', |
| 11 AbstractObject => '-IMPL::Object::Abstract' | 12 AbstractObject => '-IMPL::Object::Abstract' |
| 12 }, | 13 }, |
| 13 base => [ | 14 base => [ |
| 14 'IMPL::Web::View::Metadata::BaseMeta' => '@_' | 15 'IMPL::Web::View::Metadata::BaseMeta' => sub { |
| 16 my ($model,$type,$args) = @_; | |
| 17 $type ||= typeof($model); | |
| 18 return ($model,$type,$args); | |
| 19 } | |
| 15 ], | 20 ], |
| 16 props => [ | 21 props => [ |
| 17 isMultiple => PROP_RO, | 22 isMultiple => PROP_RO, |
| 18 holdingType => PROP_RO | 23 holdingType => PROP_RO |
| 19 ] | 24 ] |
| 24 }; | 29 }; |
| 25 | 30 |
| 26 sub CTOR { | 31 sub CTOR { |
| 27 my ($this,$model,$type,$args) = @_; | 32 my ($this,$model,$type,$args) = @_; |
| 28 | 33 |
| 29 $type ||= typeof($model); | 34 $type = $this->modelType; |
| 30 $args->{isMultiple} ||= $type eq 'ARRAY'; | 35 |
| 36 $args->{isMultiple} ||= $type && $type eq 'ARRAY'; | |
| 31 | 37 |
| 32 if ($args) { | 38 if ($args) { |
| 33 $this->$_($args->{$_}) foreach grep $args->{$_}, qw(isMultiple holdingType); | 39 $this->$_($args->{$_}) foreach grep $args->{$_}, qw(isMultiple holdingType); |
| 34 } | 40 } |
| 35 } | 41 } |
| 56 $pt = $pi->type; | 62 $pt = $pi->type; |
| 57 } | 63 } |
| 58 | 64 |
| 59 push @props, Meta->new($pv, $pt, \%args); | 65 push @props, Meta->new($pv, $pt, \%args); |
| 60 } | 66 } |
| 61 } elsif ( $modelType eq 'HASH' ) { | 67 } elsif ( $modelType && $modelType eq 'HASH' ) { |
| 62 while ( my ($k,$v) = each %{$this->model || {}} ) { | 68 while ( my ($k,$v) = each %{$this->model || {}} ) { |
| 63 push @props, Meta->new($v,undef,{name => $k}); | 69 push @props, Meta->new($v,undef,{name => $k}); |
| 64 } | 70 } |
| 65 } | 71 } |
| 66 | 72 |
