Aion

 view release on metacpan or  search on metacpan

i18n/Aion/Meta/FeatureConstruct.ru-en.po  view on Meta::CPAN

msgid "## clearer_name\n"
"Имя метода-очистителя. Акцессор."
msgstr "## clearer_name\n"
"The name of the cleanser method. Accessor."

msgid "## initer\n"
"Код инициализации атрибута. Акцессор."
msgstr "##initer\n"
"Attribute initialization code. Accessor."

msgid "## not_specified\n"
"Код инициализации, если значение не указано. Акцессор."
msgstr "## not_specified\n"
"Initialization code if no value is specified. Accessor."

msgid "## getter\n"
"Код геттера в акцессоре. Акцессор."
msgstr "## getter\n"
"Getter code in the accessor. Accessor."

msgid "## setter\n"
"Код сеттера в акцессоре. По умолчанию: '%(write)s'."
msgstr "## setter\n"

lib/Aion.pm  view on Meta::CPAN

	die "Use is => '{ro|rw|wo|no} {+|-} {*} {?} {!}'" if $is !~ /^(?<access>ro|rw|wo|no)?(?<require>[+-])?(?<weak>\*)?(?<has>\??)(?<clear>!?)\z/;

	my ($construct, $name) = @$feature{qw/construct name/};

	$construct->getter("die 'Feature $name cannot be get!';") if $+{access} ~~ [qw/wo no/];

	$construct->setter("die 'Feature $name cannot be set!';") if $+{access} ~~ [qw/ro no/];

	$construct->add_trigger("%(weaken)s") if $+{weak};

	$feature->{required} = 1, $construct->not_specified(' else { die "%(init_arg)s required!" }') if $+{require} eq '+';
	
	$feature->{excessive} = 1, $construct->initer('die "%(init_arg)s excessive!"') if $+{require} eq '-';

	$feature->{make_predicate} = 1 if $+{has};
	$feature->{make_clearer} = 1 if $+{clear};
}

# isa => Type
sub isa_aspect {
	my ($isa, $feature) = @_;

lib/Aion.pm  view on Meta::CPAN

				%(write)s
			}");
		} else {
			$feature->construct->add_access("unless(%(has)s) {
				my \$val = ${\$feature->meta}\{default};
				%(write)s
			}");
		}
	} else {
		if($default_is_code) {
			$feature->{construct}->not_specified(" else {
				my \$val = ${\$feature->meta}\{builder}->(\$self);
				%(write)s
			}");
		} else {
			$feature->{construct}->not_specified(" else {
				my \$val = ${\$feature->meta}\{default};
				%(write)s
			}");
		}
		
	}
}

# trigger => $sub
sub trigger_aspect {

lib/Aion/Meta/FeatureConstruct.md  view on Meta::CPAN

$::construct->clearer_name # \> clear_%(name)s
```

## initer
Код инициализации атрибута. Акцессор.

```perl
$::construct->initer # \> %(initvar)s%(write)s
```

## not_specified
Код инициализации, если значение не указано. Акцессор.

```perl
$::construct->not_specified # -> ''
```

## getter
Код геттера в акцессоре. Акцессор.

```perl
$::construct->getter # \> %(read)s
```

## setter

lib/Aion/Meta/FeatureConstruct.pm  view on Meta::CPAN


Aion::Meta::Util::create_getters(qw/
	pkg name
	write read
	getvar ret
/);
Aion::Meta::Util::create_accessors(qw/
    init_arg
	set get has clear weaken
	accessor_name reader_name writer_name predicate_name clearer_name
	initer not_specified
	getter setter selfret
/);

#  Конструктор
sub new {
	my ($cls, $pkg, $name) = @_;

	bless {
		pkg => $pkg,
		name => $name,
		initializer => <<'END',
		if (exists $value{%(init_arg)s}) {
			%(initer)s
		}%(not_specified)s
END
		destroyer => <<'END',
		if (%(has)s) {
			eval {
				%(cleaner)s
			};
			warn $@ if $@;
		}
END
		accessor => <<'END',

lib/Aion/Meta/FeatureConstruct.pm  view on Meta::CPAN

		reader_name    => '_get_%(name)s',
		writer_name    => '_set_%(name)s',
		attr           => '',
		write          => '%(preset)s%(set)s%(trigger)s',
		read           => '%(access)s%(getvar)s%(release)s%(ret)s',
		setter         => '%(write)s',
		getter         => '%(read)s',
		initer         => "%(initvar)s%(write)s",
		init_arg       => '%(name)s',
		initvar        => 'my $val = delete $value{%(init_arg)s};',
		not_specified  => '',
		preset         => '',
		set            => '$self->{%(name)s} = $val;',
		trigger        => '',
		selfret        => '$self',
		access         => '',
		getvar         => '%(get)s',
		get            => '$self->{%(name)s}',
		release        => '',
		ret            => '',
		predicate_name => 'has_%(name)s',

lib/Aion/Meta/FeatureConstruct.pm  view on Meta::CPAN

The name of the cleanser method. Accessor.

	$::construct->clearer_name # \> clear_%(name)s

=head2 initer

Attribute initialization code. Accessor.

	$::construct->initer # \> %(initvar)s%(write)s

=head2 not_specified

Initialization code if no value is specified. Accessor.

	$::construct->not_specified # -> ''

=head2 getter

Getter code in the accessor. Accessor.

	$::construct->getter # \> %(read)s

=head2 setter

Setter code in the accessor. Default: '%(write)s'.

t/aion/meta/feature-construct.t  view on Meta::CPAN

local ($::_g0 = do {$::construct->clearer_name}, $::_e0 = 'clear_%(name)s'); ::ok $::_g0 eq $::_e0, '$::construct->clearer_name # \> clear_%(name)s' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;

# 
# ## initer
# Код инициализации атрибута. Акцессор.
# 
::done_testing; }; subtest 'initer' => sub { 
local ($::_g0 = do {$::construct->initer}, $::_e0 = '%(initvar)s%(write)s'); ::ok $::_g0 eq $::_e0, '$::construct->initer # \> %(initvar)s%(write)s' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;

# 
# ## not_specified
# Код инициализации, если значение не указано. Акцессор.
# 
::done_testing; }; subtest 'not_specified' => sub { 
local ($::_g0 = do {$::construct->not_specified}, $::_e0 = do {''}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, '$::construct->not_specified # -> \'\'' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;

# 
# ## getter
# Код геттера в акцессоре. Акцессор.
# 
::done_testing; }; subtest 'getter' => sub { 
local ($::_g0 = do {$::construct->getter}, $::_e0 = '%(read)s'); ::ok $::_g0 eq $::_e0, '$::construct->getter # \> %(read)s' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;

# 
# ## setter



( run in 1.316 second using v1.01-cache-2.11-cpan-5735350b133 )