The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
---
# data not under the key "workflow" is ignored.
# In this example I use 'misc' to predeclare
# an alias to some code I'll be using later.
misc:
  set_owner_to_current_user: &setowner !perl/code: |
    {
      my ( $self, $instance, $c ) = @_;
      # set the owner to the user applying the
      # transition (see Class::Workflow::Context)
      return { owner => $c->user };
    }
workflow:
  initial_state: new
  states:
    - name: new
      transitions:
        # you can store transition
        # information inline:
        - name    : reject
          to_state: rejected
        # or symbolically, defining
        # in the transitions section
        - accept
    - name: open
      transitions:
        - name    : reassign
          to_state: unassigned
          # clear the "owner" field in the instance
          set_fields:
            owner: ~
        - name    : claim_fixed
          to_state: awaiting_approval
    - name: awaiting_approval
      transitions:
        - name    : resolved
          to_state: closed
        - name    : unresolved
          to_state: open
    - name: unassigned
      transitions:
        - name    : take
          to_state: open
          # to dynamically set instance
          # you do something like this:
          body_sets_fields: 1
          body            : *setowner
    # these two are end states
    - closed
    - rejected
  # we now need to define
  # the "accept" transition
  transitions:
    - name            : accept
      to_state        : open
      body_sets_fields: 1
      body            : *setowner