Aion
view release on metacpan or search on metacpan
lib/Aion/Meta/FeatureConstruct.pm view on Meta::CPAN
=head2 getter
Getter code in the accessor. Accessor.
$::construct->getter # \> %(read)s
=head2 setter
Setter code in the accessor. Default: '%(write)s'.
$::construct->setter # \> %(write)s
=head2 selfret
Return code from setter. Accessor.
$::construct->selfret # \> $self
=head2 add_attr($code, $unshift)
Adds an attribute to the accessor.
$::construct->add_attr(':bvalue');
$::construct->{attr} # --> [':lvalue', ':bvalue']
$::construct->add_attr(':a_value', 1);
$::construct->{attr} # --> [':a_value', ':lvalue', ':bvalue']
=head2 add_preset($code, $unshift)
Adds a preset code before recording.
$::construct->add_preset('die if $val < 0;', 1);
$::construct->{preset} # -> 'die if $val < 0;'
=head2 add_trigger($code, $unshift)
Adds a trigger after recording.
$::construct->add_trigger('$self->on_change;');
$::construct->{trigger} # -> '$self->on_change;'
=head2 add_cleaner($code, $unshift)
Adds cleanup code before deletion.
$::construct->add_cleaner('$self->{old} = $self->{attr};');
$::construct->{cleaner} # -> '$self->{old} = $self->{attr};'
=head2 add_access($code, $unshift)
Adds code to the getter before reading the attribute.
$::construct->add_access('die unless $self->{attr};');
$::construct->{access} # -> 'die unless $self->{attr};'
=head2 add_release($code, $unshift)
Adds code to the getter after reading.
$::construct->add_release('$val = undef;');
$::construct->{release} # -> '$val = undef;'
=head2 initializer
Generates code to initialize a feature in the constructor (C<new>).
$::construct->initializer # -> << 'END'
if (exists $value{my_feature}) {
my $val = delete $value{my_feature};
die if $val < 0;
$self->{my_feature} = $val;
$self->on_change;
}
END
=head2 destroyer
Generates code for the destructor.
$::construct->destroyer # -> <<'END'
if (exists $self->{my_feature}) {
eval {
$self->{old} = $self->{attr};
};
warn $@ if $@;
}
END
=head2 accessor
Generates an accessor code.
$::construct->accessor # -> <<'END'
package My::Package {
sub my_feature:a_value:lvalue:bvalue {
if (@_>1) {
my ($self, $val) = @_;
die if $val < 0;
$self->{my_feature} = $val;
$self->on_change;
$self
} else {
my ($self) = @_;
die unless $self->{attr};
my $val = $self->{my_feature};
$val = undef;
$val
}
}
}
END
=head2 reader
Generates getter code.
$::construct->reader # -> <<'END'
package My::Package {
sub _get_my_feature {
my ($self) = @_;
die unless $self->{attr};
my $val = $self->{my_feature};
$val = undef;
$val
}
}
END
=head2 writer
Generates setter code.
$::construct->writer # -> <<'END'
package My::Package {
sub _set_my_feature {
my ($self, $val) = @_;
die if $val < 0;
$self->{my_feature} = $val;
$self->on_change;
$self
}
}
END
=head2 predicate
Generates a predicate code.
$::construct->predicate # -> <<'END'
package My::Package {
sub has_my_feature {
my ($self) = @_;
exists $self->{my_feature}
}
}
END
=head2 clearer
Generates a purifier code.
$::construct->clearer # -> <<'END'
package My::Package {
sub clear_my_feature {
my ($self) = @_;
if (exists $self->{my_feature}) {
$self->{old} = $self->{attr};
delete $self->{my_feature}
}
$self
}
}
END
=head1 AUTHOR
Yaroslav O. Kosmina L<mailto:dart@cpan.org>
=head1 LICENSE
â B<GPLv3>
=head1 COPYRIGHT
( run in 1.497 second using v1.01-cache-2.11-cpan-d80b1682f3f )