The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use above 'UR';
use Test::More;

package Car;

class Car {
    has => [
        make => {
            is => 'Text',
        },
    ],
};

sub make {
    my $self = shift;
    if (@_) {
        my $value = shift;
        $self->__make($value);
    }
    return $self->__make;
}

package main;

my $car = Car->create(make => 'GM');
isa_ok($car, 'Car');

my $observer_ran = 0;
$car->add_observer(
    aspect => 'make',
    callback => sub { $observer_ran = 1 },
);

is($observer_ran, 0, 'observer has not run yet');

$car->make('Ford');
is($car->make, 'Ford', 'make changed to Ford');

is($observer_ran, 1, 'observer triggered from make change');

done_testing();