2017 © Pedro Peláez
 

library fsm

a PHP final state machine library

image

ziguss/fsm

a PHP final state machine library

  • Wednesday, August 17, 2016
  • by ziguss
  • Repository
  • 1 Watchers
  • 0 Stars
  • 1 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

A PHP Finite State Machine Library

It's miniature and independent but powerful enough., (*1)

Build Status, (*2)

Getting started

Define your Stateful Object

use ziguss\fsm\StatefulInterface;
use ziguss\fsm\StateMachine;
use ziguss\fsm\TransitionEvent;

class Task implements StatefulInterface
{
    /**
     * @var StateMachine
     */
    private $sm;

    /**
     * @var string
     */
    private $state = 'unassigned';

    /**
     * {@inheritdoc}
     */
    public function getFiniteState()
    {
        return $this->state;
    }

    /**
     * {@inheritdoc}
     */
    public function setFiniteState($state)
    {
        $this->state = $state;
    }

    /**
     * @return StateMachine
     */
    public function getStateMachine()
    {
        if (null === $this->sm) {
            $this->sm = new StateMachine($this, array(
                'graph' => 'task',
                'states' => array('unassigned', 'assigned', 'done'),
                'transitions' => array(
                    'assign' => array(
                        'from' => array('unassigned', 'assigned'),
                        'to' => 'assigned',
                    ),
                    'unAssign' => array(
                        'from' => 'assigned',
                        'to' => 'unassigned',
                    ),
                    'finish' => array(
                        'from' => 'assigned',
                        'to' => 'done',
                        'condition' => array($this, 'justMe'),
                    ),
                ),
                'listeners' => array(
                    'test' => array(
                        array($this, 'testCondition'),
                    ),
                    'after' => array(
                        array('on' => 'assign', 'do' => array($this, 'emailSomeone')),
                    ),
                ),
            ));
        }

        return $this->sm;
    }

    /**
     * @param TransitionEvent $event
     */
    public function emailSomeone(TransitionEvent $event)
    {
        echo 'You have new work to do.';
    }

    /**
     * @param TransitionEvent $event
     */
    public function testCondition(TransitionEvent $event)
    {
        $config = $event->getConfig();
        if (!empty($config['condition'])) {
            $event->setRejected(!call_user_func($config['condition']));
        }
    }

    /**
     * @return bool
     */
    public function justMe()
    {
        // your can check if the task is assigned to someone
        return true;
    }
}

Using it

$task = new Task();

// Retrieve all current enabled transitions
$transitions = $task->getStateMachine()->getEnabledTransitions();

// pick one and apply
$task->getStateMachine()->apply($transitions[array_rand($transitions)]);

// Retrieve current state by state machine
$task->getStateMachine()->getState();

The Versions

17/08 2016

dev-master

9999999-dev

a PHP final state machine library

  Sources   Download

The Requires

  • php >=5.3.0

 

The Development Requires

by Avatar ziguss

state machine fsm