Class-Root
view release on metacpan or search on metacpan
lib/Class/Root.pm view on Meta::CPAN
if ( my $code = $parent->can("DESTROY") ) {
$self->$code;
}
}
};
my $root_class_init = sub {
my $class = shift;
my $cdata = $class_data->{$class};
my %args = ( @_ );
while ( my($k,$v) = each %args ) {
my $method = $k;
unless ( $cdata->{$attr_init_done_key}->{$method} ) {
$cdata->{$attr_init_done_key}->{$method} = 1;
if ( ::RT_CHECKS ) {
eval { $class->$method($v) };
croak "Error calling method \"$method\" for \"$class\": $EVAL_ERROR\n" if $EVAL_ERROR;
} else {
$class->$method($v);
}
}
}
};
declare class_init => class_method { goto $root_class_init };
declare base_class_init => class_method {
my $class = shift;
my $cdata = $class_data->{$class};
my $caller;
if ( @_ and $_[0] =~ /^CALLER=(.*)/ ) {
shift;
$caller = $1;
}
unless ( defined $caller ) {
$caller = caller();
$caller =~ s/::LOCAL$//;
}
$cdata->{$base_init_done_key}->{$caller} = 1;
my %attr_values = %{ $schema->{$caller}->{CLASS_ATTR_VALUES} };
my @args = ( %attr_values );
my $key = 0;
my $prefix = prefix($caller);
foreach ( @_ ) {
my $attr = $_;
lib/Class/Root.pm view on Meta::CPAN
my @caller_isa;
{ no strict 'refs';
@caller_isa = @{ $caller."::ISA" };
}
my $not_seen_parents = 0;
for my $parent ( @caller_isa ) {
next if $cdata->{$base_init_done_key}->{$parent};
if ( my $code = $parent->can("class_init") ) {
$not_seen_parents++;
$class->$code( @args );
}
}
unless ( $not_seen_parents ) {
$class->$root_class_init(@args);
}
( run in 0.533 second using v1.01-cache-2.11-cpan-454fe037f31 )