our
$VERSION
=
'1.17'
;
$VERSION
=
eval
$VERSION
;
our
$AUTHORITY
=
'cpan:STEVAN'
;
__PACKAGE__->meta->add_attribute(
'method_exclusions'
=> (
init_arg
=>
'-excludes'
,
reader
=>
'get_method_exclusions'
,
default
=>
sub
{ [] }
));
__PACKAGE__->meta->add_attribute(
'method_aliases'
=> (
init_arg
=>
'-alias'
,
reader
=>
'get_method_aliases'
,
default
=>
sub
{ {} }
));
sub
new {
my
(
$class
,
%params
) =
@_
;
$class
->_new(\
%params
);
}
sub
is_method_excluded {
my
(
$self
,
$method_name
) =
@_
;
foreach
(@{
$self
->get_method_exclusions}) {
return
1
if
$_
eq
$method_name
;
}
return
0;
}
sub
is_method_aliased {
my
(
$self
,
$method_name
) =
@_
;
exists
$self
->get_method_aliases->{
$method_name
} ? 1 : 0
}
sub
is_aliased_method {
my
(
$self
,
$method_name
) =
@_
;
my
%aliased_names
=
reverse
%{
$self
->get_method_aliases};
exists
$aliased_names
{
$method_name
} ? 1 : 0;
}
sub
apply {
my
$self
=
shift
;
$self
->check_role_exclusions(
@_
);
$self
->check_required_methods(
@_
);
$self
->check_required_attributes(
@_
);
$self
->apply_attributes(
@_
);
$self
->apply_methods(
@_
);
$self
->apply_override_method_modifiers(
@_
);
$self
->apply_before_method_modifiers(
@_
);
$self
->apply_around_method_modifiers(
@_
);
$self
->apply_after_method_modifiers(
@_
);
}
sub
check_role_exclusions { Carp::croak
"Abstract Method"
}
sub
check_required_methods { Carp::croak
"Abstract Method"
}
sub
check_required_attributes { Carp::croak
"Abstract Method"
}
sub
apply_attributes { Carp::croak
"Abstract Method"
}
sub
apply_methods { Carp::croak
"Abstract Method"
}
sub
apply_override_method_modifiers { Carp::croak
"Abstract Method"
}
sub
apply_method_modifiers { Carp::croak
"Abstract Method"
}
sub
apply_before_method_modifiers { (
shift
)->apply_method_modifiers(
'before'
=>
@_
) }
sub
apply_around_method_modifiers { (
shift
)->apply_method_modifiers(
'around'
=>
@_
) }
sub
apply_after_method_modifiers { (
shift
)->apply_method_modifiers(
'after'
=>
@_
) }
1;