dor-workflow-client 7.1.0 → 7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2691ff10a4a127beadce86389243d3bc13db82ef745a53bf030c50ea85d75f40
4
- data.tar.gz: e5872d67e32db69fc53cdf843f394be3f384c8fa5f4f0cd931cc9a04286ae16e
3
+ metadata.gz: f68410646d6db8f4544022b03aa0c1f4ed062c94482663d6076a2e08deefc0aa
4
+ data.tar.gz: 2fceb32ccab79dc19cf8449268965f3450d26fb1ab57d23ebff17b316f95c758
5
5
  SHA512:
6
- metadata.gz: 1ac0df9fb64bc20d641cdc58874fab21b00dee008075d71b5105834495ebc9d191b21196ab6dfe7a72e891ce1761f8679bd41bbce76846820f8ff973f50884a9
7
- data.tar.gz: 1209cbb67b48e24bdb48bdffb8976c8048c5465b12e2468ea42eb91b6e475a7dc3616e8805727a94e155e266d9adf48eccbac7441788681e8a84cc112fc476ad
6
+ metadata.gz: bec89343f7f847098e221235e4f8f76fe862e57a4af9f05f6da16bc7739e9db28777ae2df11860eba4630c88d5fe179571b6a18bf556477fcae838793e579960
7
+ data.tar.gz: b1a5e69406924bd48383e18cabd9416d95a77b90c8cbbdfaf2e395de50b2e95926f9a2b30958036f94fa77be2a05f9a0556f5de0c080e3b1881ed7c2351e956a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dor-workflow-client (7.1.0)
4
+ dor-workflow-client (7.3.0)
5
5
  activesupport (>= 3.2.1, < 8)
6
6
  deprecation (>= 0.99.0)
7
7
  faraday (~> 2.0)
@@ -47,7 +47,7 @@ GEM
47
47
  hashdiff (1.1.0)
48
48
  i18n (1.14.4)
49
49
  concurrent-ruby (~> 1.0)
50
- json (2.7.1)
50
+ json (2.7.2)
51
51
  language_server-protocol (3.17.0.3)
52
52
  mini_portile2 (2.8.5)
53
53
  minitest (5.22.3)
@@ -61,10 +61,10 @@ GEM
61
61
  parser (3.3.0.5)
62
62
  ast (~> 2.4.1)
63
63
  racc
64
- public_suffix (5.0.4)
64
+ public_suffix (5.0.5)
65
65
  racc (1.7.3)
66
66
  rainbow (3.1.1)
67
- rake (13.1.0)
67
+ rake (13.2.1)
68
68
  regexp_parser (2.9.0)
69
69
  rexml (3.2.6)
70
70
  rspec (3.13.0)
@@ -82,7 +82,7 @@ GEM
82
82
  rspec-support (3.13.1)
83
83
  rspec_junit_formatter (0.6.0)
84
84
  rspec-core (>= 2, < 4, != 2.12.0)
85
- rubocop (1.62.1)
85
+ rubocop (1.63.0)
86
86
  json (~> 2.3)
87
87
  language_server-protocol (>= 3.17.0)
88
88
  parallel (~> 1.10)
@@ -101,7 +101,7 @@ GEM
101
101
  rubocop (~> 1.41)
102
102
  rubocop-rake (0.6.0)
103
103
  rubocop (~> 1.0)
104
- rubocop-rspec (2.28.0)
104
+ rubocop-rspec (2.29.1)
105
105
  rubocop (~> 1.40)
106
106
  rubocop-capybara (~> 2.17)
107
107
  rubocop-factory_bot (~> 2.22)
@@ -10,26 +10,24 @@ module Dor
10
10
  0 => 'Unknown Status', # if there are no milestones for the current version, someone likely messed up the versioning process.
11
11
  1 => 'Registered',
12
12
  2 => 'In accessioning',
13
- 3 => 'In accessioning (described)',
14
- 4 => 'In accessioning (described, published)',
15
- 5 => 'In accessioning (described, published, deposited)',
16
- 6 => 'Accessioned',
17
- 7 => 'Accessioned (indexed)',
18
- 8 => 'Accessioned (indexed, ingested)',
19
- 9 => 'Opened'
13
+ 3 => 'In accessioning (published)',
14
+ 4 => 'In accessioning (published, deposited)',
15
+ 5 => 'Accessioned',
16
+ 6 => 'Accessioned (indexed)',
17
+ 7 => 'Accessioned (indexed, ingested)',
18
+ 8 => 'Opened'
20
19
  }.freeze
