Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Re^2: Moose: How to check if a class implements a role? (does)

by Monk::Thomas (Friar)
on Jul 19, 2013 at 07:52 UTC ( #1045287=note: print w/replies, xml ) Need Help??

in reply to Re: Moose: How to check if a class implements a role? (does)
in thread Moose: How to check if a class implements a role?

Thanks. That is exactly what I was looking for. It even works when applying a role during runtime. (This comes quite handy for implementing a dummy backend class which can fake different feature-set. Think something along the line of DBI, where you want to test the DBI class, but not the actual backend like DBD::mysql)


sub BUILD { my $self = shift; my $mode = $self->get_mode(); # normally roles are not used/required, but since we manipulate this # class' roles at runtime we need to require the role if ($mode =~ /R/xmsi) { require TLA::Datastore::_readable; TLA::Datastore::_readable->meta->apply($self); } if ($mode =~ /W/xmsi) { require TLA::Datastore::_writeable; TLA::Datastore::_writeable->meta->apply($self); } if ($mode =~ /X/xmsi) { require TLA::Datastore::_execute; TLA::Datastore::_execute->meta->apply($self); } return; }
And later I can test for a specific role:
my $ds = TLA::Datastore::Dummy->new('mode' => 'R'); if ( $ds->DOES('TLA::Datastore::_readable') ) { # do stuff };

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1045287]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (6)
As of 2017-02-19 20:04 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (293 votes). Check out past polls.