3 Reaction::Class - Reaction class declaration syntax
9 =for example My::Person setup
14 use Reaction::Types::Core qw/Str/;
20 has 'nickname' => optional Str;
22 implements 'preferred_name' which {
25 guarantees when { $self->has_nickname } returns { $self->nickname };
26 guarantees when { !$self->has_nickname } returns { $self->name };
28 return ($self->has_nickname ? $self->nickname : $self->name);
33 =for example My::Person tests
37 my $meta = My::Person->meta;
39 isa_ok($meta, 'Reaction::Meta::Class');
41 my $attr_map = $meta->get_attribute_map;
43 foreach my $attr_name (qw/name nickname/) {
44 isa_ok($attr_map->{$attr_name}, 'Reaction::Meta::Attribute');
47 ok($attr_map->{name}->is_required, 'name is required');
48 ok(!$attr_map->{nickname}->is_required, 'nickname is optional');
54 =for example My::Person usage
56 my $jim = My::Person->new(name => 'Jim');
58 print $jim->name."\n"; # prints "Jim\n"
60 print $jim->preferred_name."\n"; # prints "Jim\n"
62 $jim->name('James'); # returns 'James'
64 $jim->nickname('Jim'); # returns 'Jim'
66 print $jim->preferred_name."\n"; # prints "Jim\n"
68 $jim->preferred_name('foo'); # throws Reaction::Exception::MethodArgumentException
70 =for example My::Person end
76 See L<Reaction::Class> for authors.
80 See L<Reaction::Class> for the license.