Aion

 view release on metacpan or  search on metacpan

lib/Aion/Meta/FeatureConstruct.pm  view on Meta::CPAN

package Aion::Meta::FeatureConstruct;

use common::sense;

use Aion::Meta::Util qw//;

Aion::Meta::Util::create_getters(qw/
	pkg name
	write read
	getvar ret
/);
Aion::Meta::Util::create_accessors(qw/
    init_arg
	set get has clear weaken
	accessor_name reader_name writer_name predicate_name clearer_name
	initer not_specified
	getter setter selfret
/);

#  Конструктор
sub new {
	my ($cls, $pkg, $name) = @_;

	bless {
		pkg => $pkg,
		name => $name,
		initializer => <<'END',
		if (exists $value{%(init_arg)s}) {
			%(initer)s
		}%(not_specified)s
END
		destroyer => <<'END',
		if (%(has)s) {
			eval {
				%(cleaner)s
			};
			warn $@ if $@;
		}
END
		accessor => <<'END',
package %(pkg)s {
	sub %(accessor_name)s%(attr)s {
		if (@_>1) {
			my ($self, $val) = @_;
			%(setter)s
			%(selfret)s
		} else {
			my ($self) = @_;
			%(getter)s
		}
	}
}
END
		reader => <<'END',
package %(pkg)s {
	sub %(reader_name)s {
		my ($self) = @_;
		%(read)s
	}
}
END
		writer => <<'END',
package %(pkg)s {
	sub %(writer_name)s {
		my ($self, $val) = @_;
		%(write)s
		%(selfret)s
	}
}
END
		predicate => <<'END',
package %(pkg)s {
	sub %(predicate_name)s {
		my ($self) = @_;
		%(has)s
	}
}
END
		clearer => <<'END',
package %(pkg)s {
	sub %(clearer_name)s {
		my ($self) = @_;
		if (%(has)s) {
			%(cleaner)s%(clear)s



( run in 0.699 second using v1.01-cache-2.11-cpan-5837b0d9d2c )