class RailsWorkflow::ErrorResolver

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

Attributes

error[RW]

Public Class Methods

new(error) click to toggle source
# File lib/rails_workflow/error_resolver.rb, line 15
def initialize(error)
  @error = error
end
retry(error) click to toggle source
# File lib/rails_workflow/error_resolver.rb, line 11
def self.retry(error)
  new(error).retry
end

Public Instance Methods

config() click to toggle source
# File lib/rails_workflow/error_resolver.rb, line 48
def config
  RailsWorkflow.config
end
dependency_resolver() click to toggle source
# File lib/rails_workflow/error_resolver.rb, line 64
def dependency_resolver
  config.dependency_resolver.new(process)
end
fix_status(subject) click to toggle source
# 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_builder() click to toggle source
# File lib/rails_workflow/error_resolver.rb, line 60
def operation_builder
  config.operation_builder.new(*data[:args]).tap { data[:args] = nil }
end
operation_runner() click to toggle source
# File lib/rails_workflow/error_resolver.rb, line 56
def operation_runner
  config.operation_runner.new(operation)
end
prepared_target() click to toggle source
# 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_manager() click to toggle source
# File lib/rails_workflow/error_resolver.rb, line 52
def process_manager
  config.process_manager.new(process)
end
process_runner() click to toggle source
# File lib/rails_workflow/error_resolver.rb, line 68
def process_runner
  config.process_runner.new(process)
end
retry() click to toggle source
# 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_process() click to toggle source
# 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