Aion
view release on metacpan or search on metacpan
lib/Aion.pm view on Meta::CPAN
=back
File lib/CounterEon.pm:
package CounterEon;
#@eon ex.counter
use Aion;
has accomulator => (isa => 'AccomulatorEon', eon => 1);
1;
File lib/AccomulatorEon.pm:
package AccomulatorEon;
#@eon
use Aion;
has power => (isa => 'PowerEon', eon => 2);
1;
lib/PowerEon.pm file:
package PowerEon;
use Aion;
has counter => (eon => 'ex.counter');
#@eon
sub power { shift->new }
1;
We use pleroma locally:
{
use Aion::Pleroma;
my $pleroma = Aion::Pleroma->new(ini => undef, pleroma => {
'ex.counter' => 'CounterEon#new',
AccomulatorEon => 'AccomulatorEon#new',
'PowerEon#power' => 'PowerEon#power',
});
local *Aion::pleroma = sub { $pleroma };
my $counter = Aion->pleroma->get('ex.counter');
$counter->accomulator->power->counter # -> $counter
}
Aion->pleroma->get('ex.counter') # -> undef
See L<Aion::Pleroma>.
=head2 trigger => $sub
C<$sub> is called after setting the property in the constructor (C<new>) or via a setter.
The etymology of C<trigger> is to let in.
package ExTrigger { use Aion;
has x => (trigger => sub {
my ($self, $old_value) = @_;
$self->y($old_value + $self->x);
});
has y => ();
}
my $ex = ExTrigger->new(x => 10);
$ex->y # -> 10
$ex->x(20);
$ex->y # -> 30
=head2 release => $sub
C<$sub> is called before returning a property from an object via a getter.
The etymology of C<release> is to release.
package ExRelease { use Aion;
has x => (release => sub {
my ($self, $value) = @_;
$_[1] = $value + 1;
});
}
my $ex = ExRelease->new(x => 10);
$ex->x # -> 11
=head2 init_arg => $name
Changes the property name in the constructor.
package ExInitArg { use Aion;
has x => (is => 'ro+', init_arg => 'init_x');
ExInitArg->new(init_x => 10)->x # -> 10
}
=head2 accessor => $name
Changes the accessor name.
package ExAccessor { use Aion;
has x => (is => 'rw', accessor => '_x');
ExAccessor->new->_x(10)->_x # -> 10
}
=head2 writer => $name
Creates a setter named C<$name> for a property.
package ExWriter { use Aion;
has x => (is => 'ro', writer => '_set_x');
ExWriter->new->_set_x(10)->x # -> 10
}
=head2 reader => $name
Creates a getter named C<$name> for a property.
package ExReader { use Aion;
has x => (is => 'wo', reader => '_get_x');
ExReader->new(x => 10)->_get_x # -> 10
}
=head2 predicate => $name
Creates a predicate named C<$name> for a property. You can also create a predicate with a standard name using C<< is =E<gt> '?' >>.
package ExPredicate { use Aion;
has x => (predicate => '_has_x');
my $ex = ExPredicate->new;
$ex->_has_x # -> ""
( run in 1.390 second using v1.01-cache-2.11-cpan-98e64b0badf )