Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 1861 lines (1314 sloc) 57.798 kb
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1 = Sinatra
1abac32 @rkh Add note to all README translations saying: 'Important Note: This docume...
rkh authored
2 <i>Atención: Este documento es una traducción de la versión en inglés y puede estar desactualizado.</i>
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
3
52d4311 @gnandretta improves Spanish README
gnandretta authored
4 Sinatra es un DSL para crear aplicaciones web rápidamente en Ruby con un mínimo
5 esfuerzo:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
6
7 # miapp.rb
8 require 'sinatra'
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
9
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
10 get '/' do
11 'Hola mundo!'
12 end
13
52d4311 @gnandretta improves Spanish README
gnandretta authored
14 Instalá la gem y ejecutá la aplicación con:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
15
3a25d98 @rkh Adjust examples in French and Spanish READMEs.
rkh authored
16 gem install sinatra
17 ruby -rubygems miapp.rb
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
18
19 Podés verla en: http://localhost:4567
20
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
21 Es recomendable además ejecutar <tt>gem install thin</tt>, ya que Sinatra lo va
22 a utilizar cuando esté disponible.
23
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
24 == Rutas
25
52d4311 @gnandretta improves Spanish README
gnandretta authored
26 En Sinatra, una ruta está compuesta por un método HTTP y un patrón de una URL.
27 Cada ruta se asocia con un bloque:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
28
29 get '/' do
30 .. mostrar algo ..
31 end
32
33 post '/' do
34 .. crear algo ..
35 end
36
37 put '/' do
a884709 @gnandretta document patch in spanish readme
gnandretta authored
38 .. reemplazar algo ..
39 end
40
41 patch '/' do
42 .. modificar algo ..
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
43 end
44
45 delete '/' do
46 .. aniquilar algo ..
47 end
48
78bb1d9 @gnandretta update REAMDE.es.rdoc
gnandretta authored
49 options '/' do
50 .. informar algo ..
51 end
52
53
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
54 Las rutas son comparadas en el orden en el que son definidas. La primer ruta
55 que coincide con la petición es invocada.
56
57 Los patrones de las rutas pueden incluir parámetros nombrados, accesibles a
58 través de el hash <tt>params</tt>:
59
60 get '/hola/:nombre' do
61 # coincide con "GET /hola/foo" y "GET /hola/bar"
52d4311 @gnandretta improves Spanish README
gnandretta authored
62 # params[:nombre] es 'foo' o 'bar'
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
63 "Hola #{params[:nombre]}!"
64 end
65
66 También podés acceder a los parámetros nombrados usando parámetros de bloque:
67
68 get '/hola/:nombre' do |n|
69 "Hola #{n}!"
70 end
71
52d4311 @gnandretta improves Spanish README
gnandretta authored
72 Los patrones de ruta también pueden incluir parámetros splat (o wildcard),
79032f7 @gnandretta sync spanish readme, fixes #204
gnandretta authored
73 accesibles a través del arreglo <tt>params[:splat]</tt>:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
74
75 get '/decir/*/al/*' do
76 # coincide con /decir/hola/al/mundo
77 params[:splat] # => ["hola", "mundo"]
78 end
79
80 get '/descargar/*.*' do
81 # coincide con /descargar/path/al/archivo.xml
82 params[:splat] # => ["path/al/archivo", "xml"]
83 end
84
188f994 @gnandretta Added wildcard pattern with block parameters in Spanish readme
gnandretta authored
85 O, con parámetros de bloque:
86
87 get '/descargar/*.*' do |path, ext|
88 [path, ext] # => ["path/al/archivo", "xml"]
89 end
90
52d4311 @gnandretta improves Spanish README
gnandretta authored
91 Rutas con Expresiones Regulares:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
92
93 get %r{/hola/([\w]+)} do
94 "Hola, #{params[:captures].first}!"
95 end
96
97 O con un parámetro de bloque:
98
99 get %r{/hola/([\w]+)} do |c|
100 "Hola, #{c}!"
101 end
102
1ed5120 @gnandretta doc optional route parameters in Spanish readme
gnandretta authored
103 Los patrones de ruta pueden contener parámetros opcionales:
104
105 get '/posts.?:formato?' do
106 # coincide con "GET /posts" y además admite cualquier extensión, por
107 # ejemplo, "GET /posts.json", "GET /posts.xml", etc.
108 end
109
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
110 === Condiciones
111
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
112 Las rutas pueden incluir una variedad de condiciones de selección, como por
52d4311 @gnandretta improves Spanish README
gnandretta authored
113 ejemplo el user agent:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
114
115 get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
52d4311 @gnandretta improves Spanish README
gnandretta authored
116 "Estás usando la versión de Songbird #{params[:agent][0]}"
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
117 end
118
119 get '/foo' do
120 # Coincide con browsers que no sean songbird
121 end
122
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
123 Otras condiciones disponibles son +host_name+ y +provides+:
124
125 get '/', :host_name => /^admin\./ do
126 "Área de Administración, Acceso denegado!"
127 end
128
129 get '/', :provides => 'html' do
130 haml :index
131 end
132
133 get '/', :provides => ['rss', 'atom', 'xml'] do
134 builder :feed
135 end
136
137 Podés definir tus propias condiciones fácilmente:
138
139 set(:probabilidad) { |valor| condition { rand <= valor } }
140
141 get '/gana_un_auto', :probabilidad => 0.1 do
142 "Ganaste!"
143 end
144
145 get '/gana_un_auto' do
146 "Lo siento, perdiste."
147 end
148
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
149 === Valores de Retorno
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
150
151 El valor de retorno de un bloque de ruta determina al menos el cuerpo de la
152 respuesta que se le pasa al cliente HTTP o al siguiente middleware en la pila
153 de Rack. Lo más común es que sea un string, como en los ejemplos anteriores.
154 Sin embargo, otros valor también son aceptados.
155
156 Podés devolver cualquier objeto que sea una respuesta Rack válida, un objeto
157 que represente el cuerpo de una respuesta Rack o un código de estado HTTP:
158
159 * Un arreglo con tres elementos: <tt>[estado (Fixnum), cabeceras (Hash), cuerpo de la respuesta (responde a #each)]</tt>
160 * Un arreglo con dos elementos: <tt>[estado (Fixnum), cuerpo de la respuesta (responde a #each)]</tt>
161 * Un objeto que responde a <tt>#each</tt> y que le pasa únicamente strings al bloque dado
162 * Un Fixnum representando el código de estado
163
164 De esa manera podemos, por ejemplo, implementar fácilmente un streaming:
165
166 class Stream
167 def each
168 100.times { |i| yield "#{i}\n" }
169 end
170 end
171
172 get('/') { Stream.new }
173
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
174 === Comparadores de Rutas Personalizados
175
176 Como se mostró anteriormente, Sinatra permite utilizar Strings y expresiones
177 regulares para definir las rutas. Sin embargo, la cosa no termina ahí. Podés
178 definir tus propios comparadores muy fácilmente:
179
180 class PattronCualquieraMenos
181 Match = Struct.new(:captures)
182
183 def initialize(excepto)
184 @excepto = excepto
79032f7 @gnandretta sync spanish readme, fixes #204
gnandretta authored
185 @capturas = Match.new([])
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
186 end
187
188 def match(str)
79032f7 @gnandretta sync spanish readme, fixes #204
gnandretta authored
189 @capturas unless @excepto === str
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
190 end
191 end
192
193 def cualquiera_menos(patron)
194 PatronCualquieraMenos.new(patron)
195 end
196
197 get cualquiera_menos("/index") do
198 # ...
199 end
200
201 Tené en cuenta que el ejemplo anterior es un poco rebuscado. Un resultado
202 similar puede conseguirse más sencillamente:
203
204 get // do
205 pass if request.path_info == "/index"
206 # ...
207 end
208
209 O, usando un lookahead negativo:
210
211 get %r{^(?!/index$)} do
212 # ...
213 end
214
54384ec @gnandretta use same capitalization for all headings in spanish readme
gnandretta authored
215 == Archivos Estáticos
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
216
217 Los archivos estáticos son servidos desde el directorio público
218 <tt>./public</tt>. Podés especificar una ubicación diferente ajustando la
d1ab58d @rkh rename public to public_folder, fixes #301
rkh authored
219 opción <tt>:public_folder</tt>:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
220
d1ab58d @rkh rename public to public_folder, fixes #301
rkh authored
221 set :public_folder, File.dirname(__FILE__) + '/estaticos'
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
222
223 Notá que el nombre del directorio público no está incluido en la URL. Por
224 ejemplo, el archivo <tt>./public/css/style.css</tt> se accede a través de
225 <tt>http://ejemplo.com/css/style.css</tt>.
226
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
227 Usá la configuración <tt>:static_cache_control</tt> para agregar el encabezado
228 <tt>Cache-Control</tt> (ver la sección de configuración para más detalles).
229
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
230 == Vistas / Plantillas
231
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
232 Cada lenguaje de plantilla se expone a través de un método de renderizado que
233 lleva su nombre. Estos métodos simplemente devuelven un string:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
234
235 get '/' do
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
236 erb :index
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
237 end
238
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
239 Renderiza <tt>views/index.erb</tt>.
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
240
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
241 En lugar del nombre de la plantilla podés proporcionar directamente el
242 contenido de la misma:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
243
244 get '/' do
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
245 codigo = "<%= Time.now %>"
246 erb codigo
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
247 end
248
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
249 Los métodos de renderizado, aceptan además un segundo argumento, el hash de
250 opciones:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
251
252 get '/' do
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
253 erb :index, :layout => :post
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
254 end
255
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
256 Renderiza <tt>views/index.erb</tt> embebido en <tt>views/post.erb</tt> (por
257 defecto, la plantilla :index es embebida en <tt>views/layout.erb</tt> siempre y
258 cuando este último archivo exista).
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
259
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
260 Cualquier opción que Sinatra no entienda le será pasada al motor de renderizado
261 de la plantilla:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
262
263 get '/' do
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
264 haml :index, :format => :html5
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
265 end
266
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
267 Además podés definir las opciones para un lenguaje de plantillas de forma
268 general:
8a49d5b @gnandretta explain how to replace ERB with Erubis in spanish readme
gnandretta authored
269
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
270 set :haml, :format => :html5
8a49d5b @gnandretta explain how to replace ERB with Erubis in spanish readme
gnandretta authored
271
272 get '/' do
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
273 haml :index
8a49d5b @gnandretta explain how to replace ERB with Erubis in spanish readme
gnandretta authored
274 end
275
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
276 Las opciones pasadas al método de renderizado tienen precedencia sobre las
277 definidas mediante +set+.
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
278
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
279 Opciones disponibles:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
280
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
281 [locals]
282 Lista de variables locales pasadas al documento. Resultan muy útiles cuando
283 se combinan con parciales.
284 Ejemplo: <tt>erb "<%= foo %>", :locals => {:foo => "bar"}</tt>
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
285
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
286 [default_encoding]
287 Encoding utilizado cuando el de un string es dudoso. Por defecto toma el
288 valor de <tt>settings.default_encoding</tt>.
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
289
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
290 [views]
291 Directorio desde donde se cargan las vistas. Por defecto toma el valor de
292 <tt>settings.views</tt>.
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
293
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
294 [layout]
295 Si es +true+ o +false+ indica que se debe usar, o nó, un layout,
296 respectivamente. También puede ser un símbolo que especifique qué plantilla
297 usar. Ejemplo: <tt>erb :index, :layout => !request.xhr?</tt>
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
298
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
299 [content_type]
300 Content-Type que produce la plantilla. El valor por defecto depende de cada
301 lenguaje de plantillas.
dd81da1 @rkh Add nokogiri helper method. Tilt supports Nokogiri for quite some time n...
rkh authored
302
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
303 [scope]
304 Ámbito en el que se renderiza la plantilla. Por defecto utiliza la instancia
305 de la aplicación. Tené en cuenta que si cambiás esta opción las variables de
306 instancia y los helpers van a dejar de estar disponibles.
dd81da1 @rkh Add nokogiri helper method. Tilt supports Nokogiri for quite some time n...
rkh authored
307
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
308 [layout_engine]
309 Motor de renderizado de plantillas que usa para el layout. Resulta
310 conveniente para lenguajes que no soportan layouts. Por defecto toma el valor
311 del motor usado para renderizar la plantilla.
312 Ejemplo: <tt>set :rdoc, :layout_engine => :erb</tt>
dd81da1 @rkh Add nokogiri helper method. Tilt supports Nokogiri for quite some time n...
rkh authored
313
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
314 Se asume que las plantillas están ubicadas directamente bajo el directorio
315 <tt>./views</tt>. Para usar un directorio de vistas diferente:
dd81da1 @rkh Add nokogiri helper method. Tilt supports Nokogiri for quite some time n...
rkh authored
316
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
317 set :views, settings.root + '/plantillas'
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
318
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
319 Es importante acordarse que siempre tenés que referenciar a las plantillas con
320 símbolos, incluso cuando se encuentran en un subdirectorio (en este caso tenés
321 que usar <tt>:'subdir/plantilla'</tt>). Tenés que usar un símbolo porque los
322 métodos de renderización van a renderizar directamente cualquier string que se
323 les pase como argumento.
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
324
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
325 === Lenguajes de Plantillas Disponibles
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
326
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
327 Algunos lenguajes tienen varias implementaciones. Para especificar que
328 implementación usar (y para ser thread-safe), deberías requerirla antes de
329 usarla:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
330
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
331 require 'rdiscount' # o require 'bluecloth'
332 get('/') { markdown :index }
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
333
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
334 === Plantillas Haml
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
335
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
336 Dependencias:: {haml}[http://haml-lang.com/]
337 Extensiones de Archivo:: <tt>.haml</tt>
338 Ejemplo:: <tt>haml :index, :format => :html5</tt>
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
339
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
340 === Plantillas Erb
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
341
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
342 Dependencias:: {erubis}[http://www.kuwata-lab.com/erubis/] o
343 erb (incluida en Ruby)
344 Extensiones de Archivo:: <tt>.erb</tt>, <tt>.rhtml</tt> o <tt>.erubis</tt>
345 (solamente con Erubis)
346 Ejemplo:: <tt>erb :index</tt>
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
347
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
348 === Plantillas Builder
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
349
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
350 Dependencias:: {builder}[http://builder.rubyforge.org/]
351 Extensiones de Archivo:: <tt>.builder</tt>
352 Ejemplo:: <tt>builder { |xml| xml.em "hola" }</tt>
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
353
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
354 Además, acepta un bloque con la definición de la plantilla (ver el ejemplo).
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
355
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
356 === Plantillas Nokogiri
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
357
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
358 Dependencias:: {nokogiri}[http://nokogiri.org/]
359 Extensiones de Archivo:: <tt>.nokogiri</tt>
360 Ejemplo:: <tt>nokogiri { |xml| xml.em "hola" }</tt>
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
361
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
362 Además, acepta un bloque con la definición de la plantilla (ver el ejemplo).
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
363
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
364 === Plantillas Sass
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
365
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
366 Dependencias:: {sass}[http://sass-lang.com/]
367 Extensiones de Archivo:: <tt>.sass</tt>
368 Ejemplo:: <tt>sass :stylesheet, :style => :expanded</tt>
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
369
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
370 === Plantillas SCSS
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
371
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
372 Dependencias:: {scss}[http://sass-lang.com/]
373 Extensiones de Archivo:: <tt>.scss</tt>
374 Ejemplo:: <tt>scss :stylesheet, :style => :expanded</tt>
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
375
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
376 === Plantillas Less
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
377
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
378 Dependencias:: {less}[http://www.lesscss.org/]
379 Extensiones de Archivo:: <tt>.less</tt>
380 Ejemplo:: <tt>less :stylesheet</tt>
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
381
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
382 === Plantillas Liquid
383
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
384 Dependencias:: {liquid}[http://www.liquidmarkup.org/]
385 Extensiones de Archivo:: <tt>.liquid</tt>
386 Ejemplo:: <tt>liquid :index, :locals => { :clave => 'valor' }</tt>
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
387
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
388 Como no vas a poder llamar a métodos de Ruby (excepto por +yield+) desde una
389 plantilla Liquid, casi siempre vas a querer pasarle locales.
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
390
391 === Plantillas Markdown
392
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
393 Dependencias:: {rdiscount}[https://github.com/rtomayko/rdiscount],
394 {redcarpet}[https://github.com/tanoku/redcarpet],
395 {bluecloth}[http://deveiate.org/projects/BlueCloth],
396 {kramdown}[http://kramdown.rubyforge.org/] *o*
397 {maruku}[http://maruku.rubyforge.org/]
398 Extensiones de Archivo:: <tt>.markdown</tt>, <tt>.mkd</tt> y <tt>.md</tt>
399 Ejemplo:: <tt>markdown :index, :layout_engine => :erb</tt>
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
400
401 No es posible llamar métodos desde markdown, ni pasarle locales. Por lo tanto,
402 generalmente vas a usarlo en combinación con otro motor de renderizado:
403
404 erb :resumen, :locals => { :texto => markdown(:introduccion) }
405
5a17ea0 @gnandretta add BlueCloth example to spanish readme
gnandretta authored
406 Tené en cuenta que también podés llamar al método +markdown+ desde otras
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
407 plantillas:
408
409 %h1 Hola Desde Haml!
410 %p= markdown(:saludos)
411
7fef872 @gnandretta explain how to use :layout_engine in spanish readme
gnandretta authored
412 Como no podés utilizar Ruby desde Markdown, no podés usar layouts escritos en
413 Markdown. De todos modos, es posible usar un motor de renderizado para el
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
414 layout distinto al de la plantilla pasando la opción <tt>:layout_engine</tt>.
5a17ea0 @gnandretta add BlueCloth example to spanish readme
gnandretta authored
415
9e613d2 @gnandretta fix typo in spanish readme
gnandretta authored
416 === Plantillas Textile
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
417
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
418 Dependencias:: {RedCloth}[http://redcloth.org/]
419 Extensiones de Archivo:: <tt>.textile</tt>
420 Ejemplo:: <tt>textile :index, :layout_engine => :erb</tt>
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
421
422 No es posible llamar métodos desde textile, ni pasarle locales. Por lo tanto,
423 generalmente vas a usarlo en combinación con otro motor de renderizado:
424
425 erb :resumen, :locals => { :texto => textile(:introduccion) }
426
d663ea1 @gnandretta spanish readme formatting adjustments
gnandretta authored
427 Tené en cuenta que también podés llamar al método +textile+ desde otras
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
428 plantillas:
429
430 %h1 Hola Desde Haml!
431 %p= textile(:saludos)
432
7fef872 @gnandretta explain how to use :layout_engine in spanish readme
gnandretta authored
433 Como no podés utilizar Ruby desde Textile, no podés usar layouts escritos en
434 Textile. De todos modos, es posible usar un motor de renderizado para el
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
435 layout distinto al de la plantilla pasando la opción <tt>:layout_engine</tt>.
7fef872 @gnandretta explain how to use :layout_engine in spanish readme
gnandretta authored
436
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
437 === Plantillas RDoc
438
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
439 Dependencias:: {rdoc}[http://rdoc.rubyforge.org/]
440 Extensiones de Archivo:: <tt>.rdoc</tt>
2632ff2 @gnandretta fix a copy-paste error in Spanish readme
gnandretta authored
441 Ejemplo:: <tt>rdoc :LEEME, :layout_engine => :erb</tt>
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
442
443 No es posible llamar métodos desde rdoc, ni pasarle locales. Por lo tanto,
444 generalmente vas a usarlo en combinación con otro motor de renderizado:
445
446 erb :resumen, :locals => { :texto => rdoc(:introduccion) }
447
d663ea1 @gnandretta spanish readme formatting adjustments
gnandretta authored
448 Tené en cuenta que también podés llamar al método +rdoc+ desde otras
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
449 plantillas:
450
451 %h1 Hola Desde Haml!
452 %p= rdoc(:saludos)
453
7fef872 @gnandretta explain how to use :layout_engine in spanish readme
gnandretta authored
454 Como no podés utilizar Ruby desde RDoc, no podés usar layouts escritos en RDoc.
455 De todos modos, es posible usar un motor de renderizado para el layout distinto
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
456 al de la plantilla pasando la opción <tt>:layout_engine</tt>.
7fef872 @gnandretta explain how to use :layout_engine in spanish readme
gnandretta authored
457
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
458 === Plantillas Radius
459
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
460 Dependencias:: {radius}[http://radius.rubyforge.org/]
461 Extensiones de Archivo:: <tt>.radius</tt>
462 Ejemplo:: <tt>radius :index, :locals => { :clave => 'valor' }</tt>
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
463
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
464 Como no vas a poder llamar a métodos de Ruby (excepto por +yield+) desde una
465 plantilla Radius, casi siempre vas a querer pasarle locales.
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
466
467 === Plantillas Markaby
468
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
469 Dependencias:: {markaby}[http://markaby.github.com/]
470 Extensiones de Archivo:: <tt>.mab</tt>
471 Ejemplos:: <tt>markaby { h1 "Bienvenido!" }</tt>
78bb1d9 @gnandretta update REAMDE.es.rdoc
gnandretta authored
472
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
473 Además, acepta un bloque con la definición de la plantilla (ver el ejemplo).
78bb1d9 @gnandretta update REAMDE.es.rdoc
gnandretta authored
474
ca7fbe5 @rkh Add documentation for Slim templates.
rkh authored
475 === Plantillas Slim
476
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
477 Dependencias:: {slim}[http://slim-lang.com/]
478 Extensiones de Archivo:: <tt>.slim</tt>
479 Ejemplo:: <tt>slim :index</tt>
ca7fbe5 @rkh Add documentation for Slim templates.
rkh authored
480
9ce9e54 @rkh add support for creole templates
rkh authored
481 === Plantillas Creole
482
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
483 Dependencias:: {creole}[https://github.com/minad/creole]
484 Extensiones de Archivo:: <tt>.creole</tt>
485 Ejemplo:: <tt>creole :wiki, :layout_engine => :erb</tt>
9ce9e54 @rkh add support for creole templates
rkh authored
486
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
487 No es posible llamar métodos desde creole, ni pasarle locales. Por lo tanto,
488 generalmente vas a usarlo en combinación con otro motor de renderizado:
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
489
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
490 erb :resumen, :locals => { :texto => cerole(:introduccion) }
425c275 @gnandretta update CoffeeScript section with requirements for ruby-coffeescript 2.x ...
gnandretta authored
491
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
492 Tené en cuenta que también podés llamar al método +creole+ desde otras
493 plantillas:
425c275 @gnandretta update CoffeeScript section with requirements for ruby-coffeescript 2.x ...
gnandretta authored
494
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
495 %h1 Hola Desde Haml!
496 %p= creole(:saludos)
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
497
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
498 Como no podés utilizar Ruby desde Creole, no podés usar layouts escritos en
499 Creloe. De todos modos, es posible usar un motor de renderizado para el layout
500 distinto al de la plantilla pasando la opción <tt>:layout_engine</tt>.
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
501
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
502 === Plantillas CoffeeScript
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
503
2c7d340 @gnandretta DRY-up the Views / Templates section in Spanish readme
gnandretta authored
504 Dependencias:: {coffee-script}[https://github.com/josh/ruby-coffee-script]
505 y un {mecanismo para ejecutar javascript}[https://github.com/sstephenson/execjs/blob/master/README.md#readme]
506 Extensiones de Archivo:: <tt>.coffee</tt>
507 Ejemplo:: <tt>coffee :index</tt>
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
508
5d5d5bb @gnandretta rename one of the two 'Plantillas Inline' to 'Plantillas Embebidas' in s...
gnandretta authored
509 === Plantillas Embebidas
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
510
511 get '/' do
512 haml '%div.titulo Hola Mundo'
513 end
514
5d5d5bb @gnandretta rename one of the two 'Plantillas Inline' to 'Plantillas Embebidas' in s...
gnandretta authored
515 Renderiza el template embebido en el string.
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
516
517 === Accediendo a Variables en Plantillas
518
519 Las plantillas son evaluadas dentro del mismo contexto que los manejadores de
52d4311 @gnandretta improves Spanish README
gnandretta authored
520 ruta. Las variables de instancia asignadas en los manejadores de ruta son
521 accesibles directamente por las plantillas:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
522
523 get '/:id' do
524 @foo = Foo.find(params[:id])
525 haml '%h1= @foo.nombre'
526 end
527
52d4311 @gnandretta improves Spanish README
gnandretta authored
528 O es posible especificar un Hash de variables locales explícitamente:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
529
530 get '/:id' do
531 foo = Foo.find(params[:id])
bd7b791 @gnandretta tweaked :locals example in Spanish readme
gnandretta authored
532 haml '%h1= bar.nombre', :locals => { :bar => foo }
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
533 end
534
535 Esto es usado típicamente cuando se renderizan plantillas como parciales desde
536 adentro de otras plantillas.
537
538 === Plantillas Inline
539
540 Las plantillas pueden ser definidas al final del archivo fuente:
541
542 require 'rubygems'
543 require 'sinatra'
544
545 get '/' do
546 haml :index
547 end
548
549 __END__
550
551 @@ layout
552 %html
553 = yield
554
555 @@ index
556 %div.titulo Hola mundo!!!!!
557
558 NOTA: únicamente las plantillas inline definidas en el archivo fuente que
6584711 @rkh Minor markup fix in README.
rkh authored
559 requiere sinatra son cargadas automáticamente. Llamá <tt>enable
560 :inline_templates</tt> explícitamente si tenés plantillas inline en otros
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
561 archivos fuente.
562
563 === Plantillas Nombradas
564
565 Las plantillas también pueden ser definidas usando el método top-level
566 <tt>template</tt>:
567
568 template :layout do
569 "%html\n =yield\n"
570 end
571
572 template :index do
573 '%div.titulo Hola Mundo!'
574 end
575
576 get '/' do
577 haml :index
578 end
579
580 Si existe una plantilla con el nombre "layout", va a ser usada cada vez que
361ed82 @gnandretta update the layout options in the spanish readme
gnandretta authored
581 una plantilla es renderizada. Podés desactivar los layouts individualmente
582 pasando <tt>:layout => false</tt> o globalmente con
79032f7 @gnandretta sync spanish readme, fixes #204
gnandretta authored
583 <tt>set :haml, :layout => false</tt>:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
584
585 get '/' do
586 haml :index, :layout => !request.xhr?
587 end
588
e85b097 @gnandretta add 'Asociando Extensiones de Archivo' section to spanish readme
gnandretta authored
589 === Asociando Extensiones de Archivo
590
591 Para asociar una extensión de archivo con un motor de renderizado, usá
592 <tt>Tilt.register</tt>. Por ejemplo, si querés usar la extensión +tt+ para
a28ed50 @rkh Fix typo in Spanish README.
rkh authored
593 las plantillas Textile, podés hacer lo siguiente:
e85b097 @gnandretta add 'Asociando Extensiones de Archivo' section to spanish readme
gnandretta authored
594
595 Tilt.register :tt, Tilt[:textile]
596
56bb2fc @gnandretta add 'Agregando Tu Propio Motor de Renderizado' section to spanish readme
gnandretta authored
597 === Agregando Tu Propio Motor de Renderizado
598
599 Primero, registrá tu motor con Tilt, y después, creá tu método de renderizado:
600
601 Tilt.register :mipg, MiMotorParaPlantillaGenial
602
603 helpers do
604 def mypg(*args) render(:mypg, *args) end
605 end
606
607 get '/' do
608 mypg :index
609 end
610
611 Renderiza <tt>./views/index.mypg</tt>. Mirá https://github.com/rtomayko/tilt
612 para aprender más de Tilt.
613
52d4311 @gnandretta improves Spanish README
gnandretta authored
614 == Filtros
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
615
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
616 Los filtros +before+ son evaluados antes de cada petición dentro del mismo
617 contexto que las rutas. Pueden modificar la petición y la respuesta. Las
618 variables de instancia asignadas en los filtros son accesibles por las rutas y
619 las plantillas:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
620
621 before do
622 @nota = 'Hey!'
623 request.path_info = '/foo/bar/baz'
624 end
625
626 get '/foo/*' do
627 @nota #=> 'Hey!'
628 params[:splat] #=> 'bar/baz'
629 end
630
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
631 Los filtros +after+ son evaluados después de cada petición dentro del mismo
632 contexto y también pueden modificar la petición y la respuesta. Las variables
633 de instancia asignadas en los filtros +before+ y en las rutas son accesibles por
634 los filtros +after+:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
635
636 after do
637 puts response.status
638 end
639
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
640 Nota: A menos que usés el método +body+ en lugar de simplemente devolver un
23044e5 @gnandretta document accessing response body in after filter in spanish readme
gnandretta authored
641 string desde una ruta, el cuerpo de la respuesta no va a estar disponible en
642 un filtro after, debido a que todavía no se ha generado.
643
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
644 Los filtros aceptan un patrón opcional, que cuando está presente causa que los
645 mismos sean evaluados únicamente si el path de la petición coincide con ese
646 patrón:
647
648 before '/protegido/*' do
649 autenticar!
650 end
651
652 after '/crear/:slug' do |slug|
653 session[:ultimo_slug] = slug
654 end
655
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
656 Al igual que las rutas, los filtros también pueden aceptar condiciones:
78bb1d9 @gnandretta update REAMDE.es.rdoc
gnandretta authored
657
658 before :agent => /Songbird/ do
659 # ...
660 end
661
662 after '/blog/*', :host_name => 'ejemplo.com' do
663 # ...
664 end
665
170cca2 @gnandretta reorganizing helpers in spanish readme
gnandretta authored
666 == Ayudantes
667
668 Usá el método top-level <tt>helpers</tt> para definir métodos ayudantes que
669 pueden ser utilizados dentro de los manejadores de rutas y las plantillas:
670
671 helpers do
672 def bar(nombre)
673 "#{nombre}bar"
674 end
675 end
676
677 get '/:nombre' do
678 bar(params[:nombre])
679 end
680
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
681 === Usando Sesiones
682
683 Una sesión es usada para mantener el estado a través de distintas peticiones.
684 Cuando están activadas, tenés un hash de sesión para cada sesión de usuario:
685
686 enable :sessions
687
688 get '/' do
689 "valor = " << session[:valor].inspect
690 end
691
692 get '/:valor' do
693 session[:valor] = params[:valor]
694 end
695
696 Tené en cuenta que <tt>enable :sessions</tt> guarda todos los datos en una
697 cookie, lo que no es siempre deseable (guardar muchos datos va a incrementar
698 tu tráfico, por citar un ejemplo). Podés usar cualquier middleware Rack para
699 manejar sesiones, de la misma manera que usarías cualquier otro middleware,
700 pero con la salvedad de que *no* tenés que llamar a <tt>enable :sessions</tt>:
701
702 use Rack::Session::Pool, :expire_after => 2592000
703
704 get '/' do
705 "valor = " << session[:valor].inspect
706 end
707
708 get '/:valor' do
709 session[:valor] = params[:valor]
710 end
711
6d7c4c0 @gnandretta document session_secret in spanish readme
gnandretta authored
712 Para incrementar la seguridad, los datos de la sesión almacenados en
713 la cookie son firmados con un secreto de sesión. Este secreto, es
714 generado aleatoriamente por Sinatra. De cualquier manera, hay que
715 tener en cuenta que cada vez que inicies la aplicación se va a generar
716 uno nuevo. Así, si querés que todas las instancias de tu aplicación
717 compartan un único secreto, tenés que definirlo vos:
718
719 set :session_secret, 'super secreto'
720
670a100 @gnandretta document sessions accepts a hash in spanish readme
gnandretta authored
721 Si necesitás una configuración más específica, +sessions+ acepta un
722 Hash con opciones:
723
724 set :sessions, :domain => 'foo.com'
725
170cca2 @gnandretta reorganizing helpers in spanish readme
gnandretta authored
726 === Interrupción
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
727
728 Para detener inmediatamente una petición dentro de un filtro o una ruta usá:
729
730 halt
731
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
732 También podés especificar el estado:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
733
734 halt 410
735
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
736 O el cuerpo:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
737
738 halt 'esto va a ser el cuerpo'
739
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
740 O los dos:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
741
742 halt 401, 'salí de acá!'
743
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
744 Con cabeceras:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
745
746 halt 402, { 'Content-Type' => 'text/plain' }, 'venganza'
747
5ca1df7 @gnandretta add example for halt with template in spanish readme
gnandretta authored
748 Obviamente, es posible utilizar +halt+ con una plantilla:
749
750 halt erb(:error)
751
170cca2 @gnandretta reorganizing helpers in spanish readme
gnandretta authored
752 === Paso
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
753
754 Una ruta puede pasarle el procesamiento a la siguiente ruta que coincida con
755 la petición usando <tt>pass</tt>:
756
757 get '/adivina/:quien' do
758 pass unless params[:quien] == 'Franco'
759 'Adivinaste!'
760 end
761
762 get '/adivina/*' do
763 'Erraste!'
764 end
765
766 Se sale inmediatamente del bloque de la ruta y se le pasa el control a la
767 siguiente ruta que coincida. Si no coincide ninguna ruta, se devuelve un 404.
768
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
769 === Ejecutando Otra Ruta
770
771 Cuando querés obtener el resultado de la llamada a una ruta, +pass+ no te va a
772 servir. Para lograr esto, podés usar +call+:
773
774 get '/foo' do
66f1256 @rkh env is accessable directly, no need to use request.env
rkh authored
775 status, headers, body = call env.merge("PATH_INFO" => '/bar')
039675f @rkh test and fix #call example
rkh authored
776 [status, headers, body.map(&:upcase)]
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
777 end
778
779 get '/bar' do
780 "bar"
781 end
782
783 Notá que en el ejemplo anterior, es conveniente mover <tt>"bar"</tt> a un
784 helper, y llamarlo desde <tt>/foo</tt> y <tt>/bar</tt>. Así, vas a simplificar
785 las pruebas y a mejorar el rendimiento.
786
787 Si querés que la petición se envíe a la misma instancia de la aplicación en
788 lugar de a otra, usá <tt>call!</tt> en lugar de <tt>call</tt>.
789
790 En la especificación de Rack podés encontrar más información sobre
791 <tt>call</tt>.
792
793 === Asignando el Código de Estado, los Encabezados y el Cuerpo de una Respuesta
252a8d0 @gnandretta document body and status helper methods in spanish readme
gnandretta authored
794
795 Es posible, y se recomienda, asignar el código de estado y el cuerpo de una
796 respuesta con el valor de retorno de una ruta. De cualquier manera, en varios
797 escenarios, puede que sea conveniente asignar el cuerpo en un punto arbitrario
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
798 del flujo de ejecución con el método +body+. A partir de ahí, podés usar ese
252a8d0 @gnandretta document body and status helper methods in spanish readme
gnandretta authored
799 mismo método para acceder al cuerpo de la respuesta:
800
801 get '/foo' do
802 body "bar"
803 end
804
805 after do
806 puts body
807 end
808
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
809 También es posible pasarle un bloque a +body+, que será ejecutado por el Rack
810 handler (podés usar esto para implementar streaming, mirá "Valores de retorno").
252a8d0 @gnandretta document body and status helper methods in spanish readme
gnandretta authored
811
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
812 De manera similar, también podés asignar el código de estado y encabezados:
252a8d0 @gnandretta document body and status helper methods in spanish readme
gnandretta authored
813
814 get '/foo' do
815 status 418
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
816 headers \
817 "Allow" => "BREW, POST, GET, PROPFIND, WHEN"
818 "Refresh" => "Refresh: 20; http://www.ietf.org/rfc/rfc2324.txt"
819 body "I'm a tea pot!"
820 end
821
822 También, al igual que +body+, tanto +status+ como +headers+ pueden utilizarse
823 para obtener sus valores cuando no se les pasa argumentos.
824
26ee26b @gnandretta document logging in spanish readme
gnandretta authored
825 === Log (Registro)
826
827 En el ámbito de la petición, el helper +logger+ (registrador) expone
828 una instancia de +Logger+:
829
830 get '/' do
831 logger.info "cargando datos"
832 # ...
833 end
834
835 Este logger tiene en cuenta la configuración de logueo de tu Rack
836 handler. Si el logueo está desactivado, este método va a devolver un
837 objeto que se comporta como un logger pero que en realidad no hace
838 nada. Así, no vas a tener que preocuparte por esta situación.
839
840 Tené en cuenta que el logueo está habilitado por defecto únicamente
841 para <tt>Sinatra::Application</tt>. Si heredaste de
842 <tt>Sinatra::Base</tt>, probablemente quieras habilitarlo manualmente:
843
844 class MiApp < Sinatra::Base
845 configure(:production, :development) do
846 enable :logging
847 end
848 end
849
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
850 === Tipos Mime
851
852 Cuando usás <tt>send_file</tt> o archivos estáticos tal vez tengas tipos mime
853 que Sinatra no entiende. Usá +mime_type+ para registrarlos a través de la
854 extensión de archivo:
855
2c461ae @gnandretta improve mime_type example in Spanish readme
gnandretta authored
856 configure do
857 mime_type :foo, 'text/foo'
858 end
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
859
860 También lo podés usar con el ayudante +content_type+:
861
862 get '/' do
863 content_type :foo
864 "foo foo foo"
252a8d0 @gnandretta document body and status helper methods in spanish readme
gnandretta authored
865 end
866
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
867 === Generando URLs
868
869 Para generar URLs deberías usar el método +url+. Por ejemplo, en Haml:
870
871 %a{:href => url('/foo')} foo
872
873 Tiene en cuenta proxies inversos y encaminadores de Rack, si están presentes.
874
875 Este método también puede invocarse mediante su alias +to+ (mirá un ejemplo
876 a continuación).
877
5a22939 @gnandretta document redirect in spanish readme
gnandretta authored
878 === Redirección del Navegador
879
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
880 Podés redireccionar al navegador con el método +redirect+:
5a22939 @gnandretta document redirect in spanish readme
gnandretta authored
881
882 get '/foo' do
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
883 redirect to('/bar')
5a22939 @gnandretta document redirect in spanish readme
gnandretta authored
884 end
885
886 Cualquier parámetro adicional se utiliza de la misma manera que los argumentos
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
887 pasados a +halt+:
888
889 redirect to('/bar'), 303
890 redirect 'http://google.com', 'te confundiste de lugar, compañero'
5a22939 @gnandretta document redirect in spanish readme
gnandretta authored
891
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
892 También podés redireccionar fácilmente de vuelta hacia la página desde donde
893 vino el usuario con +redirect back+:
5a22939 @gnandretta document redirect in spanish readme
gnandretta authored
894
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
895 get '/foo' do
896 "<a href='/bar'>hacer algo</a>"
897 end
898
899 get '/bar' do
900 hacer_algo
901 redirect back
902 end
903
904 Para pasar argumentos con una redirección, podés agregarlos a la cadena de
5a22939 @gnandretta document redirect in spanish readme
gnandretta authored
905 búsqueda:
906
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
907 redirect to('/bar?suma=42')
5a22939 @gnandretta document redirect in spanish readme
gnandretta authored
908
909 O usar una sesión:
910
911 enable :session
912
913 get '/foo' do
914 session[:secreto] = 'foo'
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
915 redirect to('/bar')
5a22939 @gnandretta document redirect in spanish readme
gnandretta authored
916 end
917
918 get '/bar' do
919 session[:secreto]
920 end
921
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
922 === Cache Control
923
924 Asignar tus encabezados correctamente es el cimiento para realizar un cacheo
925 HTTP correcto.
926
927 Podés asignar el encabezado Cache-Control fácilmente:
928
929 get '/' do
930 cache_control :public
931 "cachealo!"
932 end
933
79032f7 @gnandretta sync spanish readme, fixes #204
gnandretta authored
934 Pro tip: configurar el cacheo en un filtro +before+:
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
935
936 before do
937 cache_control :public, :must_revalidate, :max_age => 60
938 end
939
940 Si estás usando el helper +expires+ para definir el encabezado correspondiente,
941 <tt>Cache-Control</tt> se va a definir automáticamente:
942
943 before do
944 expires 500, :public, :must_revalidate
945 end
946
947 Para usar cachés adecuadamente, deberías considerar usar +etag+ y
948 +last_modified+. Es recomendable que llames a estos helpers *antes* de hacer
949 cualquier trabajo pesado, ya que van a enviar la respuesta inmediatamente si
79032f7 @gnandretta sync spanish readme, fixes #204
gnandretta authored
950 el cliente ya tiene la versión actual en su caché:
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
951
952 get '/articulo/:id' do
953 @articulo = Articulo.find params[:id]
954 last_modified @articulo.updated_at
955 etag @articulo.sha1
956 erb :articulo
957 end
958
959 También es posible usar una
960 {weak ETag}[http://en.wikipedia.org/wiki/HTTP_ETag#Strong_and_weak_validation]:
961
962 etag @articulo.sha1, :weak
963
964 Estos helpers no van a cachear nada por vos, sino que van a facilitar la
965 información necesaria para poder hacerlo. Si estás buscando soluciones rápidas
966 de cacheo, mirá {rack-cache}[http://rtomayko.github.com/rack-cache/]:
967
968 require "rack/cache"
969 require "sinatra"
970
971 use Rack::Cache
972
973 get '/' do
974 cache_control :public, :max_age => 36000
975 sleep 5
976 "hola"
977 end
978
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
979 Usá la configuración <tt>:static_cache_control</tt> para agregar el encabezado
980 <tt>Cache-Control</tt> a archivos estáticos (ver la sección de configuración
981 para más detalles).
982
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
983 === Enviando Archivos
984
985 Para enviar archivos, podés usar el método <tt>send_file</tt>:
986
987 get '/' do
988 send_file 'foo.png'
989 end
990
991 Además acepta un par de opciones:
992
993 send_file 'foo.png', :type => :jpg
994
995 Estas opciones son:
996
997 [filename]
998 nombre del archivo respondido, por defecto es el nombre real del archivo.
999
1000 [last_modified]
1001 valor para el encabezado Last-Modified, por defecto toma el mtime del archivo.
1002
1003 [type]
1004 el content type que se va a utilizar, si no está presente se intenta adivinar
1005 a partir de la extensión del archivo.
1006
1007 [disposition]
1008 se utiliza para el encabezado Content-Disposition, y puede tomar alguno de los
1009 siguientes valores: +nil+ (por defecto), <tt>:attachment</tt> e
1010 <tt>:inline</tt>
1011
1012 [length]
1013 encabezado Content-Length, por defecto toma el tamaño del archivo.
1014
1015 Si el Rack handler lo soporta, se intentará no transmitir directamente desde el
1016 proceso de Ruby. Si usás este método, Sinatra se va a encargar automáticamente
1017 peticiones de rango.
1018
170cca2 @gnandretta reorganizing helpers in spanish readme
gnandretta authored
1019 === Accediendo al objeto de la petición
450c3c4 @gnandretta syncs up the README's spanish translation
gnandretta authored
1020
1021 El objeto de la petición entrante puede ser accedido desde el nivel de la
1022 petición (filtros, rutas y manejadores de errores) a través del método
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1023 <tt>request</tt>:
450c3c4 @gnandretta syncs up the README's spanish translation
gnandretta authored
1024
1025 # app corriendo en http://ejemplo.com/ejemplo
1026 get '/foo' do
06d9c7e @gnandretta document more request methods in spanish readme
gnandretta authored
1027 t = %w[text/css text/html application/javascript]
1028 request.accept # ['text/html', '*/*']
1029 request.accept? 'text/xml' # true
1030 request.preferred_type(t) # 'text/html'
1031 request.body # cuerpo de la petición enviado por el cliente (ver más abajo)
1032 request.scheme # "http"
1033 request.script_name # "/ejemplo"
1034 request.path_info # "/foo"
1035 request.port # 80
1036 request.request_method # "GET"
1037 request.query_string # ""
1038 request.content_length # longitud de request.body
1039 request.media_type # tipo de medio de request.body
1040 request.host # "ejemplo.com"
1041 request.get? # true (hay métodos análogos para los otros verbos)
1042 request.form_data? # false
1043 request["UNA_CABECERA"] # valor de la cabecera UNA_CABECERA
1044 request.referrer # la referencia del cliente o '/'
1045 request.user_agent # user agent (usado por la condición :agent)
1046 request.cookies # hash de las cookies del browser
1047 request.xhr? # es una petición ajax?
1048 request.url # "http://ejemplo.com/ejemplo/foo"
1049 request.path # "/ejemplo/foo"
1050 request.ip # dirección IP del cliente
1051 request.secure? # false (sería true sobre ssl)
1052 request.forwarded? # true (si se está corriendo atrás de un proxy inverso)
1053 requuest.env # hash de entorno directamente entregado por Rack
450c3c4 @gnandretta syncs up the README's spanish translation
gnandretta authored
1054 end
1055
1056 Algunas opciones, como <tt>script_name</tt> o <tt>path_info</tt> pueden
1057 también ser escritas:
1058
1059 before { request.path_info = "/" }
1060
1061 get "/" do
1062 "todas las peticiones llegan acá"
1063 end
1064
1065 El objeto <tt>request.body</tt> es una instancia de IO o StringIO:
1066
1067 post "/api" do
1068 request.body.rewind # en caso de que alguien ya lo haya leído
1069 datos = JSON.parse request.body.read
1070 "Hola #{datos['nombre']}!"
1071 end
1072
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1073 === Archivos Adjuntos
1074
1075 Podés usar el método helper +attachment+ para indicarle al navegador que
79032f7 @gnandretta sync spanish readme, fixes #204
gnandretta authored
1076 almacene la respuesta en el disco en lugar de mostrarla en pantalla:
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1077
1078 get '/' do
1079 attachment
1080 "guardalo!"
1081 end
1082
1083 También podés pasarle un nombre de archivo:
1084
1085 get '/' do
1086 attachment "info.txt"
1087 "guardalo!"
1088 end
1089
1090 === Buscando los Archivos de las Plantillas
1091
1092 El helper <tt>find_template</tt> se utiliza para encontrar los archivos de las
1093 plantillas que se van a renderizar:
1094
1095 find_template settings.views, 'foo', Tilt[:haml] do |archivo|
1096 puts "podría ser #{archivo}"
1097 end
1098
1099 Si bien esto no es muy útil, lo interesante es que podés sobreescribir este
1100 método, y así enganchar tu propio mecanismo de búsqueda. Por ejemplo, para
1101 poder utilizar más de un directorio de vistas:
1102
1103 set :views, ['vistas', 'plantillas']
1104
1105 helpers do
1106 def find_template(views, name, engine, &block)
1107 Array(views).each { |v| super(v, name, engine, &block) }
1108 end
1109 end
1110
1111 Otro ejemplo consiste en usar directorios diferentes para los distintos motores
1112 de renderizado:
1113
1114 set :views, :sass => 'vistas/sass', :haml => 'plantillas', :defecto => 'vistas'
1115
1116 helpers do
1117 def find_template(views, name, engine, &block)
1118 _, folder = views.detect { |k,v| engine == Tilt[k] }
1119 folder ||= views[:defecto]
1120 super(folder, name, engine, &block)
1121 end
1122 end
1123
1124 ¡Es muy fácil convertir estos ejemplos en una extensión y compartirla!.
1125
1126 Notá que <tt>find_template</tt> no verifica si un archivo existe realmente, sino
1127 que llama al bloque que recibe para cada path posible. Esto no representa un
1128 problema de rendimiento debido a que +render+ va a usar +break+ ni bien
1129 encuentre un archivo que exista. Además, las ubicaciones de las plantillas (y
1130 su contenido) se cachean cuando no estás en el modo de desarrollo. Es bueno
1131 tener en cuenta lo anteiror si escribís un método medio loco.
1132
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1133 == Configuración
1134
1135 Ejecutar una vez, en el inicio, en cualquier entorno:
1136
1137 configure do
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1138 # asignando una opción
1139 set :opcion, 'valor'
1140
1141 # asignando varias opciones
1142 set :a => 1, :b => 2
1143
1144 # atajo para `set :opcion, true`
1145 enable :opcion
1146
1147 # atajo para `set :opcion, false`
1148 disable :opcion
1149
1150 # también podés tener configuraciones dinámicas usando bloques
1151 set(:css_dir) { File.join(views, 'css') }
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1152 end
1153
1154 Ejecutar únicamente cuando el entorno (la variable de entorno RACK_ENV) es
1155 <tt>:production</tt>:
1156
1157 configure :production do
1158 ...
1159 end
1160
1161 Ejecutar cuando el entorno es <tt>:production</tt> o <tt>:test</tt>:
1162
1163 configure :production, :test do
1164 ...
1165 end
1166
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1167 Podés acceder a estas opciones utilizando el método <tt>settings</tt>:
1168
1169 configure do
1170 set :foo, 'bar'
1171 end
1172
1173 get '/' do
1174 settings.foo? # => true
1175 settings.foo # => 'bar'
1176 ...
1177 end
1178
1179 === Configuraciones Disponibles
1180
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1181 [absolute_redirects] si está deshabilitada, Sinatra va a permitir
1182 redirecciones relativas, sin embargo, como consecuencia
1183 de esto, va a dejar de cumplir con el RFC 2616 (HTTP
1184 1.1), que solamente permite redirecciones absolutas.
1185
1186 Activalo si tu apliación está corriendo atrás de un proxy
1187 inverso que no se ha configurado adecuadamente. Notá que
1188 el helper +url+ va a seguir produciendo URLs absolutas, a
1189 menos que le pasés +false+ como segundo parámetro.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1190
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1191 Deshabilitada por defecto.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1192
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1193 [add_charsets] tipos mime a los que el helper <tt>content_type</tt> les
1194 añade automáticamente el charset.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1195
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1196 En general, no deberías asignar directamente esta opción,
1197 sino añadirle los charsets que quieras:
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1198
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1199 settings.add_charsets << "application/foobar"
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1200
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1201 [app_file] archivo principal de la aplicación, se utiliza para
1202 detectar la raíz del proyecto, el directorio de las
1203 vistas y el público así como las plantillas inline.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1204
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1205 [bind] dirección IP que utilizará el servidor integrado (por
1206 defecto: 0.0.0.0).
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1207
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1208 [default_encoding] encoding utilizado cuando el mismo se desconoce (por
1209 defecto <tt>"utf-8"</tt>).
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1210
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1211 [dump_errors] mostrar errores en el log.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1212
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1213 [environment] entorno actual, por defecto toma el valor de
1214 <tt>ENV['RACK_ENV']</tt>, o <tt>"development"</tt> si no
1215 está disponible.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1216
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1217 [logging] define si se utiliza el logger.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1218
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1219 [lock] coloca un lock alrededor de cada petición, procesando
1220 solamente una por proceso.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1221
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1222 Habilitá esta opción si tu aplicación no es thread-safe.
1223 Se encuentra deshabilitada por defecto.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1224
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1225 [method_override] utiliza el parámetro <tt>_method</tt> para permtir
1226 formularios put/delete en navegadores que no los
1227 soportan.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1228
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1229 [port] puerto en el que escuchará el servidor integrado.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1230
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1231 [prefixed_redirects] define si inserta <tt>request.script_name</tt> en las
1232 redirecciones cuando no se proporciona un path absoluto.
1233 De esta manera, cuando está habilitada,
1234 <tt>redirect '/foo'</tt> se comporta de la misma manera
1235 que <tt>redirect to('/foo')</tt>. Se encuentra
1236 deshabilitada por defecto.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1237
d1ab58d @rkh rename public to public_folder, fixes #301
rkh authored
1238 [public_folder] directorio desde donde se sirven los archivos públicos.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1239
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1240 [reload_templates] define si se recargan las plantillas entre peticiones.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1241
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1242 Se encuentra activado en el entorno de desarrollo.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1243
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1244 [root] directorio raíz del proyecto.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1245
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1246 [raise_errors] elevar excepciones (detiene la aplicación).
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1247
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1248 [run] cuando está habilitada, Sinatra se va a encargar de
1249 iniciar el servidor web, no la habilités cuando estés
1250 usando rackup o algún otro medio.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1251
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1252 [running] indica si el servidor integrado está ejecutandose, ¡no
1253 cambiés esta configuración!.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1254
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1255 [server] servidor, o lista de servidores, para usar como servidor
1256 integrado. Por defecto: ['thin', 'mongrel', 'webrick'],
1257 el orden establece la prioridad.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1258
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1259 [sessions] habilita sesiones basadas en cookies.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1260
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1261 [show_exceptions] muestra un stack trace en el navegador.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1262
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1263 [static] define si Sinatra debe encargarse de servir archivos
1264 estáticos.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1265
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1266 Deshabilitala cuando usés un servidor capaz de
1267 hacerlo por sí solo, porque mejorará el
1268 rendimiento. Se encuentra habilitada por
1269 defecto en el estilo clásico y desactivado en el
1270 el modular.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1271
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1272 [static_cache_control] cuando Sinatra está sirviendo archivos estáticos, y
1273 está opción está habilitada, les va a agregar encabezados
1274 <tt>Cache-Control</tt> a las respuestas. Para esto
1275 utiliza el helper +cache_control+. Se encuentra
1276 deshabilitada por defecto. Notar que es necesario
1277 utilizar un array cuando se asignan múltiples valores:
1278 <tt>set :static_cache_control, [:public, :max_age => 300]</tt>.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1279
8475289 @gnandretta doc :static_cache_control setting in Spanish readme
gnandretta authored
1280 [views] directorio de las vistas.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1281
54384ec @gnandretta use same capitalization for all headings in spanish readme
gnandretta authored
1282 == Manejo de Errores
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1283
1284 Los manejadores de errores se ejecutan dentro del mismo contexto que las rutas
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1285 y los filtros +before+, lo que significa que podés usar, por ejemplo,
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1286 <tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt>, etc.
1287
1288 === No encontrado <em>(Not Found)</em>
1289
1290 Cuando se eleva una excepción <tt>Sinatra::NotFound</tt>, o el código de
1291 estado de la respuesta es 404, el manejador <tt>not_found</tt> es invocado:
1292
1293 not_found do
1294 'No existo'
1295 end
1296
1297 === Error
1298
1299 El manejador +error+ es invocado cada vez que una excepción es elevada
1300 desde un bloque de ruta o un filtro. El objeto de la excepción se puede
1301 obtener de la variable Rack <tt>sinatra.error</tt>:
1302
1303 error do
1304 'Disculpá, ocurrió un error horrible - ' + env['sinatra.error'].name
1305 end
1306
1307 Errores personalizados:
1308
1309 error MiErrorPersonalizado do
66f1256 @rkh env is accessable directly, no need to use request.env
rkh authored
1310 'Lo que pasó fue...' + env['sinatra.error'].message
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1311 end
1312
1313 Entonces, si pasa esto:
1314
1315 get '/' do
1316 raise MiErrorPersonalizado, 'algo malo'
1317 end
1318
1319 Obtenés esto:
1320
1321 Lo que pasó fue... algo malo
1322
1323 También, podés instalar un manejador de errores para un código de estado:
1324
1325 error 403 do
1326 'Acceso prohibido'
1327 end
1328
1329 get '/secreto' do
1330 403
1331 end
1332
1333 O un rango:
1334
1335 error 400..510 do
1336 'Boom'
1337 end
1338
1339 Sinatra instala manejadores <tt>not_found</tt> y <tt>error</ttt> especiales
1340 cuando se ejecuta dentro del entorno de desarrollo "development".
1341
1342 == Rack Middleware
1343
1344 Sinatra corre sobre Rack[http://rack.rubyforge.org/], una interfaz minimalista
1345 que es un estándar para frameworks webs escritos en Ruby. Una de las
1346 capacidades más interesantes de Rack para los desarrolladores de aplicaciones
1347 es el soporte de "middleware" -- componentes que se ubican entre el servidor y
1348 tu aplicación, supervisando y/o manipulando la petición/respuesta HTTP para
1349 proporcionar varios tipos de funcionalidades comunes.
1350
1351 Sinatra hace muy sencillo construir tuberías de Rack middleware a través del
1352 método top-level +use+:
1353
1354 require 'sinatra'
1355 require 'mi_middleware_personalizado'
1356
1357 use Rack::Lint
1358 use MiMiddlewarePersonalizado
1359
1360 get '/hola' do
1361 'Hola Mundo'
1362 end
1363
1364 Las semánticas de +use+ son idénticas a las definidas para el DSL
52d4311 @gnandretta improves Spanish README
gnandretta authored
1365 Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html] (más
1366 frecuentemente usado desde archivos rackup). Por ejemplo, el método +use+
1367 acepta argumentos múltiples/variables así como bloques:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1368
1369 use Rack::Auth::Basic do |nombre_de_usuario, password|
1370 nombre_de_usuario == 'admin' && password == 'secreto'
1371 end
1372
1373 Rack es distribuido con una variedad de middleware estándar para logging,
1374 debugging, enrutamiento URL, autenticación, y manejo de sesiones. Sinatra
1375 usa muchos de estos componentes automáticamente de acuerdo a su configuración
1376 para que típicamente no tengas que usarlas (con +use+) explícitamente.
1377
b3cfdce @gnandretta links to middleware listings in Spanish readme
gnandretta authored
1378 Podés encontrar middleware útil en
1379 {rack}[https://github.com/rack/rack/tree/master/lib/rack],
1380 {rack-contrib}[https://github.com/rack/rack-contrib#readme],
1381 con {CodeRack}[http://coderack.org/] o en la
1382 {Rack wiki}[https://github.com/rack/rack/wiki/List-of-Middleware].
1383
52d4311 @gnandretta improves Spanish README
gnandretta authored
1384 == Pruebas
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1385
52d4311 @gnandretta improves Spanish README
gnandretta authored
1386 Las pruebas para las aplicaciones Sinatra pueden ser escritas utilizando
1387 cualquier framework o librería de pruebas basada en Rack. Se recomienda usar
e651ada @gnandretta fix link to Rack::Test docs in Spanish readme
gnandretta authored
1388 {Rack::Test}[http://rdoc.info/github/brynary/rack-test/master/frames]:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1389
1390 require 'mi_app_sinatra'
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1391 require 'test/unit'
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1392 require 'rack/test'
1393
1394 class MiAppTest < Test::Unit::TestCase
1395 include Rack::Test::Methods
1396
1397 def app
1398 Sinatra::Application
1399 end
1400
52d4311 @gnandretta improves Spanish README
gnandretta authored
1401 def test_mi_defecto
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1402 get '/'
1403 assert_equal 'Hola Mundo!', last_response.body
1404 end
1405
1406 def test_con_parametros
1407 get '/saludar', :name => 'Franco'
52d4311 @gnandretta improves Spanish README
gnandretta authored
1408 assert_equal 'Hola Frank!', last_response.body
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1409 end
1410
1411 def test_con_entorno_rack
1412 get '/', {}, 'HTTP_USER_AGENT' => 'Songbird'
1413 assert_equal "Estás usando Songbird!", last_response.body
1414 end
1415 end
1416
1417 == Sinatra::Base - Middleware, Librerías, y Aplicaciones Modulares
1418
1419 Definir tu aplicación en el top-level funciona bien para micro-aplicaciones
1420 pero trae inconvenientes considerables a la hora de construir componentes
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1421 reutilizables como Rack middleware, Rails metal, simple librerías con un
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1422 componente de servidor, o incluso extensiones de Sinatra. El DSL de top-level
1423 contamina el espacio de nombres de Object y asume una configuración apropiada
1424 para micro-aplicaciones (por ejemplo, un único archivo de aplicación, los
cf83a2b @gnandretta some markup fixes in Spanish readme
gnandretta authored
1425 directorios <tt>./public</tt> y <tt>./views</tt>, logging, página con detalles
1426 de excepción, etc.). Ahí es donde <tt>Sinatra::Base</tt> entra en el juego:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1427
1428 require 'sinatra/base'
1429
1430 class MiApp < Sinatra::Base
1431 set :sessions, true
1432 set :foo, 'bar'
1433
1434 get '/' do
1435 'Hola Mundo!'
1436 end
1437 end
1438
cf83a2b @gnandretta some markup fixes in Spanish readme
gnandretta authored
1439 Las subclases de <tt>Sinatra::Base</tt> tienen disponibles exactamente los
1440 mismos métodos que los provistos por el DSL de top-level. La mayoría de las
1441 aplicaciones top-level se pueden convertir en componentes
1442 <tt>Sinatra::Base</tt> con dos modificaciones:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1443
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1444 * Tu archivo debe requerir <tt>sinatra/base</tt> en lugar de +sinatra+; de otra
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1445 manera, todos los métodos del DSL de sinatra son importados dentro del
1446 espacio de nombres principal.
1447 * Poné las rutas, manejadores de errores, filtros y opciones de tu aplicación
cf83a2b @gnandretta some markup fixes in Spanish readme
gnandretta authored
1448 en una subclase de <tt>Sinatra::Base</tt>.
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1449
c4b9fdc @rkh Yet another markup fix for the README.
rkh authored
1450 <tt>Sinatra::Base</tt> es una pizarra en blanco. La mayoría de las opciones están
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1451 desactivadas por defecto, incluyendo el servidor incorporado. Mirá
1452 {Opciones y Configuraciones}[http://sinatra.github.com/configuration.html]
1453 para detalles sobre las opciones disponibles y su comportamiento.
1454
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1455 === Estilo Modular vs. Clásico
1456
1457 Contrariamente a la creencia popular, no hay nada de malo con el estilo clásico.
1458 Si se ajusta a tu aplicación, no es necesario que la cambies a una modular.
1459
1460 Existen tan solo dos desventajas en comparación con el estilo modular:
1461
1462 * Solamente podés tener una aplicación Sinatra por proceso Ruby - si tenés
1463 planificado usar más, cambiá al estilo modular.
1464
1465 * El estilo clásico contamina Object con métodos delegadores - si tenés
1466 planificado empaquetar tu aplicación en una librería/gem, cambiá al estilo
1467 modular.
1468
1469 No hay ninguna razón por la cuál no puedas mezclar los estilos modular y
1470 clásico.
1471
1472 Cuando cambiés de un estilo al otro, tené en cuenta las sutiles diferencias
1473 entre sus configuraciones:
1474
1475 Configuración Clásica Modular
1476
9c666ee @gnandretta doc new app_file default in Spanish readme
gnandretta authored
1477 app_file archivo que carga sinatra archivo con la subclase de Sinatra::Base
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1478 run $0 == app_file false
1479 logging true false
1480 method_override true false
1481 inline_templates true false
56bcd4c @gnandretta document static default value in spanish readme
gnandretta authored
1482 static true false
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1483
54384ec @gnandretta use same capitalization for all headings in spanish readme
gnandretta authored
1484 === Sirviendo una Aplicación Modular
612f046 @gnandretta explain using run! vs config.run in spanish readme
gnandretta authored
1485
1486 Las dos opciones más comunes para iniciar una aplicación modular son, iniciarla
1487 activamente con <tt>run!</tt>:
1488
1489 # mi_app.rb
1490 require 'sinatra/base'
1491
1492 class MiApp < Sinatra::Base
1493 # ... código de la app ...
1494
1495 # iniciar el servidor si el archivo fue ejecutado directamente
1496 run! if app_file == $0
1497 end
1498
1499 Iniciar con:
1500
1501 ruby mi_app.rb
1502
1503 O, con un archivo <tt>config.ru</tt>, que permite usar cualquier handler Rack:
1504
1505 # config.ru
b6d589e @rkh adjust readme examples so they work with 1.9.2 even if pwd is not on the...
rkh authored
1506 require './mi_app'
612f046 @gnandretta explain using run! vs config.run in spanish readme
gnandretta authored
1507 run MiApp
1508
1509 Después ejecutar:
1510
1511 rackup -p 4567
1512
54384ec @gnandretta use same capitalization for all headings in spanish readme
gnandretta authored
1513 === Usando una Aplicación Clásica con un Archivo config.ru
612f046 @gnandretta explain using run! vs config.run in spanish readme
gnandretta authored
1514
1515 Escribí el archivo de tu aplicación:
1516
1517 # app.rb
1518 require 'sinatra'
1519
1520 get '/' do
1521 'Hola mundo!'
1522 end
1523
1524 Y el <tt>config.ru</tt> correspondiente:
1525
b6d589e @rkh adjust readme examples so they work with 1.9.2 even if pwd is not on the...
rkh authored
1526 require './app'
612f046 @gnandretta explain using run! vs config.run in spanish readme
gnandretta authored
1527 run Sinatra::Application
1528
54384ec @gnandretta use same capitalization for all headings in spanish readme
gnandretta authored
1529 === ¿Cuándo Usar config.ru?
612f046 @gnandretta explain using run! vs config.run in spanish readme
gnandretta authored
1530
1531 Indicadores de que probablemente querés usar <tt>config.ru</tt>:
1532
1533 * Querés realizar el deploy con un hanlder Rack distinto (Passenger, Unicorn,
1534 Heroku, ...).
1535 * Querés usar más de una subclase de <tt>Sinatra::Base</tt>.
1536 * Querés usar Sinatra únicamente para middleware, pero no como un endpoint.
1537
1538 <b>No hay necesidad de utilizar un archivo <tt>config.ru</tt> exclusivamente
1539 porque tenés una aplicación modular, y no necesitás una aplicación modular para
1540 iniciarla con <tt>config.ru</tt>.</b>
1541
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1542 === Utilizando Sinatra como Middleware
1543
1544 Sinatra no solo es capaz de usar otro Rack middleware, sino que a su vez,
1545 cualquier aplicación Sinatra puede ser agregada delante de un endpoint Rack
1546 como middleware. Este endpoint puede ser otra aplicación Sinatra, o cualquier
79032f7 @gnandretta sync spanish readme, fixes #204
gnandretta authored
1547 aplicación basada en Rack (Rails/Ramaze/Camping/...):
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1548
1549 require 'sinatra/base'
1550
78bb1d9 @gnandretta update REAMDE.es.rdoc
gnandretta authored
1551 class PantallaDeLogin < Sinatra::Base
e6887fe @andrewhampton Fix typo in middleware example.
andrewhampton authored
1552 enable :sessions
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1553
1554 get('/login') { haml :login }
1555
1556 post('/login') do
e67c5ae @gnandretta fix Sinatra as middleware example in Spanish readme
gnandretta authored
1557 if params[:nombre] == 'admin' && params[:password] == 'admin'
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1558 session['nombre_de_usuario'] = params[:nombre]
1559 else
1560 redirect '/login'
1561 end
1562 end
1563 end
1564
1565 class MiApp < Sinatra::Base
1566 # el middleware se ejecutará antes que los filtros
1567 use PantallaDeLogin
1568
1569 before do
1570 unless session['nombre_de_usuario']
1571 halt "Acceso denegado, por favor <a href='/login'>iniciá sesión</a>."
1572 end
1573 end
1574
1575 get('/') { "Hola #{session['nombre_de_usuario']}." }
1576 end
1577
dbb4301 @gnandretta document Sinatra.new in spanish readme
gnandretta authored
1578 === Creación Dinámica de Aplicaciones
1579
1580 Puede que en algunas ocasiones quieras crear nuevas aplicaciones en
1581 tiempo de ejecución sin tener que asignarlas a una constante. Para
89506b2 @rkh README markup fix
rkh authored
1582 esto tenés <tt>Sinatra.new</tt>:
dbb4301 @gnandretta document Sinatra.new in spanish readme
gnandretta authored
1583
1584 require 'sinatra/base'
1585 mi_app = Sinatra.new { get('/') { "hola" } }
1586 mi_app.run!
1587
1588 Acepta como argumento opcional una aplicación desde la que se
1589 heredará:
1590
fd18d02 @gnandretta point out that the example is a config.ru in the other readmes
gnandretta authored
1591 # config.ru
dbb4301 @gnandretta document Sinatra.new in spanish readme
gnandretta authored
1592 require 'sinatra/base'
1593
1594 controller = Sinatra.new do
1595 enable :logging
1596 helpers MisHelpers
1597 end
1598
1599 map('/a') do
1600 run Sinatra.new(controller) { get('/') { 'a' } }
1601 end
1602
1603 map('/b') do
1604 run Sinatra.new(controller) { get('/') { 'b' } }
1605 end
1606
1607 Construir aplicaciones de esta forma resulta especialmente útil para
1608 testear extensiones Sinatra o para usar Sinatra en tus librerías.
1609
1610 Por otro lado, hace extremadamente sencillo usar Sinatra como
1611 middleware:
1612
1613 require 'sinatra/base'
1614
1615 use Sinatra do
1616 get('/') { ... }
1617 end
1618
1619 run ProyectoRails::Application
1620
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1621 == Ámbitos y Ligaduras
1622
1623 El ámbito en el que te encontrás determina que métodos y variables están
1624 disponibles.
1625
1626 === Ámbito de Aplicación/Clase
1627
cf83a2b @gnandretta some markup fixes in Spanish readme
gnandretta authored
1628 Cada aplicación Sinatra es una subclase de <tt>Sinatra::Base</tt>. Si estás
1629 usando el DSL de top-level (<tt>require 'sinatra'</tt>), entonces esta clase es
1630 <tt>Sinatra::Application</tt>, de otra manera es la subclase que creaste
1631 explícitamente. Al nivel de la clase tenés métodos como +get+ o +before+, pero
1632 no podés acceder a los objetos +request+ o +session+, ya que hay una única
1633 clase de la aplicación para todas las peticiones.
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1634
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1635 Las opciones creadas utilizando +set+ son métodos al nivel de la clase:
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1636
796d62a @kryzhovnik README.* fixed typos
kryzhovnik authored
1637 class MiApp < Sinatra::Base
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1638 # Ey, estoy en el ámbito de la aplicación!
1639 set :foo, 42
1640 foo # => 42
1641
1642 get '/foo' do
1643 # Hey, ya no estoy en el ámbito de la aplicación!
1644 end
1645 end
1646
1647 Tenés la ligadura al ámbito de la aplicación dentro de:
1648
1649 * El cuerpo de la clase de tu aplicación
1650 * Métodos definidos por extensiones
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1651 * El bloque pasado a +helpers+
1652 * Procs/bloques usados como el valor para +set+
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1653
1654 Este ámbito puede alcanzarse de las siguientes maneras:
1655
1656 * A través del objeto pasado a los bloques de configuración (<tt>configure { |c| ...}</tt>)
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1657 * Llamando a +settings+ desde dentro del ámbito de la petición
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1658
1659 === Ámbito de Petición/Instancia
1660
1661 Para cada petición entrante, una nueva instancia de la clase de tu aplicación
1662 es creada y todos los bloques de rutas son ejecutados en ese ámbito. Desde este
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1663 ámbito podés acceder a los objetos +request+ y +session+ o llamar a los métodos
1664 de renderización como +erb+ o +haml+. Podés acceder al ámbito de la aplicación
1665 desde el ámbito de la petición utilizando +settings+:
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1666
796d62a @kryzhovnik README.* fixed typos
kryzhovnik authored
1667 class MiApp < Sinatra::Base
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1668 # Ey, estoy en el ámbito de la aplicación!
1669 get '/definir_ruta/:nombre' do
1670 # Ámbito de petición para '/definir_ruta/:nombre'
1671 @valor = 42
1672
1673 settings.get("/#{params[:nombre]}") do
1674 # Ámbito de petición para "/#{params[:nombre]}"
1675 @valor # => nil (no es la misma petición)
1676 end
1677
1678 "Ruta definida!"
1679 end
1680 end
1681
1682 Tenés la ligadura al ámbito de la petición dentro de:
1683
78bb1d9 @gnandretta update REAMDE.es.rdoc
gnandretta authored
1684 * bloques pasados a get/head/post/put/delete/options
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1685 * filtros before/after
1686 * métodos ayudantes
1687 * plantillas/vistas
1688
1689 === Ámbito de Delegación
1690
1691 El ámbito de delegación solo reenvía métodos al ámbito de clase. De cualquier
1692 manera, no se comporta 100% como el ámbito de clase porque no tenés la ligadura
1693 de la clase: únicamente métodos marcados explícitamente para delegación están
1694 disponibles y no compartís variables/estado con el ámbito de clase (léase:
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1695 tenés un +self+ diferente). Podés agregar delegaciones de método llamando a
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1696 <tt>Sinatra::Delegator.delegate :nombre_del_metodo</tt>.
1697
1698 Tenés la ligadura al ámbito de delegación dentro de:
1699
1700 * La ligadura del top-level, si hiciste <tt>require "sinatra"</tt>
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1701 * Un objeto extendido con el mixin <tt>Sinatra::Delegator</tt>
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1702
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1703 Pegale una mirada al código: acá está el
1704 {Sinatra::Delegator mixin}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/base.rb#L1128]
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1705 que es {incluido en el espacio de nombres principal}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/main.rb#L28].
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1706
54384ec @gnandretta use same capitalization for all headings in spanish readme
gnandretta authored
1707 == Línea de Comandos
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1708
1709 Las aplicaciones Sinatra pueden ser ejecutadas directamente:
1710
1711 ruby miapp.rb [-h] [-x] [-e ENTORNO] [-p PUERTO] [-o HOST] [-s MANEJADOR]
1712
1713 Las opciones son:
1714
1715 -h # ayuda
1716 -p # asigna el puerto (4567 es usado por defecto)
1717 -o # asigna el host (0.0.0.0 es usado por defecto)
1718 -e # asigna el entorno (development es usado por defecto)
1719 -s # especifica el servidor/manejador rack (thin es usado por defecto)
1720 -x # activa el mutex lock (está desactivado por defecto)
1721
10534c1 @gnandretta drop Ruby 1.8.6 support in spanish readme
gnandretta authored
1722 == Versiones de Ruby Soportadas
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1723
1724 Las siguientes versiones de Ruby son soportadas oficialmente:
1725
1726 [ Ruby 1.8.7 ]
1727 1.8.7 es soportado completamente. Sin embargo, si no hay nada que te lo
1728 prohíba, te recomendamos que usés 1.9.2 o cambies a JRuby o Rubinius.
1729
1730 [ Ruby 1.9.2 ]
1731 1.9.2 es soportado y recomendado. Tené en cuenta que Radius y Markaby no
1732 son compatibles con 1.9 actualmente. Además, no usés 1.9.2p0, porque produce
c5ce5b1 @gnandretta change a word for a better one in Spanish readme
gnandretta authored
1733 fallos de segmentación cuando se ejecuta Sinatra.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1734
1735 [ Rubinius ]
e68e219 @gnandretta update supported versions in spanish readme
gnandretta authored
1736 Rubinius es soportado oficialmente (Rubinius >= 1.2.3). Todo
1737 funciona correctamente, incluyendo los lenguajes de plantillas.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1738
1739 [ JRuby ]
8dc9e35 @rkh jruby 1.6.1 now is able to gem install cexts out of the box
rkh authored
1740 JRuby es soportado oficialmente (JRuby >= 1.6.1). No se conocen
e68e219 @gnandretta update supported versions in spanish readme
gnandretta authored
1741 problemas con librerías de plantillas de terceras partes. Sin
1742 embargo, si elegís usar JRuby, deberías examinar sus Rack handlers
1743 porque el servidor web Thin no es soportado completamente. El
1744 soporte de JRuby para extensiones C se encuentra en una etapa
2dbc7bd @gnandretta doc redcarpet problem with JRuby in Spanish readme
gnandretta authored
1745 experimental, sin embargo, de momento solamente RDiscount y Redcarpted
1746 se ven afectadas.
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1747
11e28ad @gnandretta don't recommend using 1.8.6 in Spanish readme
gnandretta authored
1748 <b>Hemos dejado de soportar Ruby 1.8.6.</b> Si querés ejecutar Sinatra sobre
1749 1.8.6, podés utilizar la versión 1.2, pero tené en cuenta que una vez que
1750 Sinatra 1.4.0 sea liberado, ya no se corregirán los reportes de errores que se
1751 reciban.
10534c1 @gnandretta drop Ruby 1.8.6 support in spanish readme
gnandretta authored
1752
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1753 Siempre le prestamos atención a las nuevas versiones de Ruby.
1754
1755 Las siguientes implementaciones de Ruby no se encuentran soportadas
1756 oficialmente. De cualquier manera, pueden ejecutar Sinatra:
1757
1758 * Versiones anteriores de JRuby y Rubinius
e68e219 @gnandretta update supported versions in spanish readme
gnandretta authored
1759 * MacRuby, Maglev e IronRuby
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1760 * Ruby 1.9.0 y 1.9.1
1761
1762 No estar soportada oficialmente, significa que si las cosas solamente se rompen
1763 ahí y no en una plataforma soportada, asumimos que no es nuestro problema sino
1764 el suyo.
1765
e68e219 @gnandretta update supported versions in spanish readme
gnandretta authored
1766 Nuestro servidor CI también se ejecuta sobre ruby-head (que será la
1767 próxima versión 1.9.3). Como está en movimiento constante, no podemos
1768 garantizar nada. De todas formas, podés contar con que 1.9.3-p0 sea
1769 soportada.
1770
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1771 Sinatra debería funcionar en cualquier sistema operativo soportado por la
1772 implementación de Ruby elegida.
1773
54384ec @gnandretta use same capitalization for all headings in spanish readme
gnandretta authored
1774 == A la Vanguardia
2f3c99a @gnandretta update 'A la Vanguardia' section in spanish readme
gnandretta authored
1775
1776 Si querés usar el código de Sinatra más reciente, sentite libre de ejecutar
1777 tu aplicación sobre la rama master, en general es bastante estable.
1778
1779 También liberamos prereleases de vez en cuando, así, podés hacer
1780
1781 gem install sinatra --pre
1782
1783 Para obtener algunas de las últimas características.
1784
68b6e0e @gnandretta recomend Bundler in 'A la Vanguardia' section in spanish readme
gnandretta authored
1785 === Con Bundler
1786
1787 Esta es la manera recomendada para ejecutar tu aplicación sobre la última
1788 versión de Sinatra usando {Bundler}[http://gembundler.com/].
1789
1790 Primero, instalá bundler si no lo hiciste todavía:
1791
1792 gem install bundler
1793
1794 Después, en el directorio de tu proyecto, creá un archivo +Gemfile+:
1795
1796 source :rubygems
1797 gem 'sinatra', :git => "git://github.com/sinatra/sinatra.git"
1798
1799 # otras dependencias
1800 gem 'haml' # por ejemplo, si usás haml
1801 gem 'activerecord', '~> 3.0' # quizás también necesités ActiveRecord 3.x
1802
1803 Tené en cuenta que tenés que listar todas las dependencias directas de tu
1804 aplicación. No es necesario listar las dependencias de Sinatra (Rack y Tilt)
1805 porque Bundler las agrega directamente.
1806
1807 Ahora podés arrancar tu aplicación así:
1808
1809 bundle exec ruby miapp.rb
1810
1811 === Con Git
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1812
2f3c99a @gnandretta update 'A la Vanguardia' section in spanish readme
gnandretta authored
1813 Cloná el repositorio localmente y ejecutá tu aplicación, asegurándote que el
32b6e6f @gnandretta Spanish readme update - merges #191.
gnandretta authored
1814 directorio <tt>sinatra/lib</tt> esté en el <tt>$LOAD_PATH</tt>:
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1815
1816 cd miapp
1817 git clone git://github.com/sinatra/sinatra.git
1818 ruby -Isinatra/lib miapp.rb
1819
1820 Para actualizar el código fuente de Sinatra en el futuro:
1821
619655c @gnandretta make paths consistent in spanish readme example
gnandretta authored
1822 cd miapp/sinatra
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1823 git pull
1824
2f3c99a @gnandretta update 'A la Vanguardia' section in spanish readme
gnandretta authored
1825 === Instalación Global
1826
1827 Podés construir la gem vos mismo:
1828
1829 git clone git://github.com/sinatra/sinatra.git
1830 cd sinatra
1831 rake sinatra.gemspec
1832 rake install
1833
1834 Si instalás tus gems como root, el último paso debería ser
1835
1836 sudo rake install
1837
79032f7 @gnandretta sync spanish readme, fixes #204
gnandretta authored
1838 == Versionado
1839
1840 Sinatra utiliza el {Versionado Semántico}[http://semver.org/],
1841 siguiendo las especificaciones SemVer y SemVerTag.
1842
54384ec @gnandretta use same capitalization for all headings in spanish readme
gnandretta authored
1843 == Lecturas Recomendadas
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1844
1845 * {Sito web del proyecto}[http://www.sinatrarb.com/] - Documentación
1846 adicional, noticias, y enlaces a otros recursos.
1847 * {Contribuyendo}[http://www.sinatrarb.com/contributing] - ¿Encontraste un
1848 error?. ¿Necesitás ayuda?. ¿Tenés un parche?.
a75b9ac @gnandretta syncs up the README spanish translation
gnandretta authored
1849 * {Seguimiento de problemas}[http://github.com/sinatra/sinatra/issues]
94022d6 @gnandretta Add README's spanish translation.
gnandretta authored
1850 * {Twitter}[http://twitter.com/sinatra]
1851 * {Lista de Correo}[http://groups.google.com/group/sinatrarb/topics]
1852 * {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] en http://freenode.net
3c57794 @gnandretta add book and book-contrib links to Spanish readme
gnandretta authored
1853 * {Sinatra Book}[http://sinatra-book.gittr.com] Tutorial (en inglés).
1854 * {Sinatra Book Contrib}[http://sinatra-book-contrib.com/] Recetas contribuidas
1855 por la comunidad (en inglés).
afe9ddf @gnandretta add link to rubydoc.info in spanish readme
gnandretta authored
1856 * Documentación de la API para la
1857 {última versión liberada}[http://rubydoc.info/gems/sinatra] o para la
1858 {rama de desarrollo actual}[http://rubydoc.info/github/sinatra/sinatra]
1859 en http://rubydoc.info/
723649a @gnandretta add link to CI server in Spanish readme
gnandretta authored
1860 * {Servidor de IC}[http://ci.rkh.im/view/Sinatra/]
Something went wrong with that request. Please try again.