comparison Lib/IMPL/Class/Meta.pm @ 180:d1676be8afcc

Перекодировка в utf-8
author sourcer
date Fri, 30 Dec 2011 23:40:00 +0300
parents aaab45153411
children 4d0e1962161c
comparison
equal deleted inserted replaced
179:b3d91ff7aea9 180:d1676be8afcc
8 8
9 sub set_meta { 9 sub set_meta {
10 my ($class,$meta_data) = @_; 10 my ($class,$meta_data) = @_;
11 $class = ref $class if ref $class; 11 $class = ref $class if ref $class;
12 12
13 # , 13 # тут нельзя использовать стандартное исключение, поскольку для него используется
14 # IMPL::Object::Accessor, 14 # класс IMPL::Object::Accessor, который наследуется от текущего класса
15 die "The meta_data parameter should be an object" if not ref $meta_data; 15 die "The meta_data parameter should be an object" if not ref $meta_data;
16 16
17 push @{$class_meta{$class}{ref $meta_data}},$meta_data; 17 push @{$class_meta{$class}{ref $meta_data}},$meta_data;
18 } 18 }
19 19
97 97
98 =pod 98 =pod
99 99
100 =head1 NAME 100 =head1 NAME
101 101
102 C<IMPL::Class::Meta> - . 102 C<IMPL::Class::Meta> - информация хранимая на уровне класса.
103 103
104 =head1 SYNOPSIS 104 =head1 SYNOPSIS
105 105
106 =begin code 106 =begin code
107 107
143 143
144 =end code 144 =end code
145 145
146 =head1 DESCRIPTION 146 =head1 DESCRIPTION
147 147
148 () , , 148 Позвоялет расширять информацию о типах (класса) при помощи метаданных, метаданными являются любые объекты,
149 (), . 149 притом выборка метаданных приоизводится по их типу (классу), что позволяет выбрать все однотипные метаданные.
150 150
151 151 Существует возможность выборки метаданных с учетом унаследованных от базовых классов
152 152
153 =head1 MEMBERS 153 =head1 MEMBERS
154 154
155 =over 155 =over
156 156
157 =item C<set_meta($meta_data)> 157 =item C<set_meta($meta_data)>
158 158
159 C<$meta_data> . 159 Добавляет метаданные C<$meta_data> к классу.
160 160
161 =item C<get_meta($meta_class,$predicate,$deep)> 161 =item C<get_meta($meta_class,$predicate,$deep)>
162 162
163 C<$meta_class> , 163 Выбирает метаданные типа C<$meta_class> и его наследников, с возможностью фильтрации и получения
164 . 164 метаданных базовых классов.
165 165
166 =over 166 =over
167 167
168 =item C<$meta_class> 168 =item C<$meta_class>
169 169
170 170 Тип метаданных
171 171
172 =item C<$predicate> 172 =item C<$predicate>
173 173
174 , 174 Подпрограмма, которая будет вызываться для каждых найденных метаданных и на основе результата
175 . 175 ее выполнения метаданные будут включены в результат или нет. Получеат в качестве параметра
176 , C<true> - , C<false> - 176 объект с метаданными, возвращает C<true> - включить метаданные в результа, C<false> - пропустить
177 . C<$_> . 177 метаданные как не подходящие. Также переменная C<$_> ссылается на текущий объект с метаданными.
178 178
179 =begin code 179 =begin code
180 180
181 my @info = Foo->get_meta( 181 my @info = Foo->get_meta(
182 'InfoMeta', 182 'InfoMeta',
195 195
196 =end code 196 =end code
197 197
198 =item C<$deep> 198 =item C<$deep>
199 199
200 . 200 Осуществлять поиск по базовым классам.
201 201
202 =back 202 =back
203 203
204 =item C<class_data($name,$new_value)> 204 =item C<class_data($name,$new_value)>
205 205
206 , C<class_data> , 206 В отличии от метаданных, C<class_data> не накапливает информацию,
207 C<$name>. 207 а хранит только один экземпляр для одного ключа C<$name>.
208 208
209 , , 209 Если новое значение не задано, то осуществляется выборка сохраненного,
210 , 210 если текущий класс не имеет сохраненного значения, то оно ищется в базовых
211 , 211 классах, затем копия найденного значения сохраняется в текущем классе и
212 . -, 212 возвращается наружу. Это позволяет базовым классам задавать значение по-умолчанию,
213 . 213 которые могут быть изменены или заменены субклассами.
214 214
215 =begin code 215 =begin code
216 216
217 package Foo; 217 package Foo;
218 use parent qw(IMPL::Class::Meta); 218 use parent qw(IMPL::Class::Meta);
238 238
239 =end code 239 =end code
240 240
241 =item C<static_accessor($name[,$value])> 241 =item C<static_accessor($name[,$value])>
242 242
243 C<$name> C<$value>. 243 Создает статическое свойство с именем C<$name> и начальным значением C<$value>.
244 244
245 C<class_data>, 245 Использование данного свойство аналогично использованию C<class_data>, за исключением
246 , C<class_data> , , 246 того, что C<class_data> гарантирует, что наследник обладает собственной копией данных,
247 , . 247 изменение которых не коснется ни базового класса, ни соседей.
248 248
249 =begin code 249 =begin code
250 250
251 package Foo; 251 package Foo;
252 use parent qw(IMPL::Class::Meta); 252 use parent qw(IMPL::Class::Meta);