と、CakePHP3にEnumの仕組みを組み込んだのですが、
さらに、ActiveRecord::Enumにステートマシンの仕組みを組み込むgemが
「これは便利そう!!!全ての機能をポートするのは難しそうだけど、Enumで管理されているフィールドにステートマシンの制約を組み込むくらいはできるかも。」
ということで作ってみました。
使い方
基本的には https://github.com/k1LoW/property-enum と合わせて使ってもらうことを想定していますが、特に制限はありません。
<?php class BugsTable extends Table { const STATUS_UNASSIGNED = 'unassigned'; const STATUS_ASSIGNED = 'assigned'; const STATUS_RESOLVED = 'resolved'; const STATUS_CLOSED = 'closed'; public $transitions = [ 'status' => [ 'assign' => [ 'from' => self::STATUS_UNASSIGNED, 'to' => self::STATUS_ASSIGNED ], 'resolve' => [ [self::STATUS_ASSIGNED, self::STATUS_UNASSIGNED], // from self::STATUS_RESOLVED // to ], 'close' => [ [self::STATUS_ASSIGNED, self::STATUS_UNASSIGNED, self::STATUS_RESOLVED], self::STATUS_CLOSED ], ] ]; public function initialize(array $config) { $this->primaryKey('id'); $this->addBehavior('StatefulEnum.StatefulEnum'); } }
上記のように $transitions
を設定することでフィールドのBugsTable.statusのステートマシンの仕組みを組み込みます。
amatsuda/stateful_enumの transition
の制約だけを実現した形になります(メソッドまではない)。
これだけでもシンプルにステートマシンを定義できるので便利かと。
というわけで
機能追加のプルリクなどお待ちしております。