dor-workflow-client 3.10.0 → 3.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 357ae42f561bd2a83ecd8250dc767b3426c0817d651fe38da5c81879d8bfbfc4
4
- data.tar.gz: a6696a3639a6eaea0aa37b101d752f89a70104027f68473852e3a0f35432c1a5
3
+ metadata.gz: f99d2c878711b586b19b4493e6bfdfb97ccaa2d4633937aadf12527c275129be
4
+ data.tar.gz: 69101e12eb0cef2ee37e46983a7ca762e4d598f2794fcbc00923b0c4c07b30a7
5
5
  SHA512:
6
- metadata.gz: cf907f6f4995caa88e19e06f0bf39e3a7ba54ce8515c106b69fc39c31f365d55de4de20afc673f9827f3264eeedb0dab8a804783853f6da3d9f025c0c9ac6bc4
7
- data.tar.gz: e135d69b3ab60c5518f58524f1aee09a086d54277a02f7e344e8028e9b47d0ce79b015a94a852f4b3ee039770a3a57488511029239c0890942348613e3bdb56d
6
+ metadata.gz: 332dc12278f377747eaabeeacb2c728420c268e6664e6760b314353d38fb6e1443cfa515caee3c8c1df49209d514d526253345fd9bbd1a44d4f449c601c7782d
7
+ data.tar.gz: b6c26f3c28452ab4b566ec1ee0d60531a6776a215a71d1859695fe615c9b45dc9e5640edf2d158f010cb42c8d4ddcaa48edee0e826663a7e3cfe8768577660a7
data/README.md CHANGED
@@ -19,27 +19,35 @@ client = Dor::Workflow::Client.new(url: 'https://test-server.edu/workflow/')
19
19
  Consumers of recent versions of the [dor-services](https://github.com/sul-dlss/dor-services) gem can access the configured `Dor::Workflow::Client` object via `Dor::Config`.
20
20
 
21
21
  ## API
22
+ [Rubydoc](https://www.rubydoc.info/github/sul-dlss/dor-workflow-client/master)
22
23
 
24
+ ### Example usage
23
25
  Create a workflow
24
26
  ```
25
27
  client.create_workflow_by_name('druid:bc123df4567', 'etdSubmitWF')
26
28
  ```
27
29
 
28
30
  Update a workflow step's status
29
- ```
31
+ ```ruby
30
32
  client.update_status(druid: 'druid:bc123df4567',
31
33
  workflow: 'etdSubmitWF',
32
34
  process: 'registrar-approval',
33
35
  status: 'completed')
34
36
  ```
35
37
 
36
- List workflow templates
38
+ Show "milestones" for an object
39
+ ```ruby
40
+ client.milestones('dor', 'druid:gv054hp4128')
41
+ #=> [{version: '1', milestone: 'published'}]
37
42
  ```
43
+
44
+ List workflow templates
45
+ ```ruby
38
46
  client.workflow_templates
39
47
  ```
40
48
 
41
49
  Show a workflow template
42
- ```
50
+ ```ruby
43
51
  client.workflow_template('etdSubmitWF')
44
52
  ```
45
53
 
@@ -3,7 +3,7 @@
3
3
  module Dor
4
4
  module Workflow
5
5
  class Client
6
- VERSION = '3.10.0'
6
+ VERSION = '3.11.0'
7
7
  end
8
8
  end
9
9
  end
@@ -4,6 +4,7 @@ module Dor
4
4
  module Workflow
5
5
  class Client
6
6
  # Makes requests relating to a workflow
7
+ # rubocop:disable Metrics/ClassLength
7
8
  class WorkflowRoutes
8
9
  extend Deprecation
9
10
 
@@ -62,7 +63,7 @@ module Dor
62
63
  # @return [Boolean] always true
63
64
  # Http Call
64
65
  # ==
65
- # The method does an HTTP PUT to the URL defined in `Dor::WF_URI`. As an example:
66
+ # The method does an HTTP PUT to the base URL. As an example:
66
67
  #
67
68
  # PUT "/objects/pid:123/workflows/GoogleScannedWF/convert"
68
69
  # <process name=\"convert\" status=\"completed\" />"
@@ -95,7 +96,7 @@ module Dor
95
96
  # @return [Boolean] always true
96
97
  # Http Call
97
98
  # ==
98
- # The method does an HTTP PUT to the URL defined in `Dor::WF_URI`. As an example:
99
+ # The method does an HTTP PUT to the base URL. As an example:
99
100
  #
100
101
  # PUT "/dor/objects/pid:123/workflows/GoogleScannedWF/convert"
101
102
  # <process name=\"convert\" status=\"completed\" />"
@@ -120,8 +121,22 @@ module Dor
120
121
  # @param [String] workflow The name of the workflow
121
122
  # @param [String] process The name of the process step
122
123
  # @return [String] status for repo-workflow-process-druid
123
- def workflow_status(repo, druid, workflow, process)
124
- workflow_md = workflow_xml(repo, druid, workflow)
124
+ # rubocop:disable Metrics/MethodLength
125
+ # rubocop:disable Metrics/AbcSize
126
+ def workflow_status(*args)
127
+ case args.length
128
+ when 4
129
+ Deprecation.warn(self, 'Calling workflow_status with positional args is deprecated, use kwargs instead')
130
+ (_repo, druid, workflow, process) = *args
131
+ when 1
132
+ opts = args.first
133
+ repo = opts[:repo]
134
+ Deprecation.warn(self, 'Passing `:repo` to workflow_status is deprecated and can be omitted') if repo
135
+ druid = opts[:druid]
136
+ workflow = opts[:workflow]
137
+ process = opts[:process]
138
+ end
139
+ workflow_md = workflow_xml(druid: druid, workflow: workflow)
125
140
  doc = Nokogiri::XML(workflow_md)
126
141
  raise Dor::WorkflowException, "Unable to parse response:\n#{workflow_md}" if doc.root.nil?
127
142
 
@@ -129,6 +144,8 @@ module Dor
129
144
  process = processes.max { |a, b| a.attr('version').to_i <=> b.attr('version').to_i }
130
145
  process&.attr('status')
131
146
  end
147
+ # rubocop:enable Metrics/AbcSize
148
+ # rubocop:enable Metrics/MethodLength
132
149
 
133
150
  #
134
151
  # Retrieves the raw XML for the given workflow
@@ -136,7 +153,18 @@ module Dor
136
153
  # @param [String] druid The id of the object
137
154
  # @param [String] workflow The name of the workflow
138
155
  # @return [String] XML of the workflow
139
- def workflow_xml(repo, druid, workflow)
156
+ def workflow_xml(*args)
157
+ case args.length
158
+ when 3
159
+ Deprecation.warn(self, 'Calling workflow_xml with positional args is deprecated, use kwargs instead')
160
+ (repo, druid, workflow) = *args
161
+ when 1
162
+ opts = args.first
163
+ repo = opts[:repo]
164
+ Deprecation.warn(self, 'Passing `:repo` to workflow_xml is deprecated and can be omitted') if repo
165
+ druid = opts[:druid]
166
+ workflow = opts[:workflow]
167
+ end
140
168
  raise ArgumentError, 'missing workflow' unless workflow
141
169
 
142
170
  requestor.request "#{repo}/objects/#{druid}/workflows/#{workflow}"
@@ -156,7 +184,7 @@ module Dor
156
184
  #
157
185
  # Http Call
158
186
  # ==
159
- # The method does an HTTP PUT to the URL defined in `Dor::WF_URI`.
187
+ # The method does an HTTP PUT to the base URL.
160
188
  #
161
189
  # PUT "/objects/pid:123/workflows/GoogleScannedWF/convert"
162
190
  # <process name=\"convert\" status=\"error\" />"
@@ -178,7 +206,7 @@ module Dor
178
206
  #
179
207
  # Http Call
180
208
  # ==
181
- # The method does an HTTP PUT to the URL defined in `Dor::WF_URI`.
209
+ # The method does an HTTP PUT to the base URL.
182
210
  #
183
211
  # PUT "/objects/pid:123/workflows/GoogleScannedWF/convert"
184
212
  # <process name=\"convert\" status=\"error\" />"
@@ -213,8 +241,9 @@ module Dor
213
241
  # @example
214
242
  # client.workflows('druid:sr100hp0609')
215
243
  # => ["accessionWF", "assemblyWF", "disseminationWF"]
216
- def workflows(pid, repo = 'dor')
217
- xml_doc = Nokogiri::XML(workflow_xml(repo, pid, ''))
244
+ def workflows(pid, repo = nil)
245
+ Deprecation.warn(self, 'Passing the second argument (repo) to workflows is deprecated and can be omitted') if repo
246
+ xml_doc = Nokogiri::XML(workflow_xml(druid: pid, workflow: ''))
218
247
  xml_doc.xpath('//workflow').collect { |workflow| workflow['id'] }
219
248
  end
220
249
 
@@ -222,8 +251,9 @@ module Dor
222
251
  # @param [String] pid id of object
223
252
  # @param [String] workflow_name The name of the workflow
224
253
  # @return [Workflow::Response::Workflow]
225
- def workflow(repo: 'dor', pid:, workflow_name:)
226
- xml = workflow_xml(repo, pid, workflow_name)
254
+ def workflow(repo: nil, pid:, workflow_name:)
255
+ Deprecation.warn(self, 'passing the repo parameter is deprecated and will be removed in the next major versions') if repo
256
+ xml = workflow_xml(druid: pid, workflow: workflow_name)
227
257
  Workflow::Response::Workflow.new(xml: xml)
228
258
  end
229
259
 
@@ -260,6 +290,7 @@ module Dor
260
290
  builder.to_xml
261
291
  end
262
292
  end
293
+ # rubocop:enable Metrics/ClassLength
263
294
  end
264
295
  end
265
296
  end
@@ -235,13 +235,13 @@ RSpec.describe Dor::Workflow::Client do
235
235
  let(:druid) { @druid }
236
236
  let(:stubs) do
237
237
  Faraday::Adapter::Test::Stubs.new do |stub|
238
- stub.get("#{repo}/objects/#{druid}/workflows/#{workflow_name}") do |_env|
238
+ stub.get("/objects/#{druid}/workflows/#{workflow_name}") do |_env|
239
239
  response
240
240
  end
241
241
  end
242
242
  end
243
243
 
244
- subject { client.workflow_status(repo, druid, workflow_name, step_name) }
244
+ subject { client.workflow_status(druid: druid, workflow: workflow_name, process: step_name) }
245
245
  let(:step_name) { 'registrar-approval' }
246
246
  let(:workflow_name) { 'etdSubmitWF' }
247
247
  let(:status) { 200 }
@@ -250,6 +250,40 @@ RSpec.describe Dor::Workflow::Client do
250
250
  end
251
251
  let(:xml) { '' }
252
252
 
253
+ context 'when repo is provided' do
254
+ before do
255
+ allow(Deprecation).to receive(:warn)
256
+ end
257
+ subject { client.workflow_status(repo: repo, druid: druid, workflow: workflow_name, process: step_name) }
258
+
259
+ context 'when a single result is returned' do
260
+ let(:xml) do
261
+ '<workflow><process name="registrar-approval" status="completed" /></workflow>'
262
+ end
263
+
264
+ it 'returns status as a string' do
265
+ expect(subject).to eq('completed')
266
+ end
267
+ end
268
+ end
269
+
270
+ context 'with positional arguments' do
271
+ before do
272
+ allow(Deprecation).to receive(:warn)
273
+ end
274
+ subject { client.workflow_status(repo, druid, workflow_name, step_name) }
275
+
276
+ context 'when a single result is returned' do
277
+ let(:xml) do
278
+ '<workflow><process name="registrar-approval" status="completed" /></workflow>'
279
+ end
280
+
281
+ it 'returns status as a string' do
282
+ expect(subject).to eq('completed')
283
+ end
284
+ end
285
+ end
286
+
253
287
  context 'when a single result is returned' do
254
288
  let(:xml) do
255
289
  '<workflow><process name="registrar-approval" status="completed" /></workflow>'
@@ -302,29 +336,82 @@ RSpec.describe Dor::Workflow::Client do
302
336
  end
303
337
 
304
338
  describe '#workflow_xml' do
305
- subject(:workflow_xml) { client.workflow_xml('dor', 'druid:123', workflow) }
306
-
307
- context 'when a workflow name is provided' do
308
- let(:workflow) { 'etdSubmitWF' }
309
- let(:xml) { '<workflow id="etdSubmitWF"><process name="registrar-approval" status="completed" /></workflow>' }
310
- let(:stubs) do
311
- Faraday::Adapter::Test::Stubs.new do |stub|
312
- stub.get('dor/objects/druid:123/workflows/etdSubmitWF') do |_env|
313
- [200, {}, xml]
339
+ context 'with positional args' do
340
+ before do
341
+ allow(Deprecation).to receive(:warn)
342
+ end
343
+ subject(:workflow_xml) { client.workflow_xml('dor', 'druid:123', workflow) }
344
+
345
+ context 'when a workflow name is provided' do
346
+ let(:workflow) { 'etdSubmitWF' }
347
+ let(:xml) { '<workflow id="etdSubmitWF"><process name="registrar-approval" status="completed" /></workflow>' }
348
+ let(:stubs) do
349
+ Faraday::Adapter::Test::Stubs.new do |stub|
350
+ stub.get('dor/objects/druid:123/workflows/etdSubmitWF') do |_env|
351
+ [200, {}, xml]
352
+ end
314
353
  end
315
354
  end
355
+
356
+ it 'returns the xml for a given repository, druid, and workflow' do
357
+ expect(workflow_xml).to eq(xml)
358
+ end
316
359
  end
317
360
 
318
- it 'returns the xml for a given repository, druid, and workflow' do
319
- expect(workflow_xml).to eq(xml)
361
+ context 'when no workflow name is provided' do
362
+ let(:workflow) { nil }
363
+
364
+ it 'raises an error' do
365
+ expect { workflow_xml }.to raise_error ArgumentError
366
+ end
320
367
  end
321
368
  end
369
+ context 'with keyword args' do
370
+ subject(:workflow_xml) { client.workflow_xml(druid: 'druid:123', workflow: workflow) }
322
371
 
323
- context 'when no workflow name is provided' do
324
- let(:workflow) { nil }
372
+ context 'when a repo is provided' do
373
+ subject(:workflow_xml) { client.workflow_xml(repo: 'dor', druid: 'druid:123', workflow: workflow) }
374
+ before do
375
+ allow(Deprecation).to receive(:warn)
376
+ end
377
+
378
+ let(:workflow) { 'etdSubmitWF' }
379
+ let(:xml) { '<workflow id="etdSubmitWF"><process name="registrar-approval" status="completed" /></workflow>' }
380
+ let(:stubs) do
381
+ Faraday::Adapter::Test::Stubs.new do |stub|
382
+ stub.get('dor/objects/druid:123/workflows/etdSubmitWF') do |_env|
383
+ [200, {}, xml]
384
+ end
385
+ end
386
+ end
387
+
388
+ it 'returns the xml for a given repository, druid, and workflow' do
389
+ expect(workflow_xml).to eq(xml)
390
+ end
391
+ end
325
392
 
326
- it 'raises an error' do
327
- expect { workflow_xml }.to raise_error ArgumentError
393
+ context 'when a workflow name is provided' do
394
+ let(:workflow) { 'etdSubmitWF' }
395
+ let(:xml) { '<workflow id="etdSubmitWF"><process name="registrar-approval" status="completed" /></workflow>' }
396
+ let(:stubs) do
397
+ Faraday::Adapter::Test::Stubs.new do |stub|
398
+ stub.get('/objects/druid:123/workflows/etdSubmitWF') do |_env|
399
+ [200, {}, xml]
400
+ end
401
+ end
402
+ end
403
+
404
+ it 'returns the xml for a given repository, druid, and workflow' do
405
+ expect(workflow_xml).to eq(xml)
406
+ end
407
+ end
408
+
409
+ context 'when no workflow name is provided' do
410
+ let(:workflow) { nil }
411
+
412
+ it 'raises an error' do
413
+ expect { workflow_xml }.to raise_error ArgumentError
414
+ end
328
415
  end
329
416
  end
330
417
  end
@@ -358,7 +445,7 @@ RSpec.describe Dor::Workflow::Client do
358
445
  let(:xml) { '<workflow id="accessionWF"><process name="publish" status="completed" /></workflow>' }
359
446
  let(:stubs) do
360
447
  Faraday::Adapter::Test::Stubs.new do |stub|
361
- stub.get("dor/objects/#{@druid}/workflows/") do |_env|
448
+ stub.get("/objects/#{@druid}/workflows/") do |_env|
362
449
  [200, {}, xml]
363
450
  end
364
451
  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: 3.10.0
4
+ version: 3.11.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: 2019-09-23 00:00:00.000000000 Z
12
+ date: 2019-11-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport