Aion

 view release on metacpan or  search on metacpan

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

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

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

## selfret
Код возврата из сеттера. Акцессор.

```perl
$::construct->selfret # \> $self
```

## add_attr($code, $unshift)
Добавляет атрибут к акцессору.

```perl
$::construct->add_attr(':bvalue');
$::construct->{attr} # --> [':lvalue', ':bvalue']
$::construct->add_attr(':a_value', 1);
$::construct->{attr} # --> [':a_value', ':lvalue', ':bvalue']
```

## add_preset($code, $unshift)
Добавляет код предустановки перед записью.

```perl
$::construct->add_preset('die if $val < 0;', 1);
$::construct->{preset} # -> 'die if $val < 0;'
```

## add_trigger($code, $unshift)
Добавляет триггер после записи.

```perl
$::construct->add_trigger('$self->on_change;');
$::construct->{trigger} # -> '$self->on_change;'
```

## add_cleaner($code, $unshift)
Добавляет код очистки перед удалением.

```perl
$::construct->add_cleaner('$self->{old} = $self->{attr};');
$::construct->{cleaner} # -> '$self->{old} = $self->{attr};'
```

## add_access($code, $unshift)
Добавляет код в геттер перед чтением атрибута.

```perl
$::construct->add_access('die unless $self->{attr};');
$::construct->{access} # -> 'die unless $self->{attr};'
```

## add_release($code, $unshift)
Добавляет код в геттер после чтения.

```perl
$::construct->add_release('$val = undef;');
$::construct->{release} # -> '$val = undef;'
```

## initializer
Генерирует код для инициализации фичи в конструкторе (`new`).

```perl

$::construct->initializer # -> << 'END'
		if (exists $value{my_feature}) {
			my $val = delete $value{my_feature};
			die if $val < 0;
			$self->{my_feature} = $val;
			$self->on_change;
		}
END
```

## destroyer
Генерирует код для деструктора.

```perl
$::construct->destroyer # -> <<'END'
		if (exists $self->{my_feature}) {
			eval {
				$self->{old} = $self->{attr};
			};
			warn $@ if $@;
		}
END
```

## accessor
Генерирует код акцессора.

```perl



$::construct->accessor # -> <<'END'
package My::Package {
	sub my_feature:a_value:lvalue:bvalue {
		if (@_>1) {
			my ($self, $val) = @_;
			die if $val < 0;
			$self->{my_feature} = $val;
			$self->on_change;
			$self
		} else {
			my ($self) = @_;
			die unless $self->{attr};
			my $val = $self->{my_feature};
			$val = undef;
			$val
		}
	}
}
END
```

## reader
Генерирует код геттера.

```perl
$::construct->reader # -> <<'END'
package My::Package {
	sub _get_my_feature {
		my ($self) = @_;
		die unless $self->{attr};
		my $val = $self->{my_feature};
		$val = undef;
		$val
	}
}
END
```

## writer
Генерирует код сеттера.

```perl
$::construct->writer # -> <<'END'
package My::Package {
	sub _set_my_feature {
		my ($self, $val) = @_;
		die if $val < 0;
		$self->{my_feature} = $val;
		$self->on_change;
		$self
	}
}
END
```

## predicate
Генерирует код предиката.

```perl
$::construct->predicate # -> <<'END'
package My::Package {
	sub has_my_feature {
		my ($self) = @_;
		exists $self->{my_feature}
	}
}
END
```

## clearer
Генерирует код очистителя.

```perl
$::construct->clearer # -> <<'END'
package My::Package {
	sub clear_my_feature {
		my ($self) = @_;
		if (exists $self->{my_feature}) {
			$self->{old} = $self->{attr};
			delete $self->{my_feature}
		}
		$self
	}
}
END
```

# AUTHOR

Yaroslav O. Kosmina <dart@cpan.org>

# LICENSE



( run in 1.821 second using v1.01-cache-2.11-cpan-d80b1682f3f )