21
20
 
22
21
  # milestones from accessioning and the order they happen in
23
22
  STEPS = {
24
23
  'registered' => 1,
25
24
  'submitted' => 2,
26
- 'described' => 3,
27
- 'published' => 4,
28
- 'deposited' => 5,
29
- 'accessioned' => 6,
30
- 'indexed' => 7,
31
- 'shelved' => 8,
32
- 'opened' => 9
25
+ 'published' => 3,
26
+ 'deposited' => 4,
27
+ 'accessioned' => 5,
28
+ 'indexed' => 6,
29
+ 'shelved' => 7,
30
+ 'opened' => 8
33
31
  }.freeze
34
32
 
35
33
  attr_reader :status_code
@@ -78,7 +76,7 @@ module Dor
78
76
  end
79
77
 
80
78
  # @return [String] text translation of the status code, minus any trailing parenthetical explanation
81
- # e.g. 'In accessioning (described)' and 'In accessioning (described, published)' both return 'In accessioning'
79
+ # e.g. 'Accessioned (indexed)' and 'Accessioned (indexed, ingested)', both return 'Accessioned'
82
80
  def simplified_status_code(display)
83
81
  display.gsub(/\(.*\)$/, '').strip
84
82
  end
@@ -3,7 +3,7 @@
3
3
  module Dor
4
4
  module Workflow
5
5
  class Client
6
- VERSION = '7.1.0'
6
+ VERSION = '7.3.0'
7
7
  end
8
8
  end
9
9
  end
@@ -28,8 +28,7 @@ module Dor
28
28
  def process_for_recent_version(name:)
29
29
  nodes = process_nodes_for(name: name)
30
30
  node = nodes.max { |a, b| a.attr('version').to_i <=> b.attr('version').to_i }
31
- attributes = node ? node.attributes.to_h { |k, v| [k.to_sym, v.value] } : {}
32
- Process.new(parent: self, **attributes)
31
+ to_process(node)
33
32
  end
34
33
 
35
34
  def empty?
@@ -39,13 +38,24 @@ module Dor
39
38
  # Check if all processes are skipped or complete for the provided version.
40
39
  # @param [Integer] version the version we are checking for.
41
40
  def complete_for?(version:)
42
- ng_xml.xpath("/workflow/process[@version=#{version}]/@status").map(&:value).all? { |p| %w[skipped completed].include?(p) }
41
+ # ng_xml.xpath("/workflow/process[@version=#{version}]/@status").map(&:value).all? { |p| %w[skipped completed].include?(p) }
42
+ incomplete_processes_for(version: version).empty?
43
43
  end
44
44
 
45
45
  def complete?
46
46
  complete_for?(version: version)
47
47
  end
48
48
 
49
+ def incomplete_processes_for(version:)
50
+ process_nodes = ng_xml.xpath("/workflow/process[@version=#{version}]")
51
+ incomplete_process_nodes = process_nodes.reject { |process_node| %w[skipped completed].include?(process_node.attr('status')) }
52
+ incomplete_process_nodes.map { |process_node| to_process(process_node) }
53
+ end
54
+
55
+ def incomplete_processes
56
+ incomplete_processes_for(version: version)
57
+ end
58
+
49
59
  attr_reader :xml
50
60
 
51
61
  private
@@ -66,6 +76,11 @@ module Dor
66
76
  def ng_xml
67
77
  @ng_xml ||= Nokogiri::XML(@xml)
68
78
  end
79
+
80
+ def to_process(node)
81
+ attributes = node ? node.attributes.to_h { |k, v| [k.to_sym, v.value] } : {}
82
+ Process.new(parent: self, **attributes)
83
+ end
69
84
  end
70
85
  end
71
86
  end
@@ -32,7 +32,7 @@ RSpec.describe Dor::Workflow::Client::Status do
32
32
  let(:version) { '4' }
33
33
 
34
34
  it 'generates a status string' do
