Is it possible to create parameterized Catalyst roles with method attributes? The closest thing a web search finds is this post whose followup message points to a moosex-methodattributes test file which does create a parameterized role, but as far as I can tell doesn't test any attributes. My attempt (below) compiles but does not produce any (chained) actions.
package Serenevy::CatalystX::Role::CRUDForms;
use MooseX::Role::Parameterized -traits => 'MooseX::MethodAttributes::
+Role::Meta::Role';
use namespace::autoclean;
use re 'taint';
use 5.010;
parameter [qw/ name root path_part model_name /] => (
is => "rw",
isa => "Str",
required => 1,
);
role {
my $param = shift;
my $NAME = $param->name;
my $ROOT = $param->root;
my $MODEL = $param->model_name;
my $PATH_PART = $param->path_part;
method model => sub { $_[1]->model( $MODEL ) };
method root => sub :Chained($ROOT) :PathPart($PATH_PART) :CaptureA
+rgs(0) { 1 };
method list => sub :Chained(root) :PathPart("") :Args(0) {
my ( $self, $c ) = @_;
# ...
};
# ...
};
This role is consumed in my controiller via
package RiverbendMath::Controller::Int::FieldClass;
use Moose;
use namespace::autoclean;
use re 'taint';
use 5.010;
BEGIN { extends 'Catalyst::Controller'; }
with 'Serenevy::CatalystX::Role::CRUDForms' => {
name => "Field Class",
root => "../int",
path_part => "field-class",
model_name => "DB::EntClass",
};
Catalyst 5.80025; Moose 1.09; MooseX::Role::Parameterized 0.19; MooseX::MethodAttributes 0.24