Cómo convertir una matriz de hashes en una cadena legible por humanos en Ruby

CorePress2024-01-25  357

Tengo el siguiente resultado:

[{"name"=>"Content-Security-Policy", "value"=>"block-all-mixed-content", "decreasesSecurity"=>false, "increasesSecurity"=>true},
 {"name"=>"Strict-Transport-Security", "value"=>"max-age=31536000", "decreasesSecurity"=>false, "increasesSecurity"=>true},
 {"name"=>"X-Content-Type-Options", "value"=>"nosniff", "decreasesSecurity"=>false, "increasesSecurity"=>true},
 {"name"=>"X-Frame-Options", "value"=>"DENY", "decreasesSecurity"=>false, "increasesSecurity"=>true},
 {"name"=>"Content-Length", "value"=>"258", "decreasesSecurity"=>false, "increasesSecurity"=>false},
 {"name"=>"Retry-Count", "value"=>"0", "decreasesSecurity"=>false, "increasesSecurity"=>false},
 {"name"=>"Date", "value"=>"Sun, 28 Mar 2021 17:10:37 GMT", "decreasesSecurity"=>false, "increasesSecurity"=>false},
 {"name"=>"Content-Type", "value"=>"text/html", "decreasesSecurity"=>false, "increasesSecurity"=>false},
 {"name"=>"X-Xss-Protection", "value"=>"1", "decreasesSecurity"=>false, "increasesSecurity"=>true}]

Estos son encabezados de una respuesta HTTP y solo quiero convertirlos en un encabezado "legible por humanos". formato, como por ejemplo:

Content-Security-Policy: block-all-mixed-content
Strict-Transport-Security: max-age=xxxx


------------------------------------

O podrías iterar la matriz e imprimir cada línea, lo que necesitaría menos memoria que tu versión:

value["headers"].each { |h| puts "#{h['name']}: #{h['value']}"}



------------------------------------

Se me ocurrió lo siguiente como solución rápida:

puts value["headers"].map {|h| "#{h['name']}: #{h['value']}"}.join("\n")
# =>
Content-Security-Policy: block-all-mixed-content
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Content-Length: 258
Retry-Count: 0
Date: Sun, 28 Mar 2021 17:10:37 GMT
Content-Type: text/html
X-Xss-Protection: 1
Respondido

28 de marzo de 2021 a las 17:37

SalsaLewl

SalsaLewl

5,456

10

10 insignias de oro

47

47 insignias de plata

100

100 insignias de bronce

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare