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


In reply to a State machine with Roles - possible? by mascip

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.