Class: RailsWorkflow::ErrorResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_workflow/error_resolver.rb

Overview

Default error resolver. Can be changed in configuration. Manages errors processing

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(error) ⇒ ErrorResolver

Returns a new instance of ErrorResolver.



15
16
17
# File 'lib/rails_workflow/error_resolver.rb', line 15

def initialize(error)
  @error = error
end

Instance Attribute Details

#errorObject

Returns the value of attribute error.



7
8
9
# File 'lib/rails_workflow/error_resolver.rb', line 7

def error
  @error
end

Class Method Details

.retry(error) ⇒ Object



11
12
13
# File 'lib/rails_workflow/error_resolver.rb', line 11

def self.retry(error)
  new(error).retry
end

Instance Method Details

#configObject



48
49
50
# File 'lib/rails_workflow/error_resolver.rb', line 48

def config
  RailsWorkflow.config
end

#dependency_resolverObject



64
65
66
# File 'lib/rails_workflow/error_resolver.rb', line 64

def dependency_resolver
  config.dependency_resolver.new(process)
end

#fix_status(subject) ⇒ Object



26
27
28
29
30
# File 'lib/rails_workflow/error_resolver.rb', line 26

def fix_status(subject)
  subject.status = Status::IN_PROGRESS
  subject.save!
  fix_status(subject.parent) if subject.parent.present?
end

#operation_builderObject



60
61
62
# File 'lib/rails_workflow/error_resolver.rb', line 60

def operation_builder
  config.operation_builder.new(*data[:args]).tap { data[:args] = nil }
end

#operation_runnerObject



56
57
58
# File 'lib/rails_workflow/error_resolver.rb', line 56

def operation_runner
  config.operation_runner.new(operation)
end

#prepared_targetObject



32
33
34
35
36
37
38
# File 'lib/rails_workflow/error_resolver.rb', line 32

def prepared_target
  return operation_runner if target == 'operation_runner'
  return operation_builder if target == 'operation_builder'
  return dependency_resolver if target == 'dependency_resolver'
  return process_manager if target == 'process_manager'
  target
end

#process_managerObject



52
53
54
# File 'lib/rails_workflow/error_resolver.rb', line 52

def process_manager
  config.process_manager.new(process)
end

#process_runnerObject



68
69
70
# File 'lib/rails_workflow/error_resolver.rb', line 68

def process_runner
  config.process_runner.new(process)
end

#retryObject



19
20
21
22
23
24
# File 'lib/rails_workflow/error_resolver.rb', line 19

def retry
  update_attribute(:resolved, true)
  fix_status(error.parent)
  prepared_target.send(data[:method], *data[:args])
  try_restart_process unless target == 'process_manager'
end

#try_restart_processObject



40
41
42
43
44
45
46
# File 'lib/rails_workflow/error_resolver.rb', line 40

def try_restart_process
  return if process.nil? || process.status == Status::DONE
  process.update_attribute(:status, Status::IN_PROGRESS)

  process.reload
  process_runner.start if can_restart_process?
end