dor-workflow-service 2.4.0 → 2.5.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: ffae9b6a6c8ad9f6b160c80230c85f97387d9cd96c64ee3954c9c28c5f6d83b8
4
- data.tar.gz: b682177ac31b9658cf850721ebcab413fb59ff5d9ab396540e22831330f02eec
3
+ metadata.gz: 4abc8faa2adf7c8c9f51ed741e5c7347468d1a86c15e7f6d9302500a8985e820
4
+ data.tar.gz: 9be7245887a6b93ac5461b69f6bea3d72a29e0d906ae14a1ea73b73396145008
5
5
  SHA512:
6
- metadata.gz: f1c55e5f176a70ba9201e69211a732a7447a1484374df55b9bbcb1113215da2f5c4936fbe966ec08f83f58e7ad34b4a4b9e97fc0b24bdee3cfdde15fc9152896
7
- data.tar.gz: 903f5def9d9c11e753600bec6fbe40cfe31396887739cfc4ee1b8a8bf65b1eddfe74ca47f5930d6a8f39de060841c801cc1a333eb6e41adb8f5df0aaf6bf2a34
6
+ metadata.gz: d6e52377d0c17001f5e98f301b7d4d21c2572f23fd5c6871e9d03f3d1f9678aa4aa53df1893e7301bde5617d94c41b08552716c51565daf427bca2bfad441956
7
+ data.tar.gz: 7a4f03c9a5bdc93a289256094690d81f40cea5327343eaab1f9def9b556c239bc2c4d2a6a40556ce097ed2f9df71a3b564f24f1305223d4fb987b5dadda578d9
data/.rubocop.yml CHANGED
@@ -1,5 +1,11 @@
1
1
  inherit_from: .rubocop_todo.yml
2
2
 
3
+ AllCops:
4
+ TargetRubyVersion: 2.3
3
5
  # Configuration parameters: AllowURI, URISchemes.
4
6
  Metrics/LineLength:
5
7
  Max: 300
8
+
9
+ Metrics/BlockLength:
10
+ Exclude:
11
+ - spec/**/*_spec.rb
data/.rubocop_todo.yml CHANGED
@@ -1,157 +1,48 @@
1
- # This configuration was generated by `rubocop --auto-gen-config`
2
- # on 2015-08-28 15:56:06 -0700 using RuboCop version 0.32.1.
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2019-02-01 13:34:49 -0600 using RuboCop version 0.63.1.
3
4
  # The point is for the user to remove these configuration records
4
5
  # one by one as the offenses are removed from the code base.
5
6
  # Note that changes in the inspected code, or installation of new
6
7
  # versions of RuboCop, may require this file to be generated again.
7
8
 
8
9
  # Offense count: 1
9
- # Cop supports --auto-correct.
10
- Lint/UnusedBlockArgument:
11
- Enabled: false
10
+ Lint/AmbiguousRegexpLiteral:
11
+ Exclude:
12
+ - 'spec/workflow_service_spec.rb'
12
13
 
13
14
  # Offense count: 1
14
- # Cop supports --auto-correct.
15
- Lint/UnusedMethodArgument:
16
- Enabled: false
15
+ Lint/UselessAssignment:
16
+ Exclude:
17
+ - 'lib/dor/services/workflow_service.rb'
17
18
 
18
19
  # Offense count: 2
19
20
  Metrics/AbcSize:
20
- Max: 32
21
-
22
- # Offense count: 2
23
- # Configuration parameters: CountComments.
24
- Metrics/MethodLength:
25
- Max: 16
21
+ Max: 22
26
22
 
27
23
  # Offense count: 1
28
24
  # Configuration parameters: CountComments.
29
- Metrics/ModuleLength:
30
- Max: 202
25
+ Metrics/ClassLength:
26
+ Max: 250
27
+
28
+ # Offense count: 2
29
+ # Configuration parameters: CountComments, ExcludedMethods.
30
+ Metrics/MethodLength:
31
+ Max: 20
31
32
 
32
33
  # Offense count: 2
33
34
  # Configuration parameters: CountKeywordArgs.
34
35
  Metrics/ParameterLists:
35
36
  Max: 6
36
37
 
