improves Spanish README

This commit is contained in:
Gabriel Andretta 2010-09-20 23:13:40 -03:00 committed by Konstantin Haase
parent 250b654003
commit 52d4311315
1 changed files with 37 additions and 42 deletions

View File

@ -1,7 +1,7 @@
= Sinatra = Sinatra
Sinatra es un DSL <em>(Lenguaje Específico de Dominio)</em> para crear Sinatra es un DSL para crear aplicaciones web rápidamente en Ruby con un mínimo
aplicaciones web rápidamente en Ruby con un mínimo esfuerzo: esfuerzo:
# miapp.rb # miapp.rb
require 'sinatra' require 'sinatra'
@ -9,7 +9,7 @@ aplicaciones web rápidamente en Ruby con un mínimo esfuerzo:
'Hola mundo!' 'Hola mundo!'
end end
Instalá la gem <em>(gema)</em> y ejecutá la aplicación con: Instalá la gem y ejecutá la aplicación con:
gem install sinatra gem install sinatra
ruby -rubygems miapp.rb ruby -rubygems miapp.rb
@ -18,8 +18,8 @@ Podés verla en: http://localhost:4567
== Rutas == Rutas
En Sinatra, una ruta es un método HTTP apareado con un patrón de una URL. En Sinatra, una ruta está compuesta por un método HTTP y un patrón de una URL.
Cada ruta es asociada con un bloque: Cada ruta se asocia con un bloque:
get '/' do get '/' do
.. mostrar algo .. .. mostrar algo ..
@ -45,7 +45,7 @@ través de el hash <tt>params</tt>:
get '/hola/:nombre' do get '/hola/:nombre' do
# coincide con "GET /hola/foo" y "GET /hola/bar" # coincide con "GET /hola/foo" y "GET /hola/bar"
# params[:nombre] es 'foo' o 'bar' respectivamente # params[:nombre] es 'foo' o 'bar'
"Hola #{params[:nombre]}!" "Hola #{params[:nombre]}!"
end end
@ -55,9 +55,8 @@ También podés acceder a los parámetros nombrados usando parámetros de bloque
"Hola #{n}!" "Hola #{n}!"
end end
Los patrones de ruta también pueden incluir parámetros splat o wildcard Los patrones de ruta también pueden incluir parámetros splat (o wildcard),
<em>(plaf o comodín)</em>, accesibles a través del arreglo accesibles a través del arreglo <tt>params[:splat]</tt>.
<tt>params[:splat]</tt>.
get '/decir/*/al/*' do get '/decir/*/al/*' do
# coincide con /decir/hola/al/mundo # coincide con /decir/hola/al/mundo
@ -69,7 +68,7 @@ Los patrones de ruta también pueden incluir parámetros splat o wildcard
params[:splat] # => ["path/al/archivo", "xml"] params[:splat] # => ["path/al/archivo", "xml"]
end end
Búsqueda de rutas con Expresiones Regulares: Rutas con Expresiones Regulares:
get %r{/hola/([\w]+)} do get %r{/hola/([\w]+)} do
"Hola, #{params[:captures].first}!" "Hola, #{params[:captures].first}!"
@ -82,10 +81,10 @@ O con un parámetro de bloque:
end end
Las rutas pueden incluir una variedad de condiciones de selección, como por Las rutas pueden incluir una variedad de condiciones de selección, como por
ejemplo el user agent <em>(agente de usuario)</em>: ejemplo el user agent:
get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
"Estás usando la versión #{params[:agent][0]} de Songbird" "Estás usando la versión de Songbird #{params[:agent][0]}"
end end
get '/foo' do get '/foo' do
@ -106,16 +105,15 @@ ejemplo, el archivo <tt>./public/css/style.css</tt> se accede a través de
== Vistas / Plantillas == Vistas / Plantillas
Se asume que las plantillas <em>(templates)</em> están ubicadas directamente Se asume que las plantillas están ubicadas directamente bajo el directorio
bajo el directorio <tt>./views</tt>. Para usar un directorio de vistas <tt>./views</tt>. Para usar un directorio de vistas diferente:
<em>(views)</em> diferente:
set :views, File.dirname(__FILE__) + '/plantillas' set :views, File.dirname(__FILE__) + '/plantillas'
Es importante acordarse que siempre tenés que referenciar a las plantillas con Es importante acordarse que siempre tenés que referenciar a las plantillas con
símbolos, incluso cuando se encuentran en un subdirectorio (en este caso tenés símbolos, incluso cuando se encuentran en un subdirectorio (en este caso tenés
que usar <tt>:'subdir/plantilla'</tt>). Los métodos de renderización van a que usar <tt>:'subdir/plantilla'</tt>). Los métodos de renderización van a
renderizar directamente cualquier string que reciban como argumento. renderizar directamente cualquier string que se les pase como argumento.
=== Plantillas Haml === Plantillas Haml
@ -129,7 +127,6 @@ La gem/librería haml es necesaria para para renderizar plantillas HAML:
end end
Renderiza <tt>./views/index.haml</tt>. Renderiza <tt>./views/index.haml</tt>.
{Haml's options}[http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#options]
Las {opciones de Haml}[http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#options] Las {opciones de Haml}[http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#options]
pueden ser ajustadas globalmente a través de las configuraciones de Sinatra, pueden ser ajustadas globalmente a través de las configuraciones de Sinatra,
@ -231,15 +228,15 @@ Renderiza el template contenido en el string.
=== Accediendo a Variables en Plantillas === Accediendo a Variables en Plantillas
Las plantillas son evaluadas dentro del mismo contexto que los manejadores de Las plantillas son evaluadas dentro del mismo contexto que los manejadores de
ruta <em>(route handlers)</em>. Las variables de instancia asignadas en los ruta. Las variables de instancia asignadas en los manejadores de ruta son
manejadores de ruta son accesibles directamente por las plantillas: accesibles directamente por las plantillas:
get '/:id' do get '/:id' do
@foo = Foo.find(params[:id]) @foo = Foo.find(params[:id])
haml '%h1= @foo.nombre' haml '%h1= @foo.nombre'
end end
O es posible especificar un Hash explícito de variables locales: O es posible especificar un Hash de variables locales explícitamente:
get '/:id' do get '/:id' do
foo = Foo.find(params[:id]) foo = Foo.find(params[:id])
@ -299,7 +296,7 @@ una plantilla es renderizada. Podés desactivar los layouts pasando
haml :index, :layout => !request.xhr? haml :index, :layout => !request.xhr?
end end
== Ayudantes <em>(Helpers)</em> == Ayudantes
Usá el método top-level <tt>helpers</tt> para definir métodos ayudantes que Usá el método top-level <tt>helpers</tt> para definir métodos ayudantes que
pueden ser utilizados dentro de los manejadores de rutas y las plantillas: pueden ser utilizados dentro de los manejadores de rutas y las plantillas:
@ -314,9 +311,9 @@ pueden ser utilizados dentro de los manejadores de rutas y las plantillas:
bar(params[:nombre]) bar(params[:nombre])
end end
== Filtros <em>(Filters)</em> == Filtros
Los Before Filters son evaluados antes de cada petición dentro del contexto de Los filtros before son evaluados antes de cada petición dentro del contexto de
la petición y pueden modificar la petición y la respuesta. Las variables de la petición y pueden modificar la petición y la respuesta. Las variables de
instancia asignadas en los filtros son accesibles por las rutas y las instancia asignadas en los filtros son accesibles por las rutas y las
plantillas: plantillas:
@ -331,10 +328,10 @@ plantillas:
params[:splat] #=> 'bar/baz' params[:splat] #=> 'bar/baz'
end end
Los After Filter son evaluados después de cada petición dentro del contexto de Los filtros After son evaluados después de cada petición dentro del contexto de
la petición y también pueden modificar la petición y la respuesta. Las la petición y también pueden modificar la petición y la respuesta. Las
variables de instancia asignadas en before filters y rutas son accesibles por variables de instancia asignadas en los filtros before y rutas son accesibles
los after filters: por los filtros after:
after do after do
puts response.status puts response.status
@ -352,7 +349,7 @@ patrón:
session[:ultimo_slug] = slug session[:ultimo_slug] = slug
end end
== Interrumpiendo <em>(Halting)</em> == Interrupción
Para detener inmediatamente una petición dentro de un filtro o una ruta usá: Para detener inmediatamente una petición dentro de un filtro o una ruta usá:
@ -374,7 +371,7 @@ Con encabezados ...
halt 402, { 'Content-Type' => 'text/plain' }, 'venganza' halt 402, { 'Content-Type' => 'text/plain' }, 'venganza'
== Pasando == Paso
Una ruta puede pasarle el procesamiento a la siguiente ruta que coincida con Una ruta puede pasarle el procesamiento a la siguiente ruta que coincida con
la petición usando <tt>pass</tt>: la petición usando <tt>pass</tt>:
@ -415,7 +412,7 @@ Ejecutar cuando el entorno es <tt>:production</tt> o <tt>:test</tt>:
== Manejo de errores == Manejo de errores
Los manejadores de errores se ejecutan dentro del mismo contexto que las rutas Los manejadores de errores se ejecutan dentro del mismo contexto que las rutas
y los before filters, lo que significa que podés usar, por ejemplo, y los filtros before, lo que significa que podés usar, por ejemplo,
<tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt>, etc. <tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt>, etc.
=== No encontrado <em>(Not Found)</em> === No encontrado <em>(Not Found)</em>
@ -507,9 +504,9 @@ método top-level +use+:
end end
Las semánticas de +use+ son idénticas a las definidas para el DSL Las semánticas de +use+ son idénticas a las definidas para el DSL
Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html] Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html] (más
(más frecuentemente usadas desde archivos rackup). Por ejemplo, el método frecuentemente usado desde archivos rackup). Por ejemplo, el método +use+
+use+ acepta argumentos múltiples/variables así como bloques: acepta argumentos múltiples/variables así como bloques:
use Rack::Auth::Basic do |nombre_de_usuario, password| use Rack::Auth::Basic do |nombre_de_usuario, password|
nombre_de_usuario == 'admin' && password == 'secreto' nombre_de_usuario == 'admin' && password == 'secreto'
@ -520,11 +517,11 @@ debugging, enrutamiento URL, autenticación, y manejo de sesiones. Sinatra
usa muchos de estos componentes automáticamente de acuerdo a su configuración usa muchos de estos componentes automáticamente de acuerdo a su configuración
para que típicamente no tengas que usarlas (con +use+) explícitamente. para que típicamente no tengas que usarlas (con +use+) explícitamente.
== Testing == Pruebas
Los test para las aplicaciones Sinatra pueden ser escritos utilizando Las pruebas para las aplicaciones Sinatra pueden ser escritas utilizando
cualquier framework o librería de testing basada en Rack. Se recomienda cualquier framework o librería de pruebas basada en Rack. Se recomienda usar
usar {Rack::Test}[http://gitrdoc.com/brynary/rack-test]: {Rack::Test}[http://gitrdoc.com/brynary/rack-test]:
require 'mi_app_sinatra' require 'mi_app_sinatra'
require 'rack/test' require 'rack/test'
@ -536,14 +533,14 @@ usar {Rack::Test}[http://gitrdoc.com/brynary/rack-test]:
Sinatra::Application Sinatra::Application
end end
def test_por_defecto def test_mi_defecto
get '/' get '/'
assert_equal 'Hola Mundo!', last_response.body assert_equal 'Hola Mundo!', last_response.body
end end
def test_con_parametros def test_con_parametros
get '/saludar', :name => 'Franco' get '/saludar', :name => 'Franco'
assert_equal 'Hola Franco!', last_response.body assert_equal 'Hola Frank!', last_response.body
end end
def test_con_entorno_rack def test_con_entorno_rack
@ -566,7 +563,6 @@ para micro-aplicaciones (por ejemplo, un único archivo de aplicación, los
directorios ./public y ./views, logging, página con detalles de excepción, directorios ./public y ./views, logging, página con detalles de excepción,
etc.). Ahí es donde Sinatra::Base entra en el juego: etc.). Ahí es donde Sinatra::Base entra en el juego:
require 'sinatra/base' require 'sinatra/base'
class MiApp < Sinatra::Base class MiApp < Sinatra::Base
@ -656,8 +652,7 @@ Para actualizar el código fuente de Sinatra en el futuro:
adicional, noticias, y enlaces a otros recursos. adicional, noticias, y enlaces a otros recursos.
* {Contribuyendo}[http://www.sinatrarb.com/contributing] - ¿Encontraste un * {Contribuyendo}[http://www.sinatrarb.com/contributing] - ¿Encontraste un
error?. ¿Necesitás ayuda?. ¿Tenés un parche?. error?. ¿Necesitás ayuda?. ¿Tenés un parche?.
* {Lighthouse}[http://sinatra.lighthouseapp.com] - Seguimiento de problemas y * {Issue tracker}[http://sinatra.lighthouseapp.com]
planeamiento de lanzamientos.
* {Twitter}[http://twitter.com/sinatra] * {Twitter}[http://twitter.com/sinatra]
* {Lista de Correo}[http://groups.google.com/group/sinatrarb/topics] * {Lista de Correo}[http://groups.google.com/group/sinatrarb/topics]
* {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] en http://freenode.net * {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] en http://freenode.net