README.es.md in sinatra-1.4.5 vs README.es.md in sinatra-1.4.6
- old
+ new
@@ -73,38 +73,38 @@
través del hash `params`:
``` ruby
get '/hola/:nombre' do
# coincide con "GET /hola/foo" y "GET /hola/bar"
- # params[:nombre] es 'foo' o 'bar'
- "Hola #{params[:nombre]}!"
+ # params['nombre'] es 'foo' o 'bar'
+ "Hola #{params['nombre']}!"
end
```
También puede acceder a los parámetros nombrados usando parámetros de bloque:
``` ruby
get '/hola/:nombre' do |n|
# coincide con "GET /hola/foo" y "GET /hola/bar"
- # params[:nombre] es 'foo' o 'bar'
- # n almacena params[:nombre]
+ # params['nombre'] es 'foo' o 'bar'
+ # n almacena params['nombre']
"Hola #{n}!"
end
```
Los patrones de ruta también pueden incluir parámetros splat (o wildcard),
-accesibles a través del arreglo `params[:splat]`:
+accesibles a través del arreglo `params['splat']`:
``` ruby
get '/decir/*/al/*' do
# coincide con /decir/hola/al/mundo
- params[:splat] # => ["hola", "mundo"]
+ params['splat'] # => ["hola", "mundo"]
end
get '/descargar/*.*' do
# coincide con /descargar/path/al/archivo.xml
- params[:splat] # => ["path/al/archivo", "xml"]
+ params['splat'] # => ["path/al/archivo", "xml"]
end
```
O, con parámetros de bloque:
@@ -115,12 +115,12 @@
```
Rutas con Expresiones Regulares:
``` ruby
-get %r{/hola/([\w]+)} do
- "Hola, #{params[:captures].first}!"
+get /\A\/hola\/([\w]+)\z/ do
+ "Hola, #{params['captures'].first}!"
end
```
O con un parámetro de bloque:
@@ -148,15 +148,15 @@
Las rutas pueden incluir una variedad de condiciones de selección, como por
ejemplo el user agent:
``` ruby
get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
- "Estás usando la versión de Songbird #{params[:agent][0]}"
+ "Estás usando la versión de Songbird #{params['agent'][0]}"
end
get '/foo' do
- # Coincide con browsers que no sean songbird
+ # Coincide con navegadores que no sean songbird
end
```
Otras condiciones disponibles son `host_name` y `provides`:
@@ -334,12 +334,12 @@
get '/' do
erb :index, :layout => :post
end
```
-Renderiza `views/index.erb` embebido en `views/post.erb` (por
-defecto, la plantilla `:index` es embebida en `views/layout.erb` siempre y
+Renderiza `views/index.erb` incrustado en `views/post.erb` (por
+defecto, la plantilla `:index` es incrustada en `views/layout.erb` siempre y
cuando este último archivo exista).
Cualquier opción que Sinatra no entienda le será pasada al motor de renderizado
de la plantilla:
@@ -481,11 +481,11 @@
<table>
<tr>
<td>Dependencias</td>
<td>
- <a href="http://builder.rubyforge.org/" title="builder">builder</a>
+ <a href="https://github.com/jimweirich/builder" title="builder">builder</a>
</td>
</tr>
<tr>
<td>Extensiones de Archivo</td>
<td><tt>.builder</tt></td>
@@ -494,11 +494,11 @@
<td>Ejemplo</td>
<td><tt>builder { |xml| xml.em "hola" }</tt></td>
</tr>
</table>
-Además, acepta un bloque con la definición de la plantilla (ver el ejemplo).
+Además, acepta un bloque con la definición de la plantilla (ver ejemplo).
### Plantillas Nokogiri
<table>
<tr>
@@ -513,11 +513,11 @@
<td>Ejemplo</td>
<td><tt>nokogiri { |xml| xml.em "hola" }</tt></td>
</tr>
</table>
-Además, acepta un bloque con la definición de la plantilla (ver el ejemplo).
+Además, acepta un bloque con la definición de la plantilla (ver ejemplo).
### Plantillas Sass
<table>
<tr>
@@ -595,12 +595,12 @@
<td>Dependencias</td>
<td>
<a href="https://github.com/rtomayko/rdiscount" title="RDiscount">RDiscount</a>,
<a href="https://github.com/vmg/redcarpet" title="RedCarpet">RedCarpet</a>,
<a href="http://deveiate.org/projects/BlueCloth" title="BlueCloth">BlueCloth</a>,
- <a href="http://kramdown.rubyforge.org/" title="kramdown">kramdown</a> o
- <a href="http://maruku.rubyforge.org/" title="maruku">maruku</a>
+ <a href="http://kramdown.gettalong.org/" title="kramdown">kramdown</a> o
+ <a href="https://github.com/bhollis/maruku" title="maruku">maruku</a>
</td>
</tr>
<tr>
<td>Extensiones de Archivo</td>
<td><tt>.markdown</tt>, <tt>.mkd</tt> y <tt>.md</tt></td>
@@ -669,11 +669,11 @@
### Plantillas RDoc
<table>
<tr>
<td>Dependencias</td>
- <td><a href="http://rdoc.rubyforge.org/" title="RDoc">RDoc</a></td>
+ <td><a href="http://rdoc.sourceforge.net/" title="RDoc">RDoc</a></td>
</tr>
<tr>
<td>Extensiones de Archivo</td>
<td><tt>.rdoc</tt></td>
</tr>
@@ -705,11 +705,11 @@
### Plantillas Radius
<table>
<tr>
<td>Dependencias</td>
- <td><a href="http://radius.rubyforge.org/" title="Radius">Radius</a></td>
+ <td><a href="https://github.com/jlong/radius" title="Radius">Radius</a></td>
</tr>
<tr>
<td>Extensiones de Archivo</td>
<td><tt>.radius</tt></td>
</tr>
@@ -717,11 +717,11 @@
<td>Ejemplo</td>
<td><tt>radius :index, :locals => { :clave => 'valor' }</tt></td>
</tr>
</table>
-Desde que no se puede utilisar métodos de Ruby (excepto por `yield`) de una
+Desde que no se puede utilizar métodos de Ruby (excepto por `yield`) de una
plantilla Radius, casi siempre se necesita pasar locales.
### Plantillas Markaby
<table>
@@ -737,11 +737,11 @@
<td>Ejemplo</td>
<td><tt>markaby { h1 "Bienvenido!" }</tt></td>
</tr>
</table>
-Además, acepta un bloque con la definición de la plantilla (ver el ejemplo).
+Además, acepta un bloque con la definición de la plantilla (ver ejemplo).
### Plantillas RABL
<table>
<tr>
@@ -806,11 +806,11 @@
%h1 Hola Desde Haml!
%p= creole(:saludos)
```
Como no podés utilizar Ruby desde Creole, no podés usar layouts escritos en
-Creloe. De todos modos, es posible usar un motor de renderizado para el layout
+Creole. De todos modos, es posible usar un motor de renderizado para el layout
distinto al de la plantilla pasando la opción `:layout_engine`.
### Plantillas CoffeeScript
<table>
@@ -881,11 +881,11 @@
</tt>
</td>
</tr>
</table>
-El contenido de La plantilla se evalúa como código Ruby, y la variable `json` es convertida a JSON mediante `#to_json`.
+El contenido de la plantilla se evalúa como código Ruby, y la variable `json` es convertida a JSON mediante `#to_json`.
``` ruby
json = { :foo => 'bar' }
json[:baz] = key
```
@@ -932,20 +932,20 @@
ruta. Las variables de instancia asignadas en los manejadores de ruta son
accesibles directamente por las plantillas:
``` ruby
get '/:id' do
- @foo = Foo.find(params[:id])
+ @foo = Foo.find(params['id'])
haml '%h1= @foo.nombre'
end
```
O es posible especificar un Hash de variables locales explícitamente:
``` ruby
get '/:id' do
- foo = Foo.find(params[:id])
+ foo = Foo.find(params['id'])
haml '%h1= bar.nombre', :locals => { :bar => foo }
end
```
Esto es usado típicamente cuando se renderizan plantillas como parciales desde
@@ -972,11 +972,11 @@
@@ index
%div.titulo Hola mundo!!!!!
```
NOTA: únicamente las plantillas inline definidas en el archivo fuente que
-requiere sinatra son cargadas automáticamente. Llamá `enable
+requiere Sinatra son cargadas automáticamente. Llamá `enable
:inline_templates` explícitamente si tenés plantillas inline en otros
archivos fuente.
### Plantillas Nombradas
@@ -1050,11 +1050,11 @@
request.path_info = '/foo/bar/baz'
end
get '/foo/*' do
@nota #=> 'Hey!'
- params[:splat] #=> 'bar/baz'
+ params['splat'] #=> 'bar/baz'
end
```
Los filtros `after` son evaluados después de cada petición dentro del mismo
contexto y también pueden modificar la petición y la respuesta. Las variables
@@ -1108,11 +1108,11 @@
"#{nombre}bar"
end
end
get '/:nombre' do
- bar(params[:nombre])
+ bar(params['nombre'])
end
```
Por cuestiones organizativas, puede resultar conveniente organizar los métodos
ayudantes en distintos módulos:
@@ -1143,11 +1143,11 @@
get '/' do
"valor = " << session[:valor].inspect
end
get '/:valor' do
- session[:valor] = params[:valor]
+ session[:valor] = params['valor']
end
```
Tené en cuenta que `enable :sessions` guarda todos los datos en una
cookie, lo cual no es siempre deseable (guardar muchos datos va a incrementar
@@ -1161,11 +1161,11 @@
get '/' do
"valor = " << session[:valor].inspect
end
get '/:valor' do
- session[:valor] = params[:valor]
+ session[:valor] = params['valor']
end
```
Para incrementar la seguridad, los datos de la sesión almacenados en
la cookie son firmados con un secreto de sesión. Este secreto, es
@@ -1228,11 +1228,11 @@
Una ruta puede pasarle el procesamiento a la siguiente ruta que coincida con
la petición usando `pass`:
``` ruby
get '/adivina/:quien' do
- pass unless params[:quien] == 'Franco'
+ pass unless params['quien'] == 'Franco'
'Adivinaste!'
end
get '/adivina/*' do
'Erraste!'
@@ -1261,11 +1261,11 @@
Notá que en el ejemplo anterior, es conveniente mover `"bar"` a un
helper, y llamarlo desde `/foo` y `/bar`. Así, vas a simplificar
las pruebas y a mejorar el rendimiento.
Si querés que la petición se envíe a la misma instancia de la aplicación en
-lugar de a otra, usá `call!` en lugar de `call`.
+lugar de otra, usá `call!` en lugar de `call`.
En la especificación de Rack podés encontrar más información sobre
`call`.
### Asignando el Código de Estado, los Encabezados y el Cuerpo de una Respuesta
@@ -1307,11 +1307,11 @@
### 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:
+Cuando esto ocurra, el helper `stream` te va a ser de gran ayuda:
``` ruby
get '/' do
stream do |out|
out << "Esto va a ser legen -\n"
@@ -1329,11 +1329,11 @@
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
+alojar 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. Si estás usando Shotgun, el streaming no va a funcionar.
Cuando se pasa `keep_open` como parámetro, no se va a enviar el mensaje
@@ -1351,11 +1351,11 @@
stream(:keep_open) { |salida| conexiones << salida }
end
post '/' do
# escribimos a todos los streams abiertos
- conexiones.each { |salida| salida << params[:mensaje] << "\n" }
+ conexiones.each { |salida| salida << params['mensaje'] << "\n" }
"mensaje enviado"
end
```
### Log (Registro)
@@ -1510,17 +1510,17 @@
expires 500, :public, :must_revalidate
end
```
Para usar cachés adecuadamente, deberías considerar usar `etag` o
-`last_modified`. Es recomendable que llames a estos helpers *antes* de hacer
+`last_modified`. Es recomendable que llames a estos asistentes *antes* de hacer
cualquier trabajo pesado, ya que van a enviar la respuesta inmediatamente si
el cliente ya tiene la versión actual en su caché:
``` ruby
get '/articulo/:id' do
- @articulo = Articulo.find params[:id]
+ @articulo = Articulo.find params['id']
last_modified @articulo.updated_at
etag @articulo.sha1
erb :articulo
end
```
@@ -1555,12 +1555,12 @@
para más detalles).
De acuerdo con la RFC 2616 tu aplicación debería comportarse diferente si a las
cabeceras If-Match o If-None-Match se le asigna el valor `*` cuando el
recurso solicitado ya existe. Sinatra asume para peticiones seguras (como get)
-e idempotentes (como put) que el recurso existe, mientras que para el resto
-(como post) asume que no. Podes cambiar este comportamiento con la opción
+y potentes (como put) que el recurso existe, mientras que para el resto
+(como post) asume que no. Podés cambiar este comportamiento con la opción
`:new_resource`:
``` ruby
get '/crear' do
etag '', :new_resource => true
@@ -1614,11 +1614,11 @@
[status]
código de estado devuelto. Resulta útil al enviar un archivo estático como una
página de error.
Si el Rack handler lo soporta, se intentará no transmitir directamente desde el
-proceso de Ruby. Si usás este método, Sinatra se va a encargar automáticamente
+proceso de Ruby. Si usás este método, Sinatra se va a encargar automáticamente de las
peticiones de rango.
### Accediendo al objeto de la petición
El objeto de la petición entrante puede ser accedido desde el nivel de la
@@ -1645,11 +1645,11 @@
request.get? # true (hay métodos análogos para los otros verbos)
request.form_data? # false
request["UNA_CABECERA"] # valor de la cabecera UNA_CABECERA
request.referrer # la referencia del cliente o '/'
request.user_agent # user agent (usado por la condición :agent)
- request.cookies # hash de las cookies del browser
+ request.cookies # hash de las cookies del navegador
request.xhr? # es una petición ajax?
request.url # "http://ejemplo.com/ejemplo/foo"
request.path # "/ejemplo/foo"
request.ip # dirección IP del cliente
request.secure? # false (sería true sobre ssl)
@@ -1679,11 +1679,11 @@
end
```
### Archivos Adjuntos
-Podés usar el método helper `attachment` para indicarle al navegador que
+Podés usar el helper `attachment` para indicarle al navegador que
almacene la respuesta en el disco en lugar de mostrarla en pantalla:
``` ruby
get '/' do
attachment
@@ -1781,11 +1781,11 @@
Notá que `find_template` no verifica si un archivo existe realmente, sino
que llama al bloque que recibe para cada path posible. Esto no representa un
problema de rendimiento debido a que `render` va a usar `break` ni bien
encuentre un archivo que exista. Además, las ubicaciones de las plantillas (y
su contenido) se cachean cuando no estás en el modo de desarrollo. Es bueno
-tener en cuenta lo anteiror si escribís un método medio loco.
+tener en cuenta lo anterior si escribís un método extraño.
## Configuración
Ejecutar una vez, en el inicio, en cualquier entorno:
@@ -1842,11 +1842,11 @@
### Configurando la Protección de Ataques
Sinatra usa [Rack::Protection](https://github.com/rkh/rack-protection#readme)
para defender a tu aplicación de los ataques más comunes. Si por algún motivo,
querés desactivar esta funcionalidad, podés hacerlo como se indica a
-continuación (tené en cuenta que tu aplicación va a quedar expuesta a un
+continuación (ten en cuenta que tu aplicación va a quedar expuesta a un
montón de vulnerabilidades bien conocidas):
``` ruby
disable :protection
```
@@ -1879,18 +1879,18 @@
menos que le pasés <tt>false</tt> como segundo parámetro.
Deshabilitada por defecto.
</dd>
- <dt>add_charsets</dt>
+ <dt>add_charset</dt>
<dd>
Tipos mime a los que el helper <tt>content_type</tt> les
añade automáticamente el charset.
En general, no deberías asignar directamente esta opción,
sino añadirle los charsets que quieras:
- <tt>settings.add_charsets << "application/foobar"</tt>
+ <tt>settings.add_charset << "application/foobar"</tt>
</dd>
<dt>app_file</dt>
<dd>
Path del archivo principal de la aplicación, se utiliza
@@ -1972,11 +1972,11 @@
continuación.
</dd>
<dt>public_folder</dt>
<dd>
- Path del directorio desde donde se sirven los archivos
+ Lugar del directorio desde donde se sirven los archivos
públicos. Solo se utiliza cuando se sirven archivos
estáticos (ver la opción <tt>static</tt>). Si no
está presente, se infiere del valor de la opción
<tt>app_file</tt>.
</dd>
@@ -1988,11 +1988,11 @@
Se encuentra activado en el entorno de desarrollo.
</dd>
<dt>root</dt>
<dd>
- Path del directorio raíz del proyecto. Si no está
+ Lugar del directorio raíz del proyecto. Si no está
presente, se infiere del valor de la opción
<tt>app_file</tt>.
</dd>
<dt>raise_errors</dt>
@@ -2010,11 +2010,11 @@
usando rackup o algún otro medio.
</dd>
<dt>running</dt>
<dd>
- Indica si el servidor integrado está ejecutandose, ¡no
+ Indica si el servidor integrado está ejecutándose, ¡no
cambiés esta configuración!.
</dd>
<dt>server</dt>
<dd>
@@ -2051,11 +2051,11 @@
</dd>
<dt>static_cache_control</dt>
<dd>
Cuando Sinatra está sirviendo archivos estáticos, y
- está opción está habilitada, les va a agregar encabezados
+ esta opción está habilitada, les va a agregar encabezados
<tt>Cache-Control</tt> a las respuestas. Para esto
utiliza el helper <tt>cache_control</tt>. Se encuentra
deshabilitada por defecto. Notar que es necesario
utilizar un array cuando se asignan múltiples valores:
<tt>set :static_cache_control, [:public, :max_age => 300]</tt>.
@@ -2113,11 +2113,11 @@
desde un bloque de ruta o un filtro. El objeto de la excepción se puede
obtener de la variable Rack `sinatra.error`:
``` ruby
error do
- 'Disculpá, ocurrió un error horrible - ' + env['sinatra.error'].name
+ 'Disculpá, ocurrió un error horrible - ' + env['sinatra.error'].message
end
```
Errores personalizados:
@@ -2162,11 +2162,11 @@
Sinatra instala manejadores `not_found` y `error` especiales
cuando se ejecuta dentro del entorno de desarrollo "development".
## Rack Middleware
-Sinatra corre sobre Rack[http://rack.rubyforge.org/], una interfaz minimalista
+Sinatra corre sobre [Rack](http://rack.github.io/), una interfaz minimalista
que es un estándar para frameworks webs escritos en Ruby. Una de las
características más interesantes de Rack para los desarrolladores de aplicaciones
es el soporte de "middleware" -- componentes que se ubican entre el servidor y
tu aplicación, supervisando y/o manipulando la petición/respuesta HTTP para
proporcionar varios tipos de funcionalidades comunes.
@@ -2185,24 +2185,24 @@
'Hola Mundo'
end
```
La semántica de `use` es idéntica a la definida para el DSL
-Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html] (más
+Rack::Builder[http://rubydoc.info/github/rack/rack/master/Rack/Builder] (más
frecuentemente usado en archivos rackup). Por ejemplo, el método `use`
acepta argumentos múltiples/variables así como bloques:
``` ruby
use Rack::Auth::Basic do |nombre_de_usuario, password|
nombre_de_usuario == 'admin' && password == 'secreto'
end
```
Rack es distribuido con una variedad de middleware estándar para logging,
-debugging, enrutamiento URL, autenticación, y manejo de sesiones. Sinatra
+debugging, enrutamiento URL, autenticación y manejo de sesiones. Sinatra
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 usualmente no tengas que usarlas (con `use`) explícitamente.
Podés encontrar middleware útil en
[rack](https://github.com/rack/rack/tree/master/lib/rack),
[rack-contrib](https://github.com/rack/rack-contrib#readme),
o en la [Rack wiki](https://github.com/rack/rack/wiki/List-of-Middleware).
@@ -2213,14 +2213,14 @@
cualquier framework o librería de pruebas basada en Rack. Se recomienda usar
[Rack::Test](http://rdoc.info/github/brynary/rack-test/master/frames):
``` ruby
require 'mi_app_sinatra'
-require 'test/unit'
+require 'minitest/autorun'
require 'rack/test'
-class MiAppTest < Test::Unit::TestCase
+class MiAppTest < Minitest::Test
include Rack::Test::Methods
def app
Sinatra::Application
end
@@ -2242,14 +2242,14 @@
end
```
## Sinatra::Base - Middleware, Librerías, y Aplicaciones Modulares
-Definir tu aplicación en el top-level funciona bien para micro-aplicaciones
+Definir tu aplicación en el nivel superior funciona bien para micro-aplicaciones
pero trae inconvenientes considerables a la hora de construir componentes
reutilizables como Rack middleware, Rails metal, librerías simples con un
-componente de servidor, o incluso extensiones de Sinatra. El DSL de top-level
+componente de servidor o incluso extensiones de Sinatra. El DSL de alto nivel
asume una configuración apropiada para micro-aplicaciones (por ejemplo, un
único archivo de aplicación, los directorios `./public` y
`./views`, logging, página con detalles de excepción, etc.). Ahí es
donde `Sinatra::Base` entra en el juego:
@@ -2285,17 +2285,17 @@
### Estilo Modular vs. Clásico
Contrariamente a la creencia popular, no hay nada de malo con el estilo clásico.
Si se ajusta a tu aplicación, no es necesario que la cambies a una modular.
-Las desventaja de usar el estilo clásico en lugar del modular consiste en que
+La desventaja de usar el estilo clásico en lugar del modular consiste en que
solamente podés tener una aplicación Sinatra por proceso Ruby. Si tenés
-planificado usar más, cambiá al estilo modular. Al mismo tiempo, tené en
+planificado usar más, cambiá al estilo modular. Al mismo tiempo, ten en
cuenta que no hay ninguna razón por la cuál no puedas mezclar los estilos
clásico y modular.
-A continuación se detallan las diferencias (sutiles) entre las configuraciones
+A continuación se detallan las diferencias (sútiles) entre las configuraciones
de ambos estilos:
<table>
<tr>
<td>Configuración</td>
@@ -2395,15 +2395,15 @@
``` ruby
require './app'
run Sinatra::Application
```
-### ¿Cuándo Usar config.ru?
+### ¿Cuándo usar config.ru?
Indicadores de que probablemente querés usar `config.ru`:
-* Querés realizar el deploy con un hanlder Rack distinto (Passenger, Unicorn,
+* Querés realizar el deploy con un handler Rack distinto (Passenger, Unicorn,
Heroku, ...).
* Querés usar más de una subclase de `Sinatra::Base`.
* Querés usar Sinatra únicamente para middleware, pero no como un endpoint.
<b>No hay necesidad de utilizar un archivo `config.ru` exclusivamente
@@ -2424,12 +2424,12 @@
enable :sessions
get('/login') { haml :login }
post('/login') do
- if params[:nombre] == 'admin' && params[:password] == 'admin'
- session['nombre_de_usuario'] = params[:nombre]
+ if params['nombre'] == 'admin' && params['password'] == 'admin'
+ session['nombre_de_usuario'] = params['nombre']
else
redirect '/login'
end
end
end
@@ -2550,12 +2550,12 @@
# Ey, estoy en el ámbito de la aplicación!
get '/definir_ruta/:nombre' do
# Ámbito de petición para '/definir_ruta/:nombre'
@valor = 42
- settings.get("/#{params[:nombre]}") do
- # Ámbito de petición para "/#{params[:nombre]}"
+ settings.get("/#{params['nombre']}") do
+ # Ámbito de petición para "/#{params['nombre']}"
@valor # => nil (no es la misma petición)
end
"Ruta definida!"
end
@@ -2618,25 +2618,25 @@
dejará de dar soporte a 1.8.7 hasta Sinatra 2.0 y Ruby 2.0, aunque si se
libera la versión 1.8.8 de Ruby las cosas podrían llegar a cambiar. Sin
embargo, que eso ocurra es muy poco probable, e incluso el caso de que lo
haga, puede que se siga dando soporte a 1.8.7. <b>Hemos dejado de soportar
Ruby 1.8.6.</b> Si querés ejecutar Sinatra sobre 1.8.6, podés utilizar la
- versión 1.2, pero tené en cuenta que una vez que Sinatra 1.4.0 sea liberado,
+ versión 1.2, pero ten en cuenta que una vez que Sinatra 1.4.0 sea liberado,
ya no se corregirán errores por más que se reciban reportes de los mismos.
</dd>
<dt>Ruby 1.9.2</dt>
<dd>
1.9.2 es soportado y recomendado. No uses 1.9.2p0, porque se producen fallos
de segmentación cuando se ejecuta Sinatra. El soporte se mantendrá al menos
hasta que se libere la versión 1.9.4/2.0 de Ruby. El soporte para la última
- versión de la serie 1.9 se mantendrá mientras lo haga el core team de Ruby.
+ versión de la serie 1.9 se mantendrá mientras lo haga el equipo principal de Ruby.
</dd>
<dt>Ruby 1.9.3</dt>
<dd>
- 1.9.3 es soportado y recomendado. Tené en cuenta que el cambio a 1.9.3 desde
+ 1.9.3 es soportado y recomendado. Ten en cuenta que el cambio a 1.9.3 desde
una versión anterior va a invalidar todas las sesiones.
</dd>
<dt>Rubinius</dt>
<dd>
@@ -2649,11 +2649,11 @@
<dd>
JRuby es soportado oficialmente (JRuby >= 1.6.7). No se conocen problemas
con librerías de plantillas de terceras partes. Sin embargo, si elegís usar
JRuby, deberías examinar sus Rack handlers porque el servidor web Thin no es
soportado completamente. El soporte de JRuby para extensiones C se encuentra
- en una etapa experimental, sin embargo, de momento solamente RDiscount,
+ en una etapa experimental, sin embargo, de momento, solamente RDiscount,
Redcarpet, RedCloth y Yajl, así como Thin y Mongrel se ven afectadas.
</dd>
</dl>
Siempre le prestamos atención a las nuevas versiones de Ruby.
@@ -2664,11 +2664,11 @@
* Versiones anteriores de JRuby y Rubinius
* Ruby Enterprise Edition
* MacRuby, Maglev e IronRuby
* Ruby 1.9.0 y 1.9.1 (pero no te recomendamos que los uses)
-No estar soportada oficialmente, significa que si las cosas solamente se rompen
+No ser soportada oficialmente, significa que si las cosas se rompen
ahí y no en una plataforma soportada, asumimos que no es nuestro problema sino
el suyo.
Nuestro servidor CI también se ejecuta sobre ruby-head (que será la próxima
versión 2.1.0) y la rama 1.9.4. Como están en movimiento constante, no podemos
@@ -2697,11 +2697,11 @@
### Con Bundler
Esta es la manera recomendada para ejecutar tu aplicación sobre la última
versión de Sinatra usando [Bundler](http://gembundler.com/).
-Primero, instalá bundler si no lo hiciste todavía:
+Primero, instalá Bundler si no lo hiciste todavía:
``` shell
gem install bundler
```
@@ -2774,10 +2774,10 @@
error?. ¿Necesitás ayuda?. ¿Tenés un parche?.
* [Seguimiento de problemas](http://github.com/sinatra/sinatra/issues)
* [Twitter](http://twitter.com/sinatra)
* [Lista de Correo](http://groups.google.com/group/sinatrarb/topics)
* [IRC: #sinatra](irc://chat.freenode.net/#sinatra) en http://freenode.net
-* [Sinatra Book](http://sinatra-book.gittr.com) Tutorial (en inglés).
+* [Sinatra Book](https://github.com/sinatra/sinatra-book/) Tutorial (en inglés).
* [Sinatra Recipes](http://recipes.sinatrarb.com/) Recetas contribuidas
por la comunidad (en inglés).
* Documentación de la API para la
[última versión liberada](http://rubydoc.info/gems/sinatra) o para la
[rama de desarrollo actual](http://rubydoc.info/github/sinatra/sinatra)