in reply to Re^8: a State machine with Roles - possible? (class or instance)
in thread a State machine with Roles - possible?

Ahh OK I didn't check the documentation in Moose::Util ... =)

apply_all_roles($applicant, @roles)

This function applies one or more roles to the given $applicant The applicant can be a role name, class name, or object.

The $applicant must already have a metaclass object.

The list of @roles should a list of names or Moose::Meta::Role objects, each of which can be followed by an optional hash reference of options (-excludes and -alias).

but couldn't find a description for metaclass either, I suppose a package container for roles.

Just for a better understanding, where in your code did you assure that the $applicant already has a metaclass object?

Cheers Rolf

( addicted to the Perl Programming Language)

Replies are listed 'Best First'.
Re^10: a State machine with Roles - possible? (class or instance)
by mascip (Pilgrim) on Jun 01, 2013 at 10:15 UTC

    Sorry, i didn't realize that the documentation was not clear enough (indeed). apply_all_roles() gives a meta to the instance. For example the class of my $door instance is an anonymous class called 'Moose::Meta::Class::__ANON__::SERIAL::16=HASH(0x9ac4b8)'. I have made tests: each door can be in a different state (i'm lazy to share these: while trying to unapply Roles on more complex examples, i have lost these tests)

    But i don't manage to unapply a Role, and i think there's a better way anyway (see message below)

      > Sorry, i didn't realize that the documentation was not clear enough (indeed).

      I'd rather say it's wrong. =)

      > apply_all_roles() gives a meta to the instance.

      I checked the code it indeed does, so the POD should better reflect this.

      But thanks it's much clearer now. =)

      Cheers Rolf

      ( addicted to the Perl Programming Language)

        Eventually, an example with 2 doors later in this thread. It has 2 doors that can be opened/closed, and locked/unlocked.

        The same could be achieved with only 2 Roles (CanBe::Opened, CanBe::Locked), which would each have a state. But still, i'm happy to have learned how to unapply a Role.