NAME
MooseX::Extended::Role - MooseX::Extended roles
VERSION
version 0.35
SYNOPSIS
package
Not::Corinna::Role::Created {
field
created
=> (
isa
=> PositiveInt,
default
=>
sub
{
time
} );
}
Similar to MooseX::Extended, providing almost everything that module provides. However, for obvious reasons, it does not include MooseX::StrictConstructor or make your class immutable, or set the C3 mro.
Note that there is no need to add a 1
at the end of the role.
CONFIGURATION
You may pass an import list to MooseX::Extended::Role.
excludes
=> [
qw/WarnOnConflict carp/
],
# I don't want these features
types
=> [
qw/compile PositiveInt HashRef/
];
# I want these type tools
types
Allows you to import any types provided by MooseX::Extended::Types.
This:
Is identical to this:
excludes
You may find some features to be annoying, or even cause potential bugs (e.g., if you have a `croak` method, our importing of Carp::croak
will be a problem. You can exclude the following:
WarnOnConflict
Excluding this removes the
MooseX::Role::WarnOnConflict
role.autoclean
Excluding this will no longer import
namespace::autoclean
.carp
Excluding this will no longer import
Carp::croak
andCarp::carp
.true
Excluding this will require your module to end in a true value.
param
Excluding this will make the
param
function unavailable.field
Excluding this will make the
field
function unavailable.
includes
Some experimental features are useful, but might not be quite what you want.
multi
sub
foo (
$self
,
$x
) { ... }
multi
sub
foo (
$self
,
$x
,
$y
) { ... }
See MooseX::Extended::Manual::Includes for more information.
IDENTICAL METHOD NAMES IN CLASSES AND ROLES
In Moose if a class defines a method of the name as the method of a role it's consuming, the role's method is silently discarded. With MooseX::Extended::Role, you get a warning. This makes maintenance easier when to prevent you from accidentally overriding a method.
For example:
The above code will still run, but you'll get a very verbose warning:
The class My::Class
has
implicitly overridden the method (name) from
role My::Role. If this is intentional, please exclude the method from
composition to silence this warning (see Moose::Cookbook::Roles::Recipe2)
To silence the warning, just be explicit about your intent:
Alternately, you can exclude this feature. We don't recommend this, but it might be useful if you're refactoring a legacy Moose system.
ATTRIBUTE SHORTCUTS
param
and field
in roles allow the same attribute shortcuts as MooseX::Extended.
BUGS AND LIMITATIONS
If the MooseX::Extended::Role is loaded via stringy eval, true
is not loaded, This is because there were intermittant errors (maybe 1 out of 5 times) being thrown. Removing this feature under stringy eval solves this. See this github ticket for more infomration.
REDUCING BOILERPLATE
Let's say you've settled on the following feature set:
And you keep typing that over and over. We've removed a lot of boilerplate, but we've added different boilerplate. Instead, just create My::Custom::Moose::Role
and use My::Custom::Moose::Role;
. See MooseX::Extended::Role::Custom for details.
AUTHOR
Curtis "Ovid" Poe <curtis.poe@gmail.com>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2022 by Curtis "Ovid" Poe.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)