| Class-Workflow documentation | Contained in the Class-Workflow distribution. |
Class::Workflow::Transition::Deterministic - A transition which knows which state it leads to.
package MyTransition;
use Moose;
with qw/
Class::Workflow::Transition
Class::Workflow::Deterministic
/;
sub apply_body { # instead of 'sub apply'
# body
}
# this may be changed to the following form in the future:
augment apply => sub {
# body
};
This role provides a base role for transitions which know their target state.
It overrides apply with a default implementation that will derive an
instance for you, setting state automatically, appending the return value
from apply_body to that list.
You should consume this role unless you need to determine the target state dynamically (probably not a good idea).
The target state of the transition. Should do Class::Workflow::State.
In scalar context returns the derived instance, in list caller also returns the
remaining return value from apply_body.
The "inner" body of the function.
This method is always evaluated in list context, and is expected to return a hash reference of overridden fields as the first value in that list.
In the future instead of defining apply_body you will do:
augment apply => sub {
# body
};
And this role's apply will really use inner().
| Class-Workflow documentation | Contained in the Class-Workflow distribution. |
#!/usr/bin/perl package Class::Workflow::Transition::Deterministic; use Moose::Role; use Carp qw/croak/; has to_state => ( does => "Class::Workflow::State", is => "rw", required => 0, ); # FIXME augment + inner requires "apply_body"; sub apply { my ( $self, $instance, @args ) = @_; my ( $set_instance_attrs, @rv ) = $self->apply_body( $instance, @args ); $set_instance_attrs ||= {}; # should really die if it's bad my $new_instance = $self->derive_and_accept_instance( $instance => { state => ( $self->to_state || croak "$self has no 'to_state'" ), %$set_instance_attrs, }, @args, ); return wantarray ? ($new_instance, @rv) : $new_instance; } __PACKAGE__; __END__