module WorkerTools::Basics

Public Class Methods

read_wrappers() click to toggle source
# File lib/worker_tools/basics.rb, line 15
def self.read_wrappers
  @wrappers || []
end
wrappers(*args) click to toggle source
# File lib/worker_tools/basics.rb, line 11
def self.wrappers(*args)
  @wrappers ||= args.flatten
end

Public Instance Methods

create_model_if_not_available() click to toggle source
# File lib/worker_tools/basics.rb, line 70
def create_model_if_not_available
  false
end
finalize() click to toggle source
# File lib/worker_tools/basics.rb, line 63
def finalize
  model.update!(
    state: 'complete',
    information: information
  )
end
model() click to toggle source
# File lib/worker_tools/basics.rb, line 74
def model
  @model ||= find_model
end
model_class() click to toggle source
# File lib/worker_tools/basics.rb, line 20
def model_class
  # Ex: Import
  raise "model_class has to be defined in #{self}"
end
model_kind() click to toggle source
# File lib/worker_tools/basics.rb, line 25
def model_kind
  # Ex: 'sdom'
  raise "model_kind has to be defined in #{self}"
end
perform(model_id = nil) click to toggle source
# File lib/worker_tools/basics.rb, line 34
def perform(model_id = nil)
  @model_id = model_id
  with_wrappers(wrapper_methods) do
    run
  end
end
run() click to toggle source
# File lib/worker_tools/basics.rb, line 30
def run
  raise "run has to be defined in #{self}"
end
with_wrapper_basics(&block) click to toggle source
# File lib/worker_tools/basics.rb, line 50
def with_wrapper_basics(&block)
  block.yield
  finalize
# this time we do want to catch Exception to attempt to handle some of the
# critical errors.
# rubocop:disable Lint/RescueException
rescue Exception
  # rubocop:enable Lint/RescueException
  model.state = 'failed'
  model.save!(validate: false)
  raise
end
with_wrappers(wrapper_symbols) { || ... } click to toggle source
# File lib/worker_tools/basics.rb, line 78
def with_wrappers(wrapper_symbols, &block)
  return yield if wrapper_symbols.blank?

  current_wrapper_symbol = wrapper_symbols.shift
  send(current_wrapper_symbol) { with_wrappers(wrapper_symbols, &block) }
end
wrapper_methods() click to toggle source
# File lib/worker_tools/basics.rb, line 41
def wrapper_methods
  self.class.read_wrappers.map do |wrapper|
    symbolized_method = "with_wrapper_#{wrapper}".to_sym
    raise "Missing wrapper #{wrapper}" unless respond_to?(symbolized_method)

    symbolized_method
  end
end

Private Instance Methods

find_model() click to toggle source
# File lib/worker_tools/basics.rb, line 87
def find_model
  @model_id ||= nil
  return @model_id if @model_id.is_a?(model_class)
  return model_class.find(@model_id) if @model_id
  raise 'Model not available' unless create_model_if_not_available

  t = model_class.new
  t.kind = model_kind if t.respond_to?(:kind=)
  t.save!(validate: false)
  t
end