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 )