NAME
MoobX::Trait::Observer - turn a Moose attribute into a MoobX observer
VERSION
version 0.1.2
SYNOPSIS
package Person;
use MoobX;
our $OPENING :Observable = 'Dear';
has name => (
traits => [ 'Observable' ],
is => 'rw',
);
has address => (
is => 'ro',
traits => [ 'Observer' ],
default => sub {
my $self = shift;
join ' ', $Person::OPENING, $self->name
},
);
my $person = Person->new( name => 'Wilfred' );
print $person->address; # Dear Wilfred
$Person::OPENING = 'My very dear';
print $person->address; # My very dear Wilfred
DESCRIPTION
Turns an object attribute into an observer. The default
argument is used as the value-generating function.
By default the attribute will be considered to be lazy. If the lazy
attribute is explicitly set to false
, then the observer will be of the autorun
variety. Be careful, though, as it'll probably not do what you want if you observe other attributes.
package MyThing;
use MoobX;
has foo => (
is => [ 'Observable' ],
);
has bar => (
is => [ 'Observer' ],
lazy => 0,
default => sub {
my $self = shift;
# OOPS! If 'bar' is processed before 'foo'
# at the object init stage, `$self->foo`
# will not be an observable yet, so `bar`
# will be set to be `1` and never react to anything
$self->foo + 1;
},
);
AUTHOR
Yanick Champoux <yanick@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2022, 2017 by Yanick Champoux.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.