view lib/IMPL/Class/MemberInfo.pm @ 411:ee36115f6a34 ref20150831

sync
author cin
date Mon, 21 Sep 2015 00:53:10 +0300
parents c6e90e02dd17
children
line wrap: on
line source

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