Class: RubyReactor::SidekiqWorkers::Worker
- Inherits:
-
Object
- Object
- RubyReactor::SidekiqWorkers::Worker
- 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 |