37
- # Offense count: 2
38
- # Cop supports --auto-correct.
39
- # Configuration parameters: EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle, SupportedLastArgumentHashStyles.
40
- Style/AlignHash:
41
- Enabled: false
42
-
43
- # Offense count: 2
44
- # Cop supports --auto-correct.
45
- # Configuration parameters: EnforcedStyle, SupportedStyles, ProceduralMethods, FunctionalMethods, IgnoredMethods.
46
- Style/BlockDelimiters:
47
- Enabled: false
48
-
49
- # Offense count: 5
50
- # Cop supports --auto-correct.
51
- # Configuration parameters: EnforcedStyle, SupportedStyles.
52
- Style/BracesAroundHashParameters:
53
- Enabled: false
54
-
55
- # Offense count: 4
56
- Style/ClassVars:
57
- Enabled: false
58
-
59
- # Offense count: 1
60
- Style/Documentation:
61
- Enabled: false
62
-
63
- # Offense count: 2
64
- # Cop supports --auto-correct.
65
- # Configuration parameters: EnforcedStyle, SupportedStyles.
66
- Style/EmptyLinesAroundClassBody:
67
- Enabled: false
68
-
69
- # Offense count: 1
70
- # Cop supports --auto-correct.
71
- # Configuration parameters: EnforcedStyle, SupportedStyles.
72
- Style/EmptyLinesAroundModuleBody:
73
- Enabled: false
74
-
75
- # Offense count: 1
76
- # Configuration parameters: Exclude.
77
- Style/FileName:
78
- Enabled: false
79
-
80
- # Offense count: 52
81
- # Cop supports --auto-correct.
82
- # Configuration parameters: SupportedStyles, UseHashRocketsWithSymbolValues.
83
- Style/HashSyntax:
84
- EnforcedStyle: hash_rockets
85
-
86
- # Offense count: 2
87
- # Cop supports --auto-correct.
88
- Style/LeadingCommentSpace:
89
- Enabled: false
90
-
91
- # Offense count: 2
92
- # Cop supports --auto-correct.
93
- Style/MultilineBlockLayout:
94
- Enabled: false
95
-
96
- # Offense count: 6
97
- # Cop supports --auto-correct.
98
- # Configuration parameters: AllowSafeAssignment.
99
- Style/ParenthesesAroundCondition:
100
- Enabled: false
101
-
102
- # Offense count: 10
103
- # Cop supports --auto-correct.
104
- # Configuration parameters: PreferredDelimiters.
105
- Style/PercentLiteralDelimiters:
106
- Enabled: false
107
-
108
38
  # Offense count: 1
109
- # Configuration parameters: EnforcedStyle, SupportedStyles.
110
- Style/RaiseArgs:
111
- Enabled: false
39
+ # Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
40
+ # AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
41
+ Naming/FileName:
42
+ Exclude:
43
+ - 'lib/dor-workflow-service.rb'
112
44
 
113
- # Offense count: 5
114
- # Cop supports --auto-correct.
115
- # Configuration parameters: EnforcedStyle, SupportedStyles.
116
- Style/SignalException:
117
- Enabled: false
118
-
119
- # Offense count: 11
120
- # Cop supports --auto-correct.
121
- # Configuration parameters: MultiSpaceAllowedForOperators.
122
- Style/SpaceAroundOperators:
123
- Enabled: false
124
-
125
- # Offense count: 6
126
- # Cop supports --auto-correct.
127
- # Configuration parameters: EnforcedStyle, SupportedStyles.
128
- Style/SpaceBeforeBlockBraces:
129
- Enabled: false
130
-
131
- # Offense count: 8
132
- # Cop supports --auto-correct.
133
- # Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
134
- Style/SpaceInsideBlockBraces:
135
- Enabled: false
136
-
137
- # Offense count: 6
138
- # Cop supports --auto-correct.
139
- Style/SpaceInsideBrackets:
140
- Enabled: false
141
-
142
- # Offense count: 15
143
- # Cop supports --auto-correct.
144
- # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SupportedStyles.
145
- Style/SpaceInsideHashLiteralBraces:
146
- Enabled: false
147
-
148
- # Offense count: 4
149
- # Cop supports --auto-correct.
150
- Style/SpaceInsideParens:
151
- Enabled: false
152
-
153
- # Offense count: 1
154
- # Cop supports --auto-correct.
155
- # Configuration parameters: IgnoredMethods.
156
- Style/SymbolProc:
157
- Enabled: false
45
+ # Offense count: 9
46
+ Style/ClassVars:
47
+ Exclude:
48
+ - 'lib/dor/services/workflow_service.rb'
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in dor-workflow-service.gemspec
@@ -7,7 +9,7 @@ gem 'activesupport', ENV['RAILS_VERSION'] if ENV['RAILS_VERSION']
7
9
 
