NAME

Class::Workflow::YAML - Load workflow definitions from YAML files.

SYNOPSIS

        my $y = Class::Workflow::YAML->new;

        my $w = $y->load_file("workflow.yml");

        # an exmaple workflow.yml for the bug flow
        # mentioned in Class::Workflow
        ---
        # 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

DESCRIPTION

This module lets you easily load workflow definitions from YAML files.

YAML is nice for this because its much more concise than XML, and allows clean embedding of perl code.

FIELDS

workflow_key

METHODS

load_file $filename
load_string $string

Load the YAML data, and call inflate_hash on an empty workflow.

inflate_hash $workflow, $hash

Define the workflow using the data inside $hash->{$self->workflow_key}.

empty_workflow

Calls Class::Workflow->new

localize_yaml_env

A wrapper method to locally set $YAML::Syck::UseCode to 1.

SEE ALSO

Class::Workflow, YAML