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 )