In this presentation of design patterns in Ruby, on slide 140, Neal Ford uses Mixins to implement a simple State machine: a door which is opened or closed.
What we have closest from Mixins is Roles. So, we can probably do the same thing with Roles. To apply a Role at runtime we have Moose::Util::apply_all_roles() or ensure_all_roles(). But i didn't find how to un-apply a Role.
Is it possible to un-apply a Role?
If yes, then we can implement a State Machine with Roles. It's also possible with Class::StateMachine::Declarative. The latter is probably better for small state machines. I don't know if a Role-based state machine would have any advantages over it for more complex cases.
As i'm not planning to use any of these two in the near future, this is more of a theoretical question. Me, procrastinating by learning more and more stuff that i don't use? Maybe ;-)
EDIT: Later in this thread, a solution to unapply a Role