Class: Rubino::API::Operations::Mode::UpdateOperation

Inherits:
Object
  • Object
show all
Defined in:
lib/rubino/api/operations/mode/update_operation.rb

Overview

PUT /v1/mode Body: { “mode”: “default” | “plan” | “yolo” }

Switches the active mode and emits the same ‘mode_changed` UI event the CLI fires on `/mode plan`, so any in-flight SSE stream notices.

Raises:

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.call(request) ⇒ Object



15
16
17
# File 'lib/rubino/api/operations/mode/update_operation.rb', line 15

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

Instance Method Details

#call(request) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/rubino/api/operations/mode/update_operation.rb', line 19

def call(request)
  attrs    = request.validate!(Schemas::UpdateMode)
  previous = Rubino::Modes.current

  begin
    Rubino::Modes.set(attrs[:mode])
  rescue ArgumentError => e
    # Modes.set already rejects unknowns; surface as a 422 the same
    # way validation errors do. The dry-schema enum below normally
    # catches this first; this is just defence in depth for an
    # alternate caller.
    raise ValidationError.new(e.message)
  end

  current = Rubino::Modes.current
  Rubino.ui&.mode_changed(current, previous: previous)

  [200, { mode: current, previous: previous, description: Rubino::Modes.description(current) }]
end