dor-workflow-service 2.4.0 → 2.5.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: 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)