MooseX::Role::Parameterized - parameterized roles
version 0.04
package MyRole::Counter; use MooseX::Role::Parameterized; parameter name => ( isa => 'Str', required => 1, ); role { my $p = shift; my $name = $p->name; has $name => ( is => 'rw', isa => 'Int', default => 0, ); method "increment_$name" => sub { my $self = shift; $self->$name($self->$name + 1); }; method "decrement_$name" => sub { my $self = shift; $self->$name($self->$name - 1); }; }; package MyGame::Tile; use Moose; with 'MyRole::Counter' => { name => 'stepped_on' };
Stop! If you're new here, please read MooseX::Role::Parameterized::Tutorial.
Your parameterized role consists of two things: parameter declarations and a role block.
role
Parameters are declared using the "parameter" keyword which very much resembles "has" in Moose. You can use any option that "has" in Moose accepts. The default value for the "is" option is "ro" as that's a very common case. These parameters will get their values when the consuming class (or role) uses "with" in Moose. A parameter object will be constructed with these values, and passed to the role block.
The role block then uses the usual Moose::Role keywords to build up a role. You can shift off the parameter object to inspect what the consuming class provided as parameters. You can use the parameters to make your role customizable!
There are many paths to parameterized roles (hopefully with a consistent enough API); I believe this to be the easiest and most flexible implementation. Coincidentally, Pugs has a very similar design (I'm not yet convinced that that is a good thing).
You must use this syntax to declare methods in the role block: method NAME => sub { ... };. This is due to a limitation in Perl. In return though you can use parameters in your methods!
method NAME => sub { ... };
"alias" in Moose::Role and "excludes" in Moose::Role are not yet supported. I'm completely unsure of whether they should be handled by this module. Until we figure out a plan, both declaring and providing a parameter named alias or excludes is an error.
alias
excludes
Shawn M Moore, <sartak@bestpractical.com>
<sartak@bestpractical.com>
MooseX::Role::Matcher
To install MooseX::Role::Parameterized, copy and paste the appropriate command in to your terminal.
cpanm
cpanm MooseX::Role::Parameterized
CPAN shell
perl -MCPAN -e shell install MooseX::Role::Parameterized
For more information on module installation, please visit the detailed CPAN module installation guide.