Class: Dor::Services::Response::Workflow
- Inherits:
-
Object
- Object
- Dor::Services::Response::Workflow
- Defined in:
- lib/dor/services/response/workflow.rb
Overview
The response from asking the server about a workflow for an item
Instance Attribute Summary collapse
-
#xml ⇒ Object
readonly
Returns the value of attribute xml.
Instance Method Summary collapse
-
#active_for?(version:) ⇒ Boolean
Check if there are any processes for the provided version.
- #complete? ⇒ Boolean
-
#complete_for?(version:) ⇒ Boolean
Check if all processes are skipped or complete for the provided version.
- #empty? ⇒ Boolean
- #error_count ⇒ Object
- #incomplete_processes ⇒ Object
- #incomplete_processes_for(version:) ⇒ Object
-
#initialize(xml:) ⇒ Workflow
constructor
A new instance of Workflow.
- #ng_xml ⇒ Object
- #pid ⇒ Object
-
#process_for_recent_version(name:) ⇒ Object
Returns the process for the most recent version that matches the given name:.
- #workflow_name ⇒ Object
Constructor Details
#initialize(xml:) ⇒ Workflow
Returns a new instance of Workflow.
9 10 11 |
# File 'lib/dor/services/response/workflow.rb', line 9 def initialize(xml:) @xml = xml end |
Instance Attribute Details
#xml ⇒ Object (readonly)
Returns the value of attribute xml.
68 69 70 |
# File 'lib/dor/services/response/workflow.rb', line 68 def xml @xml end |
Instance Method Details
#active_for?(version:) ⇒ Boolean
Check if there are any processes for the provided version.
23 24 25 26 |
# File 'lib/dor/services/response/workflow.rb', line 23 def active_for?(version:) result = ng_xml.at_xpath("/workflow/process[@version=#{version}]") result ? true : false end |
#complete? ⇒ Boolean
50 51 52 |
# File 'lib/dor/services/response/workflow.rb', line 50 def complete? complete_for?(version: latest_version) end |
#complete_for?(version:) ⇒ Boolean
Check if all processes are skipped or complete for the provided version.
46 47 48 |
# File 'lib/dor/services/response/workflow.rb', line 46 def complete_for?(version:) incomplete_processes_for(version: version).empty? end |
#empty? ⇒ Boolean
40 41 42 |
# File 'lib/dor/services/response/workflow.rb', line 40 def empty? ng_xml.xpath('/workflow/process').empty? end |
#error_count ⇒ Object
28 29 30 31 |
# File 'lib/dor/services/response/workflow.rb', line 28 def error_count process_names.map { |process_name| process_for_recent_version(name: process_name) } .count { |process| process.status == 'error' } end |
#incomplete_processes ⇒ Object
60 61 62 |
# File 'lib/dor/services/response/workflow.rb', line 60 def incomplete_processes incomplete_processes_for(version: latest_version) end |
#incomplete_processes_for(version:) ⇒ Object
54 55 56 57 58 |
# File 'lib/dor/services/response/workflow.rb', line 54 def incomplete_processes_for(version:) process_nodes = ng_xml.xpath("/workflow/process[@version=#{version}]") incomplete_process_nodes = process_nodes.reject { |process_node| %w[skipped completed].include?(process_node.attr('status')) } incomplete_process_nodes.map { |process_node| to_process(process_node) } end |
#ng_xml ⇒ Object
64 65 66 |
# File 'lib/dor/services/response/workflow.rb', line 64 def ng_xml @ng_xml ||= Nokogiri::XML(@xml) end |
#pid ⇒ Object
13 14 15 |
# File 'lib/dor/services/response/workflow.rb', line 13 def pid workflow['objectId'] end |
#process_for_recent_version(name:) ⇒ Object
Returns the process for the most recent version that matches the given name:
34 35 36 37 38 |
# File 'lib/dor/services/response/workflow.rb', line 34 def process_for_recent_version(name:) nodes = process_nodes_for(name: name) node = nodes.max { |a, b| a.attr('version').to_i <=> b.attr('version').to_i } to_process(node) end |
#workflow_name ⇒ Object
17 18 19 |
# File 'lib/dor/services/response/workflow.rb', line 17 def workflow_name workflow['id'] end |