Class: RubyReactor::SidekiqWorkers::Worker

Inherits:
Object
  • Object
show all
Includes:
Sidekiq::Worker
Defined in:
lib/ruby_reactor/sidekiq_workers/worker.rb

Overview

Sidekiq worker for executing RubyReactor reactors asynchronously with non-blocking retry capabilities

Instance Method Summary collapse

Instance Method Details

#perform(serialized_context, reactor_class_name = nil) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/ruby_reactor/sidekiq_workers/worker.rb', line 20

def perform(serialized_context, reactor_class_name = nil)
  context = ContextSerializer.deserialize(serialized_context)

  # If reactor_class_name is provided, use it to get the reactor class
  # This handles cases where the class can't be found via const_get
  if reactor_class_name && context.reactor_class.nil?
    begin
      context.reactor_class = Object.const_get(reactor_class_name)
    rescue NameError
      # If not found, try to find it in the current namespace
      # This is a fallback for test environments
      context.reactor_class = reactor_class_name.constantize if reactor_class_name.respond_to?(:constantize)
    end
  end

  # Mark that we're executing inline to prevent nested async calls
  context.inline_async_execution = true

  # Resume execution from the failed step
  executor = Executor.new(context.reactor_class, {}, context)
  executor.compensation_manager.undo_stack.concat(context.undo_stack)
  executor.resume_execution

  # Return the executor (which now has the result stored in it)
  executor
end