35
- expect(status).to eq('v4 In accessioning (described, published)')
35
+ expect(status).to eq('v4 In accessioning (published)')
36
36
  end
37
37
  end
38
38
 
@@ -47,7 +47,7 @@ RSpec.describe Dor::Workflow::Client::Status do
47
47
  let(:version) { '3' }
48
48
 
49
49
  it 'generates a status string' do
50
- expect(status).to eq('v3 In accessioning (described, published)')
50
+ expect(status).to eq('v3 In accessioning (published)')
51
51
  end
52
52
  end
53
53
  end
@@ -177,7 +177,7 @@ RSpec.describe Dor::Workflow::Client::Status do
177
177
  end
178
178
 
179
179
  it 'has the correct status of deposited (v2) object' do
180
- expect(status).to eq('v2 In accessioning (described, published, deposited) 2013-10-01 07:10PM')
180
+ expect(status).to eq('v2 In accessioning (published, deposited) 2013-10-01 07:10PM')
181
181
  end
182
182
  end
183
183
  end
@@ -198,4 +198,62 @@ RSpec.describe Dor::Workflow::Response::Workflow do
198
198
  end
199
199
  end
200
200
  end
201
+
202
+ describe '#incomplete_processes' do
203
+ subject(:processes) { instance.incomplete_processes }
204
+
205
+ context 'when all steps are complete' do
206
+ let(:xml) do
207
+ <<~XML
208
+ <workflow repository="dor" objectId="druid:mw971zk1113" id="assemblyWF">
209
+ <process version="1" laneId="default" elapsed="0.0" attempts="1" datetime="2013-02-18T14:40:25-0800" status="completed" name="start-assembly"/>
210
+ <process version="1" laneId="default" elapsed="0.509" attempts="1" datetime="2013-02-18T14:42:24-0800" status="completed" name="jp2-create"/>
211
+ </workflow>
212
+ XML
213
+ end
214
+
215
+ it { is_expected.to be_empty }
216
+ end
217
+
218
+ context 'when some steps are not complete' do
219
+ let(:xml) do
220
+ <<~XML
221
+ <workflow repository="dor" objectId="druid:mw971zk1113" id="assemblyWF">
222
+ <process version="1" laneId="default" elapsed="0.0" attempts="1" datetime="2013-02-18T14:40:25-0800" status="completed" name="start-assembly"/>
223
+ <process version="1" laneId="default" elapsed="0.509" attempts="1" datetime="2013-02-18T14:42:24-0800" status="waiting" name="jp2-create"/>
224
+ </workflow>
225
+ XML
226
+ end
227
+
228
+ it 'returns the incomplete processes' do
229
+ expect(processes.size).to eq 1
230
+ expect(processes.first.name).to eq 'jp2-create'
231
+ end
232
+ end
233
+ end
234
+
235
+ describe '#incomplete_processes_for' do
236
+ let(:xml) do
237
+ <<~XML
238
+ <workflow repository="dor" objectId="druid:mw971zk1113" id="assemblyWF">
239
+ <process version="1" laneId="default" elapsed="0.0" attempts="1" datetime="2013-02-18T14:40:25-0800" status="completed" name="start-assembly"/>
240
+ <process version="1" laneId="default" elapsed="0.509" attempts="1" datetime="2013-02-18T14:42:24-0800" status="waiting" name="jp2-create"/>
241
+ <process version="2" laneId="default" elapsed="0.0" attempts="1" datetime="2013-02-18T14:40:25-0800" status="completed" name="start-assembly"/>
242
+ <process version="2" laneId="default" elapsed="0.509" attempts="1" datetime="2013-02-18T14:42:24-0800" status="completed" name="jp2-create"/>
243
+ </workflow>
244
+ XML
245
+ end
246
+
247
+ context 'when all steps are complete' do
248
+ it 'returns empty' do
249
+ expect(instance.incomplete_processes_for(version: 2)).to be_empty
250
+ end
251
+ end
252
+
253
+ context 'when some steps are not complete' do
254
+ it 'returns false' do
255
+ expect(instance.incomplete_processes_for(version: 1).size).to eq 1
256
+ end
257
+ end
258
+ end
201
259
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dor-workflow-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.0
4
+ version: 7.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willy Mene
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-04-02 00:00:00.000000000 Z
12
+ date: 2024-04-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport