NAME

Aion::Meta::Feature - feature metadescriptor

SYNOPSIS

use Aion::Meta::Feature;

our $feature = Aion::Meta::Feature->new("My::Package", "my_feature" => (is => 'rw'));

$feature->stringify  # => has my_feature => (is => 'rw') of My::Package

DESCRIPTION

Describes a feature that is added to the class by the has function.

METHODS

pkg

Пакет, к которому относится фича.

$::feature->pkg # -> "My::Package"

name

Feature name.

$::feature->name # -> "my_feature"

opt

Feature options hash.

$::feature->opt # --> {is => 'rw'}

has

An array of feature options in the form of key-value pairs.

$::feature->has # --> ['is', 'rw']

construct

Feature constructor object.

ref $::feature->construct # \> Aion::Meta::FeatureConstruct

order()

The serial number of the feature in the class.

$::feature->order # -> 0

required (;$bool)

Flag for requiring a feature in the constructor (new).

$::feature->required(1);
$::feature->required # -> 1

excessive (;$bool)

Feature redundancy flag in the constructor (new). If it is there, an exception should be thrown.

$::feature->excessive(1);
$::feature->excessive # -> 1

isa (;Object[Aion::Type])

Type constraint on feature value.

use Aion::Type;

my $Int = Aion::Type->new(name => 'Int');

$::feature->isa($Int);
$::feature->isa # -> $Int

lazy (;$bool)

Lazy initialization flag.

$::feature->lazy(1);
$::feature->lazy # -> 1

builder (;$sub)

Feature value builder or undef.

my $builder = sub {};
$::feature->builder($builder);
$::feature->builder # -> $builder

default (;$value)

Default value for the feature.

$::feature->default(42);
$::feature->default # -> 42

trigger (;$sub)

Event handler for feature value change or undef.

my $trigger = sub {};
$::feature->trigger($trigger);
$::feature->trigger # -> $trigger

release (;$sub)

Event handler for reading a value from a feature or undef.

my $release = sub {};
$::feature->release($release);
$::feature->release # -> $release

cleaner (;$sub)

Event handler for removing a feature from an object or undef.

my $cleaner = sub {};
$::feature->cleaner($cleaner);
$::feature->cleaner # -> $cleaner

make_reader (;$bool)

Flag for creating a reader method.

$::feature->make_reader(1);
$::feature->make_reader # -> 1

make_writer (;$bool)

Flag for creating a writer method.

$::feature->make_writer(1);
$::feature->make_writer # -> 1

make_predicate (;$bool)

Flag for creating a predicate method.

$::feature->make_predicate(1);
$::feature->make_predicate # -> 1

make_clearer (;$bool)

Flag for creating a cleanup method.

$::feature->make_clearer(1);
$::feature->make_clearer # -> 1

new ($pkg, $name, @has)

Feature designer.

my $feature = Aion::Meta::Feature->new('My::Class', 'attr', is => 'ro', default => 1);
$feature->pkg # -> "My::Class"
$feature->name # -> "attr"
$feature->opt # --> {is => 'ro', default => 1}

stringify()

String representation of a feature.

$::feature->stringify # -> "has my_feature => (is => 'rw') of My::Package"

mk_property()

Creates a property accessor, getter, setter, predicate, and purifier.

package My::Package { use Aion }

$::feature->mk_property;

!!My::Package->can('my_feature') # -> 1

meta()

Returns code as text to access the feature's meta information.

$::feature->meta # \> $Aion::META{'My::Package'}{feature}{my_feature}

stash ($key; $val)

Access the property store for the calling package.

$::feature->stash('my_key', 'my_value');
$::feature->stash('my_key') # -> 'my_value'

AUTHOR

Yaroslav O. Kosmina mailto:dart@cpan.org

LICENSE

GPLv3

COPYRIGHT

The Aion::Meta::Feature module is copyright © 2025 Yaroslav O. Kosmina. Rusland. All rights reserved.