| Class-Workflow documentation | Contained in the Class-Workflow distribution. |
Class::Workflow::State::TransitionSet - A state that implements transition meta data using Set::Object.
package MyState; with "Class::Workflow::State::TransitionSet";
This is a concrete role that implements transitions, has_transition and
has_transitions as required by Class::Workflow::State, and adds
add_transitions, remove_transitions and clear_transitions as well.
Transition storage is implemented internally with Set::Object.
Unlike Class::Workflow::State::TransitionHash this role does not require
transitions to respond to the name method, but as a consequence you must
refer to the transitions by value.
Note that you may construct like this:
Class->new( transitions => \@transitions, );
and the transition set will be coerced from that array reference.
| Class-Workflow documentation | Contained in the Class-Workflow distribution. |
#!/usr/bin/perl package Class::Workflow::State::TransitionSet; use Moose::Role; use Moose::Util::TypeConstraints; use Set::Object; subtype 'Set::Object' => as 'Object' => where { $_[0]->isa("Set::Object") }; coerce "Set::Object" => from 'ArrayRef' => via { Set::Object->new(@{ $_[0] }) }; has transitions => ( isa => "Set::Object", coerce => 1, accessor => "transition_set", default => sub { Set::Object->new }, ); sub transitions { my ( $self, @transitions ) = @_; if ( @transitions ) { # special case to allow set-as-array-ref no warnings 'uninitialized'; @transitions = @{ $transitions[0] } if @transitions == 1 and ref($transitions[0]) eq "ARRAY"; $self->transition_set( Set::Object->new( @transitions ) ); return @transitions; } else { return $self->transition_set->members; } } sub clear_transitions { my $self = shift; $self->transition_set( Set::Object->new ); } sub remove_transitions { my ( $self, @transitions ) = @_; $self->transition_set->remove( @transitions ); } sub add_transitions { my ( $self, @transitions ) = @_; $self->transition_set->insert( @transitions ); } sub has_transition { my ( $self, $transition ) = @_; $self->transition_set->includes( $transition ); } sub has_transitions { my ( $self, @transitions ) = @_; $self->transition_set->includes( @transitions ); } __PACKAGE__; __END__