in reply to Moose: How to check if a class implements a role?

$obj->does('ROLE') CLASS->does('ROLE')
see Role::Tiny

Replies are listed 'Best First'.
Re^2: Moose: How to check if a class implements a role? (does)
by daxim (Curate) on Jul 12, 2013 at 15:44 UTC
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
    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)

    (Moose)

    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 };