Ruby 3 ha portato il pattern matching: con case/in fai match sulla struttura dei dati, non solo sul valore.

response = { status: "ok", data: { name: "Falcon 9", provider: "SpaceX" } }

case response
in { status: "ok", data: { name:, provider: } }
  puts "#{name} di #{provider}"
in { status: "error", message: }
  puts "Errore: #{message}"
else
  puts "Formato sconosciuto"
end

Nota la potenza: name: e provider: non solo verificano che le chiavi esistano, ma estraggono i valori in variabili locali. Puoi fare match su array, tipi (in Integer), condizioni (in n if n > 0).

È perfetto per gestire risposte di API con forme diverse: descrivi la forma che ti aspetti e Ruby ti dà i dati già spacchettati.