Class: Rubino::API::Operations::Clarifications::DecideOperation

Inherits:
Object
  • Object
show all
Defined in:
lib/rubino/api/operations/clarifications/decide_operation.rb

Overview

POST /v1/runs/:run_id/clarifications/:clarify_id Delivers the user’s response to a clarification gate that paused the run, using the same in-process GateRegistry as approvals.

Raises:

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(repository: nil, registry: nil) ⇒ DecideOperation

Accepts an alternate run repository and gate registry for tests.



20
21
22
23
# File 'lib/rubino/api/operations/clarifications/decide_operation.rb', line 20

def initialize(repository: nil, registry: nil)
  @repository = repository || ::Rubino::Run::Repository.new
  @registry = registry || ::Rubino::Run::GateRegistry
end

Class Method Details

.call(request) ⇒ Object



15
16
17
# File 'lib/rubino/api/operations/clarifications/decide_operation.rb', line 15

def self.call(request)
  new.call(request)
end

Instance Method Details

#call(request) ⇒ Object

Raises:



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/rubino/api/operations/clarifications/decide_operation.rb', line 25

def call(request)
  run_id = request.params.fetch("run_id")
  clarify_id = request.params.fetch("clarify_id")

  raise NotFoundError.new("run", run_id) unless @repository.find(run_id)

  attrs = request.validate!(Schemas::DecideClarification)
  gate = @registry.fetch(run_id)
  raise ConflictError, "no pending decisions for run #{run_id}" if gate.nil?

  status = gate.decide(clarify_id, attrs[:response])
  raise NotFoundError.new("clarification", clarify_id) if status == :unknown

  [200, { clarify_id: clarify_id, accepted: true }]
end