8
10
  group :development, :test do
9
11
  gem 'byebug'
10
- gem "simplecov"
11
- gem "vcr"
12
+ gem 'simplecov'
13
+ gem 'vcr'
12
14
  gem 'webmock'
13
15
  end
data/Rakefile CHANGED
@@ -1,13 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/setup'
2
4
  require 'bundler/gem_tasks'
3
5
 
4
6
  require 'rspec/core/rake_task'
7
+ require 'rubocop/rake_task'
5
8
 
6
- task :default => [:spec]
9
+ RuboCop::RakeTask.new
10
+ RSpec::Core::RakeTask.new(:spec)
7
11
 
8
- RSpec::Core::RakeTask.new(:spec) do |spec|
9
- spec.pattern = 'spec/**/*_spec.rb', 'test/**/*.rb'
10
- end
12
+ desc 'Run linter and tests'
13
+ task default: %i[rubocop spec]
11
14
 
12
15
  require 'yard'
13
16
  YARD::Rake::YardocTask.new
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #! /usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'rubygems'
4
5
  require 'irb'
@@ -1,5 +1,6 @@
1
- # -*- encoding: utf-8 -*-
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'dor/workflow_version'
5
6
 
@@ -13,21 +14,23 @@ Gem::Specification.new do |gem|
13
14
  gem.homepage = 'https://consul.stanford.edu/display/DOR/DOR+services#DORservices-initializeworkflow'
14
15
 
15
16
  gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
16
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
17
18
  gem.test_files = gem.files.grep(%r{^(spec)/})
18
19
  gem.require_paths = ['lib']
19
20
 
20
21
  gem.add_dependency 'activesupport', '>= 3.2.1', '< 6'
21
- gem.add_dependency 'nokogiri', '~> 1.6'
22
- gem.add_dependency 'retries'
23
22
  gem.add_dependency 'confstruct', '>= 0.2.7', '< 2'
23
+ gem.add_dependency 'deprecation'
24
24
  gem.add_dependency 'faraday', '~> 0.9', '>= 0.9.2'
25
25
  gem.add_dependency 'net-http-persistent', '>= 2.9.4', '< 4.a'
26
+ gem.add_dependency 'nokogiri', '~> 1.6'
27
+ gem.add_dependency 'retries'
26
28
 
29
+ gem.add_development_dependency 'equivalent-xml', '~> 0.5', '>= 0.5.1'
27
30
  gem.add_development_dependency 'rake'
28
- gem.add_development_dependency 'rspec', '~> 3.3'
29
- gem.add_development_dependency 'yard'
30
31
  gem.add_development_dependency 'redcarpet'
31
- gem.add_development_dependency 'equivalent-xml', '~> 0.5', '>= 0.5.1'
32
+ gem.add_development_dependency 'rspec', '~> 3.3'
33
+ gem.add_development_dependency 'rubocop', '~> 0.63.1'
32
34
  gem.add_development_dependency 'simplecov'
35
+ gem.add_development_dependency 'yard'
33
36
  end
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dor/workflow_version'
2
4
  require 'dor/services/workflow_service'
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dor
4
+ module Workflow
5
+ module Response
6
+ # The response form asking the server about a workflow for an item
7
+ class Workflow
8
+ def initialize(xml:)
9
+ @xml = xml
10
+ end
11
+
12
+ # @param [Integer] version the version we are checking for.
13
+ def active_for?(version:)
14
+ result = ng_xml.at_xpath("/workflow/process[@version=#{version}]")
15
+ result ? true : false
16
+ end
17
+
18
+ private
19
+
20
+ def ng_xml
21
+ @ng_xml ||= Nokogiri::XML(@xml)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,12 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support'
2
4
  require 'active_support/core_ext'
3
5
  require 'nokogiri'
4
6
  require 'retries'
5
7
  require 'faraday'
6
8
  require 'dor/workflow_exception'
