Class: Dor::Workflow::Client::LifecycleRoutes

Inherits:
Object
  • Object
show all
Defined in:
lib/dor/workflow/client/lifecycle_routes.rb

Overview

Makes requests relating to a lifecycle

Instance Method Summary collapse

Constructor Details

#initialize(requestor:) ⇒ LifecycleRoutes

Returns a new instance of LifecycleRoutes.



8
9
10
# File 'lib/dor/workflow/client/lifecycle_routes.rb', line 8

def initialize(requestor:)
  @requestor = requestor
end

Instance Method Details

#active_lifecycle(druid:, milestone_name:, version:) ⇒ Time

Returns the Date for a requested milestone ONLY for the current version. This is slow as the workflow server will query dor-services-app for the version. A better approach is #lifecycle with the version tag.

Parameters:

  • druid (String)

    object id

  • milestone_name (String)

    the name of the milestone being queried for

  • version (Number)

    the version to query for

Returns:

  • (Time)

    when the milestone was achieved. Returns nil if the milestone does not exis



30
31
32
# File 'lib/dor/workflow/client/lifecycle_routes.rb', line 30

def active_lifecycle(druid:, milestone_name:, version:)
  lifecycle(druid: druid, milestone_name: milestone_name, version: version, active_only: true)
end

#lifecycle(druid:, milestone_name:, version: nil, active_only: false) ⇒ Time

Returns the Date for a requested milestone from workflow lifecycle

Parameters:

  • druid (String)

    object id

  • milestone_name (String)

    the name of the milestone being queried for

  • version (Number) (defaults to: nil)

    (nil) the version to query for

  • active_only (Boolean) (defaults to: false)

    (false) if true, return only lifecycle steps for versions that have all processes complete

Returns:

  • (Time)

    when the milestone was achieved. Returns nil if the milestone does not exist



19
20
21
# File 'lib/dor/workflow/client/lifecycle_routes.rb', line 19

def lifecycle(druid:, milestone_name:, version: nil, active_only: false)
  filter_milestone(query_lifecycle(druid, version: version, active_only: active_only), milestone_name)
end

#milestones(druid:) ⇒ Array<Hash>

Returns:

  • (Array<Hash>)


35
36
37
38
39
40
# File 'lib/dor/workflow/client/lifecycle_routes.rb', line 35

def milestones(druid:)
  doc = query_lifecycle(druid, active_only: false)
  doc.xpath('//lifecycle/milestone').collect do |node|
    { milestone: node.text, at: Time.parse(node['date']), version: node['version'] }
  end
end

#query_lifecycle(druid, active_only:, version: nil) ⇒ Nokogiri::XML::Document

Examples:

An example lifecycle xml from the workflow service.

<lifecycle objectId="druid:ct011cv6501">
  <milestone date="2010-04-27T11:34:17-0700">registered</milestone>
  <milestone date="2010-04-29T10:12:51-0700">inprocess</milestone>
  <milestone date="2010-06-15T16:08:58-0700">released</milestone>
</lifecycle>

Parameters:

  • druid (String)

    object id

  • active_only (Boolean)

    (false) if true, return only lifecycle steps for versions that have all processes complete

  • version (Number) (defaults to: nil)

    the version to query for

Returns:

  • (Nokogiri::XML::Document)


53
54
55
56
57
58
59
60
61
# File 'lib/dor/workflow/client/lifecycle_routes.rb', line 53

def query_lifecycle(druid, active_only:, version: nil)
  req = "objects/#{druid}/lifecycle"
  params = []
  params << "version=#{version}" if version
  params << 'active-only=true' if active_only
  req += "?#{params.join('&')}" unless params.empty?

  Nokogiri::XML(requestor.request(req))
end