Class: RobotLab::RailsIntegration::Job
- Inherits:
-
ActiveJob::Base
- Object
- ActiveJob::Base
- RobotLab::RailsIntegration::Job
- Defined in:
- lib/robot_lab/rails_integration/job.rb
Overview
Base class for RobotLab background jobs.
Encapsulates the full robot-run lifecycle: robot class resolution, Turbo Stream callback wiring, thread-record persistence, and completion/error broadcasting. Suitable for fiber-safe execution under Solid Queue’s fiber mode (see issue #20 for SQ version details).
Class Method Summary collapse
-
.robot_class(klass = nil) ⇒ Object
Set or get the default robot class for this job subclass.
Instance Method Summary collapse
-
#perform(message:, robot_class: nil, thread_id: nil, **context) ⇒ RobotResult
Run a robot as a background job.
Class Method Details
.robot_class ⇒ Class? .robot_class(klass) ⇒ Class
Set or get the default robot class for this job subclass.
40 41 42 |
# File 'lib/robot_lab/rails_integration/job.rb', line 40 def self.robot_class(klass = nil) klass ? @robot_class = klass : @robot_class end |
Instance Method Details
#perform(message:, robot_class: nil, thread_id: nil, **context) ⇒ RobotResult
Run a robot as a background job.
When thread_id is provided the job:
-
Finds or creates a
RobotLabThreadrecord and updates its last-message fields -
Wires
TurboStreamCallbacksonto the robot (when turbo-rails is present) -
Persists the
RobotResulttoRobotLabResult -
Broadcasts a completion or error event via Turbo Streams
When thread_id is omitted the robot runs in a fire-and-forget mode —no persistence, no broadcasting, result returned directly.
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/robot_lab/rails_integration/job.rb', line 63 def perform(message:, robot_class: nil, thread_id: nil, **context) klass = resolve_robot_class(robot_class) thread = setup_thread(thread_id, ) robot = build_robot(klass, thread_id) result = robot.run(, **context) if thread persist_result(thread, result) broadcast_completion(thread_id) end result rescue StandardError => e broadcast_error(thread_id, e) if thread_id raise end |