|
NAMEMooseX::Extended::Role::Custom - Build a custom Moose::Role, just for you. VERSIONversion 0.35 SYNOPSISDefine your own version of MooseX::Extended: package My::Moose::Role {
use MooseX::Extended::Role::Custom;
sub import {
my ( $class, %args ) = @_;
MooseX::Extended::Role::Custom->create(
excludes => [qw/ carp /],
includes => ['multi'],
%args # you need this to allow customization of your customization
);
}
}
# no need for a true value
And then use it: package Some::Class::Role {
use My::Moose::Role types => [qw/ArrayRef Num/];
param numbers => ( isa => ArrayRef[Num] );
multi sub foo ($self) { ... }
multi sub foo ($self, $bar) { ... }
}
DESCRIPTIONI hate boilerplate, so let's get rid of it. Let's say you don't want warnings on classes implicitly overriding role methods, namespace::autoclean or "carp", but you do want "multi". Plus, you have custom versions of "carp" and "croak": package Some::Class {
use MooseX::Extended
excludes => [qw/ WarnOnConflict autoclean carp /],
includes => ['multi'];
use My::Carp q(carp croak);
... my code here
}
You probably get tired of typing that every time. Now you don't have to. package My::Moose {
use MooseX::Extended::Custom;
use My::Carp ();
use Import::Into;
sub import {
my ( $class, %args ) = @_;
my $target_class = caller;
MooseX::Extended::Custom->create(
excludes => [qw/ autoclean carp /],
includes => ['multi'],
%args # you need this to allow customization of your customization
);
My::Carp->import::into($target_class, qw(carp croak));
}
}
And then when you use "My::Moose", that's all set up for you. If you need to change this on a "per class" basis: use My::Moose
excludes => ['carp'],
types => [qw/ArrayRef Num/];
The above changes your "excludes" and adds "types", but doesn't change your "includes". AUTHORCurtis "Ovid" Poe <curtis.poe@gmail.com> COPYRIGHT AND LICENSEThis software is Copyright (c) 2022 by Curtis "Ovid" Poe. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible)
|