9
+ require 'dor/models/response/workflow'
10
+ require 'deprecation'
7
11
 
8
12
  module Dor
9
-
10
13
  # TODO: major version revision: change pattern of usage to be normal non-singleton class
11
14
  # TODO: convert @@class_vars to regular attributes
12
15
  # TODO: create normal initalize method, deprecate configure
@@ -17,6 +20,7 @@ module Dor
17
20
 
18
21
  # Create and update workflows
19
22
  class WorkflowService
23
+ extend Deprecation
20
24
  class << self
21
25
  @@handler = nil
22
26
  @@logger = nil
@@ -25,7 +29,7 @@ module Dor
25
29
  @@http_conn = nil
26
30
 
27
31
  # From Workflow Service's admin/Process.java
28
- VALID_STATUS = %w{waiting completed error queued skipped hold}
32
+ VALID_STATUS = %w[waiting completed error queued skipped hold].freeze
29
33
 
30
34
  # Creates a workflow for a given object in the repository. If this particular workflow for this objects exists,
31
35
  # it will replace the old workflow with wf_xml passed to this method. You have the option of creating a datastream or not.
@@ -41,14 +45,12 @@ module Dor
41
45
  # @option opts [String] :lane_id adds laneId attribute to all process elements in the wf_xml workflow xml. Defaults to a value of 'default'
42
46
  # @return [Boolean] always true
43
47
  #
44
- def create_workflow(repo, druid, workflow_name, wf_xml, opts = {:create_ds => true})
48
+ def create_workflow(repo, druid, workflow_name, wf_xml, opts = { create_ds: true })
45
49
  lane_id = opts.fetch(:lane_id, 'default')
46
50
  xml = add_lane_id_to_workflow_xml(lane_id, wf_xml)
47
51
  status = workflow_resource_method "#{repo}/objects/#{druid}/workflows/#{workflow_name}", 'put', xml,
48
- {
49
- :content_type => 'application/xml',
50
- :params => { 'create-ds' => opts[:create_ds] }
51
- }
52
+ content_type: 'application/xml',
53
+ params: { 'create-ds' => opts[:create_ds] }
52
54
  true
53
55
  end
54
56
 
@@ -75,13 +77,14 @@ module Dor
75
77
  # <process name=\"convert\" status=\"completed\" />"
76
78
  def update_workflow_status(repo, druid, workflow, process, status, opts = {})
77
79
  raise ArgumentError, "Unknown status value #{status}" unless VALID_STATUS.include?(status.downcase)
78
- opts = { :elapsed => 0, :lifecycle => nil, :note => nil }.merge!(opts)
80
+
81
+ opts = { elapsed: 0, lifecycle: nil, note: nil }.merge!(opts)
79
82
  opts[:elapsed] = opts[:elapsed].to_s
80
83
  current_status = opts.delete(:current_status)
81
- xml = create_process_xml({ :name => process, :status => status.downcase }.merge!(opts))
84
+ xml = create_process_xml({ name: process, status: status.downcase }.merge!(opts))
82
85
  uri = "#{repo}/objects/#{druid}/workflows/#{workflow}/#{process}"
83
- uri << "?current-status=#{current_status.downcase}" if current_status
84
- workflow_resource_method(uri, 'put', xml, { :content_type => 'application/xml' })
86
+ uri += "?current-status=#{current_status.downcase}" if current_status
87
+ workflow_resource_method(uri, 'put', xml, content_type: 'application/xml')
85
88
  true
86
89
  end
87
90
 
@@ -95,7 +98,8 @@ module Dor
95
98
  def get_workflow_status(repo, druid, workflow, process)
96
99
  workflow_md = get_workflow_xml(repo, druid, workflow)
97
100
  doc = Nokogiri::XML(workflow_md)
98
- raise Dor::WorkflowException.new("Unable to parse response:\n#{workflow_md}") if doc.root.nil?
101
+ raise Dor::WorkflowException, "Unable to parse response:\n#{workflow_md}" if doc.root.nil?
102
+
99
103
  processes = doc.root.xpath("//process[@name='#{process}']")
100
104
  process = processes.max { |a, b| a.attr('version').to_i <=> b.attr('version').to_i }
101
105
  process&.attr('status')
@@ -122,7 +126,7 @@ module Dor
122
126
  # => ["accessionWF", "assemblyWF", "disseminationWF"]
