diff lib/IMPL/Class/MemberInfo.pm @ 407:c6e90e02dd17 ref20150831

renamed Lib->lib
author cin
date Fri, 04 Sep 2015 19:40:23 +0300
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/IMPL/Class/MemberInfo.pm	Fri Sep 04 19:40:23 2015 +0300
@@ -0,0 +1,84 @@
+package IMPL::Class::MemberInfo;
+use strict;
+
+use IMPL::Const qw(:prop);
+BEGIN {
+    our @ISA = qw(IMPL::Object::Accessor);
+}
+
+require IMPL::Object::Accessor;
+require IMPL::Exception;
+
+# использовать ClassPropertyImplementor не получится, поскольку он будет
+# создавать экземпляры PropertyInfo, который не доописан (в нем не определены
+# члены)
+__PACKAGE__->mk_accessors(
+    qw(
+        name
+        access
+        class
+        attributes
+    )
+);
+
+our %CTOR = (
+    'IMPL::Object::Accessor' => undef
+);
+
+sub CTOR {
+    my $this = shift;
+
+    die new IMPL::Exception('The name is required for the member') unless $this->name;
+    die new IMPL::Exception('The class is required for the member') unless $this->class;
+    
+    $this->attributes({}) unless defined $this->attributes;
+    $this->access(3) unless $this->access;
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+C<IMPL::Class::MemberInfo> - информация о члене класса.
+
+=head1 DESCRIPTION
+
+Данный класс является базовым для таких классов как C<IMPL::Class::PropertyInfo>, C<IMPL::Class::MethodInfo> и 
+предназначен для хренения метаданных.
+
+Данный класс наследуется от C<IMPL::Object::Accessor> и не содержит в себе метаданных о своих членах.
+
+=head1 MEMBERS
+
+=over
+
+=item C<[get,set] name>
+
+Имя члена.
+
+=item C<[get,set] access>
+
+Default public.
+
+Атрибут доступа ( public | private | protected )
+
+=item C<[get,set] class>
+
+Класс владелец
+        
+=item C<[get,set] attributes>
+
+Дополнительные атрибуты
+
+=item C<Implement()>
+
+При реализации собственного субкласса, данный метод может быть переопределен для
+реализации дополнительной обработки (например, создание методов доступа для свойств).
+
+=back
+
+=cut