Mercurial > pub > Impl
comparison lib/IMPL/Web/View/Metadata/BaseMeta.pm @ 407:c6e90e02dd17 ref20150831
renamed Lib->lib
author | cin |
---|---|
date | Fri, 04 Sep 2015 19:40:23 +0300 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
406:f23fcb19d3c1 | 407:c6e90e02dd17 |
---|---|
1 package IMPL::Web::View::Metadata::BaseMeta; | |
2 use strict; | |
3 | |
4 use IMPL::lang; | |
5 use IMPL::Const qw(:prop); | |
6 use IMPL::declare { | |
7 require => { | |
8 Exception => 'IMPL::Exception', | |
9 ArgException => '-IMPL::InvalidArgumentException', | |
10 NotImplException => '-IMPL::NotImplementedException' | |
11 }, | |
12 base => [ | |
13 'IMPL::Object' => undef | |
14 ], | |
15 props => [ | |
16 model => PROP_RO, | |
17 modelType => PROP_RO, | |
18 name => PROP_RO, | |
19 label => PROP_RO, | |
20 container => PROP_RO, | |
21 template => PROP_RO, | |
22 | |
23 _childMap => PROP_RO, | |
24 _childNames => PROP_RO | |
25 ] | |
26 }; | |
27 | |
28 sub CTOR { | |
29 my ($this,$model,$type,$args) = @_; | |
30 | |
31 $this->model($model); | |
32 $this->modelType($type); | |
33 $this->_childMap({}); | |
34 | |
35 #mixin other args | |
36 if ($args) { | |
37 $this->$_($args->{$_}) foreach grep $args->{$_}, qw(name label container template); | |
38 } | |
39 } | |
40 | |
41 sub GetProperty { | |
42 my ($this,$name) = @_; | |
43 | |
44 $this->GetProperties() | |
45 unless $this->_childNames; | |
46 | |
47 return $this->_childMap->{$name}; | |
48 } | |
49 | |
50 sub GetProperties { | |
51 my ($this) = @_; | |
52 | |
53 if ($this->_childNames) { | |
54 return [ map $this->_childMap->{$_}, @{$this->_childNames} ]; | |
55 } else { | |
56 my @childNames; | |
57 my %childMap; | |
58 my @result; | |
59 | |
60 foreach my $child (@{$this->PopulateProperties()}) { | |
61 $childMap{$child->name} = $child; | |
62 push @childNames, $child->name; | |
63 push @result, $child; | |
64 } | |
65 | |
66 $this->_childMap(\%childMap); | |
67 $this->_childNames(\@childNames); | |
68 return \@result; | |
69 } | |
70 } | |
71 | |
72 sub PopulateProperties { | |
73 my ($this) = @_; | |
74 | |
75 die NotImplException->new(); | |
76 } | |
77 | |
78 sub GetItems { | |
79 my ($this) = @_; | |
80 | |
81 die NotImplException->new(); | |
82 } | |
83 | |
84 sub GetItem { | |
85 my ($this,$index) = @_; | |
86 | |
87 die NotImplException->new(); | |
88 } | |
89 | |
90 1; | |
91 | |
92 __END__ | |
93 | |
94 =pod | |
95 | |
96 =head1 NAME | |
97 | |
98 =head1 SYNOPSIS | |
99 | |
100 =head1 DESCRIPTION | |
101 | |
102 Метаданные описывают модель, ее свойства, используются для построения | |
103 представления. | |
104 | |
105 =over | |
106 | |
107 =item * type | |
108 | |
109 Опционально. Тип модели. В случаях, когда модель не определена, данное свойство | |
110 позволяет определить ее тип. | |
111 | |
112 =item * label | |
113 | |
114 Опционально. Имя модели для отображения. | |
115 | |
116 =item * template | |
117 | |
118 Шаблон, который следует использовать для отображения модели. | |
119 | |
120 =item * fields | |
121 | |
122 Коллекция с информацией по свойствам (полям) модели. Данный хеш используется | |
123 для определения представления при использовании C<display_for('field')>. | |
124 | |
125 =back | |
126 | |
127 Метаданные публикуются провайдером, кроме того они могут быть расширены | |
128 дополнительными свойствами. | |
129 | |
130 =head1 MEMBERS | |
131 | |
132 =head2 C<GetChild($name)> | |
133 | |
134 Возвращает метаданные для дочернего элемента, например свойства объекта | |
135 | |
136 =head2 C<GetChildren()> | |
137 | |
138 Возвращает ссылку на массив с метаданными для дочерних элементов | |
139 | |
140 =cut |