mirror of
https://github.com/sinatra/sinatra
synced 2023-03-27 23:18:01 -04:00
Merge branch 'master' of github.com:sinatra/sinatra
This commit is contained in:
commit
cc2f250205
1 changed files with 70 additions and 0 deletions
|
@ -146,6 +146,26 @@ Podés definir tus propias condiciones fácilmente:
|
|||
"Lo siento, perdiste."
|
||||
end
|
||||
|
||||
Si tu condición acepta más de un argumento, podés pasarle un arreglo. Al
|
||||
definir la condición puede resultarte conveniente utilizar el operador splat en
|
||||
la lista de parámetros:
|
||||
|
||||
set(:autorizar) do |*roles| # <- mirá el splat
|
||||
condition do
|
||||
unless sesion_iniciada? && roles.any? {|rol| usuario_actual.tiene_rol? rol }
|
||||
redirect "/iniciar_sesion/", 303
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
get "/mi/cuenta/", :autorizar => [:usuario, :administrador] do
|
||||
"Detalles de mi cuenta"
|
||||
end
|
||||
|
||||
get "/solo/administradores/", :autorizar => :administrador do
|
||||
"Únicamente para administradores!"
|
||||
end
|
||||
|
||||
=== Valores de Retorno
|
||||
|
||||
El valor de retorno de un bloque de ruta determina al menos el cuerpo de la
|
||||
|
@ -822,6 +842,56 @@ De manera similar, también podés asignar el código de estado y encabezados:
|
|||
También, al igual que +body+, tanto +status+ como +headers+ pueden utilizarse
|
||||
para obtener sus valores cuando no se les pasa argumentos.
|
||||
|
||||
=== Streaming De Respuestas
|
||||
|
||||
A veces vas a querer empezar a enviar la respuesta a pesar de que todavía no
|
||||
terminaste de generar su cuerpo. También es posible que, en algunos casos,
|
||||
quieras seguir enviando información hasta que el cliente cierre la conexión.
|
||||
Cuando esto ocurra, el +stream+ helper te va a ser de gran ayuda:
|
||||
|
||||
get '/' do
|
||||
stream do |out|
|
||||
out << "Esto va a ser legen -\n"
|
||||
sleep 0.5
|
||||
out << " (esperalo) \n"
|
||||
sleep 1
|
||||
out << "- dario!\n"
|
||||
end
|
||||
end
|
||||
|
||||
Podés implementar APIs de streaming,
|
||||
{Server-Sent Events}[http://dev.w3.org/html5/eventsource/] y puede ser usado
|
||||
como base para {WebSockets}[http://es.wikipedia.org/wiki/WebSockets]. También
|
||||
puede ser usado para incrementar el throughput si solo una parte del contenido
|
||||
depende de un recurso lento.
|
||||
|
||||
Hay que tener en cuenta que el comportamiento del streaming, especialmente el
|
||||
número de peticiones concurrentes, depende del servidor web utilizado para
|
||||
servir la aplicación. Puede que algunos servidores, como es el caso de
|
||||
WEBRick, no soporten streaming directamente, así el cuerpo de la respuesta será
|
||||
enviado completamente de una vez cuando el bloque pasado a +stream+ finalice su
|
||||
ejecución.
|
||||
|
||||
Cuando se pasa +false+ como parámetro, no se va a enviar el mensaje +close+ al
|
||||
objeto de stream. Queda en vos cerrarlo en el punto de ejecución que quieras.
|
||||
Nuevamente, hay que tener en cuenta que este comportamiento es posible solo en
|
||||
servidores que soporten eventos, como Thin o Rainbows. El resto de los
|
||||
servidores van a cerrar el stream de todos modos.
|
||||
|
||||
set :server, :thin
|
||||
conexiones = []
|
||||
|
||||
get '/' do
|
||||
# mantenemos abierto el stream
|
||||
stream(false) { |salida| conexiones << salida }
|
||||
end
|
||||
|
||||
post '/' do
|
||||
# escribimos a todos los streams abiertos
|
||||
conexiones.each { |salida| salida << params[:mensaje] << "\n" }
|
||||
"mensaje enviado"
|
||||
end
|
||||
|
||||
=== Log (Registro)
|
||||
|
||||
En el ámbito de la petición, el helper +logger+ (registrador) expone
|
||||
|
|
Loading…
Reference in a new issue