Project

spot_flow

0.0
The project is in a healthy, maintained state
Spot Flow is a workflow gem for Rails applications based on the [bpmn](https://www.bpmn.org) standard. It executes business processes and rules defined in a modeler.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

Process Pilot

Process Pilot is a workflow gem for Rails applications based on the bpmn standard. It executes business processes and rules defined in a modeler.

Usage

Process Pilot executes business processes like this one.

Example

To start the process, initialize Process Pilot with the BPMN source, then call start.

process = ProcessPilot.new(File.read("hello_world.bpmn")).start

The 'HelloWorld' process begins at the 'Start' event and waits when it reaches the 'SayHello' service task. It's often useful to print the process state to the console.

process.print
HelloWorld started * Flow_0zlro9p

0 StartEvent Start: completed * out: Flow_0zlro9p
1 ServiceTask SayHello: waiting * in: Flow_0zlro9p

It's common to save the state the process until a task is complete. For example, a user task might be waiting for a person to complete a form, or a service task might run in a background job. Calling serialize on a process will return the execution state so it can be continued later.

# Returns a hash of the process state for saving in a database.
execution_state = process.serialize

# Restores the process from the execution state.
process = ProcessPilot.new(File.read("hello_world.bpmn")).restore(execution_state)

After the task is completed, the waiting step is sent a signal with result.

step = process.step_by_element_id("SayHello")
step.signal(message: "Hello World!")

Now the 'SayHello' task is completed, it's result is merged into the process variables, and the process continues to the 'End' event.

HelloWorld completed *

{
  "message": "Hello World!"
}

0 StartEvent Start: completed * out: Flow_0zlro9p
1 ServiceTask SayHello: completed { "message": "Hello World!" } * in: Flow_0zlro9p * out: Flow_1doumjv
2 EndEvent End: completed * in: Flow_1doumjv

Kitchen Sink

The previous example is a simple process with a single task, but BPMN can express more complex workflows.

TODO: Add a kitchen sink example.

Documentation

Installation

Execute:

$ bundle add "process_pilot"

Or install it directly:

$ gem install process_pilot

Development

$ git clone ...
$ bin/setup
$ bin/rake
$ bin/guard

License

The gem is available as open source under the terms of the MIT License.

Developed by Connected Bits