Aion
view release on metacpan or search on metacpan
lib/Aion/Meta/FeatureConstruct.pm view on Meta::CPAN
predicate_name => 'has_%(name)s',
has => 'exists $self->{%(name)s}',
clearer_name => 'clear_%(name)s',
clear => 'delete $self->{%(name)s}',
clearret => '$self',
cleaner => '',
weaken => 'Scalar::Util::weaken(%(get)s);',
}, ref $cls || $cls;
}
sub add_attr { shift->_expand('attr', @_) }
sub add_preset { shift->_expand('preset', @_) }
sub add_trigger { shift->_expand('trigger', @_) }
sub add_cleaner { shift->_expand('cleaner', @_) }
sub add_access { shift->_expand('access', @_) }
sub add_release {
my $self = shift;
@$self{qw/getvar ret/} = ('my $val = %(get)s;', '$val') if $self->{ret} eq '';
$self->_expand('release', @_)
}
sub _expand(@) {
my ($self, $key, $code, $shift) = @_;
if(ref $self->{$key}) {
if($shift) { unshift @{$self->{$key}}, $code }
else { push @{$self->{$key}}, $code }
}
elsif ($self->{$key} eq '') {
$self->{$key} = $code;
}
else {
( run in 0.761 second using v1.01-cache-2.11-cpan-97f6503c9c8 )