No release in over 3 years
Enables Ruby manipulation of the DOR Workflow Service via its REST API
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 0.5, >= 0.5.1
>= 0
~> 3.3
~> 0.63.1
>= 0

Runtime

>= 3.2.1, < 6
>= 0.2.7, < 2
~> 0.9, >= 0.9.2
>= 2.9.4, < 4.a
~> 1.6
 Project Readme

CircleCI Test Coverage Maintainability

Gem Version

dor-workflow-client gem

A Ruby client to work with the DOR Workflow REST Service. The REST API is defined here: https://consul.stanford.edu/display/DOR/DOR+services#DORservices-initializeworkflow

Usage

Initialize a Dor::Workflow::Client object in your application configuration, i.e. in a bootup or startup method like:

client = Dor::Workflow::Client.new(url: 'https://test-server.edu/workflow/')

Consumers of recent versions of the dor-services gem can access the configured Dor::Workflow::Client object via Dor::Config.

Console

During development, you can test the gem locally on your laptop, hitting a local instance of workflow-server-rails via the console:

bin/console

client = Dor::Workflow::Client.new(url: 'http://localhost:3000')
client.create_workflow_by_name('druid:bc123df4567', 'accessionWF', version: '1', context: { 'requireOCR' => true})

client.workflows('druid:bc123df4567')
 => ["accessionWF"]

client.workflow(pid: 'druid:bc123df4567', workflow_name: 'accessionWF')
=> #<Dor::Workflow::Response::Workflow:0x0000000105c8b440

client.process(pid: 'druid:bc123df4567', workflow_name: 'accessionWF', process: 'start-accession').context
 => {"requireOCR"=>true}

client.all_workflows(pid: 'druid:bc123df4567')
=> #<Dor::Workflow::Response::Workflows:0x00000001055d29a0>.....

API

Rubydoc

Workflow Variables

If a workflow or workflows for a particular object require data to be persisted and available between steps, workflow variables can be set. These are per object/version pair and thus available to any step in any workflow for a given version of an object once set. Pass in a context variable as a Hash as shown in the example below. The context will be returned as a hash when fetching workflows data for an object.

Example usage

Create a workflow

client.create_workflow_by_name('druid:bc123df4567', 'etdSubmitWF', version: '1')

Create a workflow and send in context

client.create_workflow_by_name('druid:bc123df4567', 'etdSubmitWF', version: '1', context: { foo: 'bar'} )

Update a workflow step's status

client.update_status(druid: 'druid:bc123df4567',
                     workflow: 'etdSubmitWF',
                     process: 'registrar-approval',
                     status: 'completed')

Fetch information about a workflow:

client.workflow(pid: 'druid:bc123df4567', workflow_name: 'etdSubmitWF')
 => #<Dor::Workflow::Response::Workflow:0x000000010cb28588

Fetch information about a workflow step:

client.process(pid: 'druid:bc123df4567', workflow_name: 'etdSubmitWF', process: 'registrar-approval')
 => #<Dor::Workflow::Response::Process:0x000000010c505098

Fetch version context about a workflow step:

client.process(pid: 'druid:bc123df4567', workflow_name: 'etdSubmitWF', process: 'registrar-approval').context
 => {"foo"=>"bar"}

Show "milestones" for an object

client.milestones(druid: 'druid:gv054hp4128')
#=> [{version: '1', milestone: 'published'}]

List workflow templates

client.workflow_templates

Show a workflow template

client.workflow_template('etdSubmitWF')

Get the status of an object

client.status(druid: 'druid:gv054hp4128', version: '3').display
#=> "v3 Accessioned"

Underlying Clients

This gem currently uses the Faraday HTTP client to access the back-end service. The clients be accessed directly from your Dor::Workflow::Client object:

wfs.connection # the Faraday object

Or for advanced configurations, ONE of them (not both) can be passed to the constructor instead of the raw URL string:

conn = Faraday.new(:url => 'http://sushi.com') do |faraday|
  faraday.request  :url_encoded             # form-encode POST params
  faraday.response :logger                  # log requests to STDOUT
  faraday.adapter  Faraday.default_adapter  # make requests with Net::HTTP
end
wfs = Dor::Workflow::Client.new(connection: conn)