123
127
  def get_workflows(pid, repo = 'dor')
124
128
  xml_doc = Nokogiri::XML(get_workflow_xml(repo, pid, ''))
125
- xml_doc.xpath('//workflow').collect {|workflow| workflow['id']}
129
+ xml_doc.xpath('//workflow').collect { |workflow| workflow['id'] }
126
130
  end
127
131
 
128
132
  # Get active workflow names into an array for given PID
@@ -135,8 +139,18 @@ module Dor
135
139
  # Dor::WorkflowService.get_active_workflows('dor', 'druid:sr100hp0609')
136
140
  # => ["accessionWF", "assemblyWF", "disseminationWF"]
137
141
  def get_active_workflows(repo, pid)
142
+ Deprecation.warn(self, 'get_active_workflows will be removed without replacement because the workflow server no longer archives processes')
138
143
  doc = Nokogiri::XML(get_workflow_xml(repo, pid, ''))
139
- doc.xpath( %(//workflow[not(process/@archived)]/@id ) ).map {|n| n.value}
144
+ doc.xpath(%(//workflow[not(process/@archived)]/@id )).map(&:value)
145
+ end
146
+
147
+ # @param [String] repo repository of the object
148
+ # @param [String] pid id of object
149
+ # @param [String] workflow_name The name of the workflow
150
+ # @return [Workflow::Response::Workflow]
151
+ def workflow(repo: 'dor', pid:, workflow_name:)
152
+ xml = get_workflow_xml(repo, pid, workflow_name)
153
+ Workflow::Response::Workflow.new(xml: xml)
140
154
  end
141
155
 
142
156
  # Updates the status of one step in a workflow to error.
@@ -157,9 +171,9 @@ module Dor
157
171
  # PUT "/dor/objects/pid:123/workflows/GoogleScannedWF/convert"
158
172
  # <process name=\"convert\" status=\"error\" />"
159
173
  def update_workflow_error_status(repo, druid, workflow, process, error_msg, opts = {})
160
- opts = {:error_text => nil}.merge!(opts)
161
- xml = create_process_xml({:name => process, :status => 'error', :errorMessage => error_msg}.merge!(opts))
162
- workflow_resource_method "#{repo}/objects/#{druid}/workflows/#{workflow}/#{process}", 'put', xml, {:content_type => 'application/xml'}
174
+ opts = { error_text: nil }.merge!(opts)
175
+ xml = create_process_xml({ name: process, status: 'error', errorMessage: error_msg }.merge!(opts))
176
+ workflow_resource_method "#{repo}/objects/#{druid}/workflows/#{workflow}/#{process}", 'put', xml, content_type: 'application/xml'
163
177
  true
164
178
  end
165
179
 
@@ -188,6 +202,7 @@ module Dor
188
202
  doc = query_lifecycle(repo, druid)
189
203
  milestone = doc.at_xpath("//lifecycle/milestone[text() = '#{milestone}']")
190
204
  return Time.parse(milestone['date']) if milestone
205
+
191
206
  nil
192
207
  end
193
208
 
@@ -206,6 +221,7 @@ module Dor
206
221
  doc = query_lifecycle(repo, druid, true)
207
222
  milestone = doc.at_xpath("//lifecycle/milestone[text() = '#{milestone}']")
208
223
  return Time.parse(milestone['date']) if milestone
224
+
209
225
  nil
210
226
  end
211
227
 
@@ -213,7 +229,7 @@ module Dor
213
229
  def get_milestones(repo, druid)
214
230
  doc = query_lifecycle(repo, druid)
215
231
  doc.xpath('//lifecycle/milestone').collect do |node|
216
- { :milestone => node.text, :at => Time.parse(node['date']), :version => node['version'] }
232
+ { milestone: node.text, at: Time.parse(node['date']), version: node['version'] }
217
233
  end
218
234
  end
219
235
 
@@ -271,12 +287,12 @@ module Dor
271
287
  if completed
272
288
  Array(completed).each do |step|
273
289
  completed_param = qualify_step(options[:default_repository], options[:default_workflow], step)
274
- uri_string << "&completed=#{completed_param}"
290
+ uri_string += "&completed=#{completed_param}"
275
291
  end
276
292
  end
277
293
 
278
- uri_string << "&limit=#{options[:limit].to_i}" if options[:limit] && options[:limit].to_i > 0
279
- uri_string << "&lane-id=#{lane_id}"
294
+ uri_string += "&limit=#{options[:limit].to_i}" if options[:limit]&.to_i&.positive?
295
+ uri_string += "&lane-id=#{lane_id}"
280
296
 
281
297
  resp = workflow_resource_method uri_string
282
298
  #
@@ -367,7 +383,7 @@ module Dor
367
383
  # @return [Integer] number of stale, queued steps if the :count_only option was set to true
368
384
  def count_stale_queued_workflows(repository, opts = {})
369
385
  uri_string = build_queued_uri(repository, opts) + '&count-only=true'
370
- doc = Nokogiri::XML(workflow_resource_method uri_string)
386
+ doc = Nokogiri::XML(workflow_resource_method(uri_string))
371
387
  doc.at_xpath('/objects/@count').value.to_i
372
388
  end
373
389
 
@@ -375,8 +391,8 @@ module Dor
375
391
  # @return [String]
376
392
  def create_process_xml(params)
377
393
  builder = Nokogiri::XML::Builder.new do |xml|
378
- attrs = params.reject { |k, v| v.nil? }
379
- attrs = Hash[ attrs.map {|k, v| [k.to_s.camelize(:lower), v]}] # camelize all the keys in the attrs hash
394
+ attrs = params.reject { |_k, v| v.nil? }
395
+ attrs = Hash[attrs.map { |k, v| [k.to_s.camelize(:lower), v] }] # camelize all the keys in the attrs hash
380
396
  xml.process(attrs)
381
397
  end
382
398
  builder.to_xml
@@ -385,8 +401,8 @@ module Dor
385
401
  # @return [Nokogiri::XML::Document]
386
402
  def query_lifecycle(repo, druid, active_only = false)
387
403
  req = "#{repo}/objects/#{druid}/lifecycle"
388
- req << '?active-only=true' if active_only
389
- Nokogiri::XML(workflow_resource_method req)
404
+ req += '?active-only=true' if active_only
405
+ Nokogiri::XML(workflow_resource_method(req))
390
406
  end
391
407
 
392
408
  # @param [String] repo The repository the object resides in. The service recoginzes "dor" and "sdr" at the moment
@@ -400,10 +416,11 @@ module Dor
400
416
 
401
417
  # @param [String] repo The repository the object resides in. The service recoginzes "dor" and "sdr" at the moment
402
418
  # @param [String] druid The id of the object to delete the workflow from
403
- def archive_workflow(repo, druid, wf_name, version_num = nil)
419
+ def archive_workflow(_repo, druid, wf_name, version_num = nil)
404
420
  raise 'Please call Dor::WorkflowService.configure(workflow_service_url, :dor_services_url => DOR_SERVIES_URL) once before archiving workflow' if @@dor_services_url.nil?
421
+
405
422
  url = "/v1/objects/#{druid}/workflows/#{wf_name}/archive"
406
- url << "/#{version_num}" if version_num
423
+ url += "/#{version_num}" if version_num
407
424
  workflow_resource_method(url, 'post', '')
408
425
  end
409
426
 
@@ -417,7 +434,7 @@ module Dor
417
434
  # @param [Boolean] create_accession_wf Option to create accessionWF when closing a version. Defaults to true
418
435
  def close_version(repo, druid, create_accession_wf = true)
419
436
  uri = "#{repo}/objects/#{druid}/versionClose"
420
- uri << '?create-accession=false' unless create_accession_wf
437
+ uri += '?create-accession=false' unless create_accession_wf
421
438
  workflow_resource_method(uri, 'post', '')
422
439
  true
423
440
  end
@@ -430,7 +447,7 @@ module Dor
430
447
  # @return [Array<String>] all of the distinct laneIds. Array will be empty if no lane ids were found
431
448
  def get_lane_ids(repo, workflow, process)
432
449
  uri = "workflow_queue/lane_ids?step=#{repo}:#{workflow}:#{process}"
433
- doc = Nokogiri::XML(workflow_resource_method uri)
450
+ doc = Nokogiri::XML(workflow_resource_method(uri))
434
451
  nodes = doc.xpath('/lanes/lane')
435
452
  nodes.map { |n| n['id'] }
436
453
  end
@@ -439,6 +456,7 @@ module Dor
439
456
  # @return [Faraday::Connection] the REST client resource created during configure()
440
457
  def workflow_resource
441
458
  raise 'Please call Dor::WorkflowService.configure(url) once before calling any WorkflowService methods' if @@http_conn.nil?
459
+
442
460
  @@http_conn
443
461
  end
444
462
 
@@ -476,7 +494,7 @@ module Dor
476
494
  @@dor_services_url = opts[:dor_services_url] if opts[:dor_services_url]
477
495
  # params[:ssl_client_cert] = OpenSSL::X509::Certificate.new(File.read(opts[:client_cert_file])) if opts[:client_cert_file]
478
496
  # params[:ssl_client_key] = OpenSSL::PKey::RSA.new(File.read(opts[:client_key_file]), opts[:client_key_pass]) if opts[:client_key_file]
479
- @@handler = Proc.new do |exception, attempt_number, total_delay|
497
+ @@handler = proc do |exception, attempt_number, total_delay|
480
498
  @@logger.warn "[Attempt #{attempt_number}] #{exception.class}: #{exception.message}; #{total_delay} seconds elapsed."
481
499
  end
482
500
  @@http_conn = case url_or_connection
@@ -484,7 +502,7 @@ module Dor
484
502
  Faraday.new(url: url_or_connection) do |faraday|
485
503
  faraday.response :logger if opts[:debug] # logs to STDOUT
486
504
  faraday.use Faraday::Response::RaiseError
487
- faraday.adapter :net_http_persistent # use Keep-Alive connections
505
+ faraday.adapter :net_http_persistent # use Keep-Alive connections
488
506
  faraday.options.params_encoder = Faraday::FlatParamsEncoder
489
507
  if opts.key? :timeout
490
508
  faraday.options.timeout = opts[:timeout]
@@ -505,8 +523,8 @@ module Dor
505
523
 
506
524
  def build_queued_uri(repository, opts = {})
507
525
  uri_string = "workflow_queue/all_queued?repository=#{repository}"
508
- uri_string << "&hours-ago=#{opts[:hours_ago]}" if opts[:hours_ago]
509
- uri_string << "&limit=#{opts[:limit]}" if opts[:limit]
526
+ uri_string += "&hours-ago=#{opts[:hours_ago]}" if opts[:hours_ago]
527
+ uri_string += "&limit=#{opts[:limit]}" if opts[:limit]
510
528
  uri_string
511
529
  end
512
530
 
@@ -514,10 +532,10 @@ module Dor
514
532
  doc = Nokogiri::XML(xml)
515
533
  doc.xpath('/workflows/workflow').collect do |wf_node|
516
534
  {
517
- :workflow => wf_node['name'],
518
- :step => wf_node['process'],
519
- :druid => wf_node['druid'],
520
- :lane_id => wf_node['laneId']
535
+ workflow: wf_node['name'],
536
+ step: wf_node['process'],
537
+ druid: wf_node['druid'],
538
+ lane_id: wf_node['laneId']
521
539
  }
522
540
  end
523
541
  end
@@ -535,7 +553,8 @@ module Dor
535
553
 
536
554
  def extract_object_count(resp)
537
555
  node = Nokogiri::XML(resp).at_xpath('/objects')
538
- raise Dor::WorkflowException.new('Unable to determine count from response') if node.nil?
556
+ raise Dor::WorkflowException, 'Unable to determine count from response' if node.nil?
557
+
539
558
  node['count'].to_i
540
559
  end
541
560
 
@@ -547,7 +566,7 @@ module Dor
547
566
  # @param [Hash] opts addtional headers options
548
567
  # @return [Object] response from method
549
568
  def workflow_resource_method(uri_string, meth = 'get', payload = '', opts = {})
550
- with_retries(:max_tries => 2, :handler => @@handler, :rescue => workflow_service_exceptions_to_catch) do |attempt|
569
+ with_retries(max_tries: 2, handler: @@handler, rescue: workflow_service_exceptions_to_catch) do |attempt|
551
570
  @@logger.info "[Attempt #{attempt}] #{meth} #{base_url}/#{uri_string}"
552
571
 
553
572
  response = send_workflow_resource_request(uri_string, meth, payload, opts)