Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much

Catalyst Parameterized Role with Attributes?

by duelafn (Vicar)
on Sep 27, 2011 at 02:21 UTC ( #927999=perlquestion: print w/replies, xml ) Need Help??
duelafn has asked for the wisdom of the Perl Monks concerning the following question:

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

Good Day,

Replies are listed 'Best First'.
Re: Catalyst Parameterized Role with Attributes?
by roman (Monk) on Jan 10, 2012 at 15:03 UTC

    I'm puzzled that nobody commented this topic. Parameterized controller roles seem to me as a handy tool for detailed modeling of parts of action chains.

    I was also confused by the test in MooseX::MethodAttributes distribution because it doesnot work with attributes.

    Unsuccessfull with mixing MooseX::MethodAttributes and MooseX::Role::Parameterized I tried to modify 'action' hash in controller's config (described in Catalyst::Controller) instead. It seems to work.

    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 { ... }; method list => sub {...}; # The purpose of this 'before' is to add keys # into config hash first (only first) time the config is touched. my $config_called; before config => sub { return if $config_called++; my $action_config = shift()->config->{action} ||= {}; %$action_config = ( %$action_config, root => { Chained => [$ROOT], PathPart => [$PATH_PART], CaptureArgs => [0], }, list => { Chained => ['root'], PathPart => [''], Args => [0], } ); }; };

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://927999]
Approved by matze77
Front-paged by matze77
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (3)
As of 2018-05-26 04:36 GMT
Find Nodes?
    Voting Booth?