sinatra 1.1.4 → 1.2.0.a
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sinatra might be problematic. Click here for more details.
- data/AUTHORS +0 -9
- data/CHANGES +6 -29
- data/README.de.rdoc +23 -0
- data/README.es.rdoc +87 -205
- data/README.fr.rdoc +13 -0
- data/README.jp.rdoc +13 -0
- data/README.rdoc +86 -258
- data/README.ru.rdoc +63 -95
- data/README.zh.rdoc +13 -0
- data/Rakefile +21 -55
- data/lib/sinatra/base.rb +43 -44
- data/sinatra.gemspec +7 -4
- data/test/filter_test.rb +105 -1
- data/test/helpers_test.rb +7 -3
- data/test/markaby_test.rb +21 -0
- data/test/routing_test.rb +6 -18
- data/test/slim_test.rb +97 -0
- data/test/templates_test.rb +14 -4
- data/test/views/hello.slim +1 -0
- data/test/views/layout2.slim +3 -0
- metadata +98 -12
- data/test/views/calc.html.erb +0 -1
data/AUTHORS
CHANGED
@@ -36,15 +36,6 @@ Sinatra would not be possible:
|
|
36
36
|
* Rick Olson (technoweenie) for the killer plug at RailsConf '08.
|
37
37
|
* Steven Garcia for the amazing custom artwork you see on 404's and 500's
|
38
38
|
* Pat Nakajima (nakajima) for fixing non-nested params in nested params Hash's.
|
39
|
-
* Konstantin Haase for his hard work and ongoing commitment to improving
|
40
|
-
Sinatra, for 1.1.0, 1.2.0 and beyond..
|
41
|
-
* Zachary Scott for adding Konstantin to the AUTHORS file. He also did help
|
42
|
-
writing the book, but mainly for adding Konstantin.
|
43
|
-
* Gabriel Andretta for having people wonder whether our documentation is
|
44
|
-
actually in English or in Spanish.
|
45
|
-
* Vasily Polovnyov, Nickolay Schwarz, Luciano Sousa, Wu Jiang, Mickael Riga,
|
46
|
-
Bernhard Essl, Janos Hardi, Kouhei Yanagita and "burningTyger" for willingly
|
47
|
-
translating whatever ends up in the README.
|
48
39
|
|
49
40
|
and last but not least:
|
50
41
|
|
data/CHANGES
CHANGED
@@ -1,31 +1,12 @@
|
|
1
|
-
= 1.
|
1
|
+
= 1.2.0 / Not Yet Released
|
2
2
|
|
3
|
-
*
|
3
|
+
* Added `slim` rendering method for rendering Slim templates. (Steve
|
4
|
+
Hodgkiss)
|
4
5
|
|
5
|
-
|
6
|
+
* The `markaby` rendering method now allows passing a block, making inline
|
7
|
+
usage possible. Requires Tilt 1.2 or newer. (Konstantin Haase)
|
6
8
|
|
7
|
-
|
8
|
-
(Konstantin Haase)
|
9
|
-
|
10
|
-
* Fix some routing tests that have been skipped by accident (Ross A. Baker)
|
11
|
-
|
12
|
-
* Fix rendering issues with Builder and Nokogiri (Konstantin Haase)
|
13
|
-
|
14
|
-
* Replace last_modified helper with better implementation. (cactus,
|
15
|
-
Konstantin Haase)
|
16
|
-
|
17
|
-
* Fix issue with charset not being set when using `provides` condition.
|
18
|
-
(Konstantin Haase)
|
19
|
-
|
20
|
-
* Fix issue with `render` not picking up all alternative file extensions for
|
21
|
-
a rendering engine - it was not possible to register ".html.erb" without
|
22
|
-
tricks. (Konstantin Haase)
|
23
|
-
|
24
|
-
= 1.1.2 / 2010-10-25
|
25
|
-
|
26
|
-
Like 1.1.1, but with proper CHANGES file.
|
27
|
-
|
28
|
-
= 1.1.1 / 2010-10-25
|
9
|
+
= 1.1.1 / Not Yet Released
|
29
10
|
|
30
11
|
* README has been translated to Russian (Nickolay Schwarz, Vasily Polovnyov)
|
31
12
|
and Portuguese (Luciano Sousa).
|
@@ -53,10 +34,6 @@ Like 1.1.1, but with proper CHANGES file.
|
|
53
34
|
* Headers set by cache_control now always set max_age as an Integer, making
|
54
35
|
sure it is compatible with RFC2616. (Konstantin Haase)
|
55
36
|
|
56
|
-
* Further improved handling of string encodings on Ruby 1.9, templates now
|
57
|
-
honor default_encoding and URLs support unicode characters. (Konstantin
|
58
|
-
Haase)
|
59
|
-
|
60
37
|
= 1.1.0 / 2010-10-24
|
61
38
|
|
62
39
|
* Before and after filters now support pattern matching, including the
|
data/README.de.rdoc
CHANGED
@@ -433,6 +433,19 @@ Das markaby gem wird benötigt, um Markaby-Templates rendern zu können:
|
|
433
433
|
|
434
434
|
Dieser Code rendert <tt>./views/index.mab</tt>.
|
435
435
|
|
436
|
+
=== Slim-Templates
|
437
|
+
|
438
|
+
Das slim gem wird benötigt, um Slim-Templates rendern zu können:
|
439
|
+
|
440
|
+
## slim muss eingebunden werden
|
441
|
+
require 'slim'
|
442
|
+
|
443
|
+
get '/' do
|
444
|
+
slim :index
|
445
|
+
end
|
446
|
+
|
447
|
+
Dieser Code rendert <tt>./views/index.slim</tt>.
|
448
|
+
|
436
449
|
=== CoffeeScript-Templates
|
437
450
|
|
438
451
|
Das coffee-script gem und das `coffee`-Programm werden benötigt, um CoffeScript-Templates rendern zu können:
|
@@ -571,6 +584,16 @@ Filter können optional auch mit einem Pattern ausgestattet werden, welche auf d
|
|
571
584
|
session[:last_slug] = slug
|
572
585
|
end
|
573
586
|
|
587
|
+
Ähnlich wie Routen können Filter auch mit weiteren Bedingungen eingeschränkt werden:
|
588
|
+
|
589
|
+
before :agent => /Songbird/ do
|
590
|
+
# ...
|
591
|
+
end
|
592
|
+
|
593
|
+
after '/blog/*', :host_name => 'example.com' do
|
594
|
+
# ...
|
595
|
+
end
|
596
|
+
|
574
597
|
== Anhalten
|
575
598
|
|
576
599
|
Zum sofortigen stoppen eines Request in einem Filter oder einer Route:
|
data/README.es.rdoc
CHANGED
@@ -39,6 +39,11 @@ Cada ruta se asocia con un bloque:
|
|
39
39
|
.. aniquilar algo ..
|
40
40
|
end
|
41
41
|
|
42
|
+
options '/' do
|
43
|
+
.. informar algo ..
|
44
|
+
end
|
45
|
+
|
46
|
+
|
42
47
|
Las rutas son comparadas en el orden en el que son definidas. La primer ruta
|
43
48
|
que coincide con la petición es invocada.
|
44
49
|
|
@@ -146,7 +151,7 @@ De esa manera podemos, por ejemplo, implementar fácilmente un streaming:
|
|
146
151
|
|
147
152
|
get('/') { Stream.new }
|
148
153
|
|
149
|
-
== Archivos
|
154
|
+
== Archivos estáticos
|
150
155
|
|
151
156
|
Los archivos estáticos son servidos desde el directorio público
|
152
157
|
<tt>./public</tt>. Podés especificar una ubicación diferente ajustando la
|
@@ -173,7 +178,7 @@ les pase como argumento.
|
|
173
178
|
|
174
179
|
=== Plantillas Haml
|
175
180
|
|
176
|
-
La gem/librería
|
181
|
+
La gem/librería haml es necesaria para para renderizar plantillas HAML:
|
177
182
|
|
178
183
|
## Vas a necesitar requerir haml en tu app
|
179
184
|
require 'haml'
|
@@ -206,9 +211,9 @@ y reemplazadas individualmente.
|
|
206
211
|
|
207
212
|
Renderiza <tt>./views/index.erb</tt>
|
208
213
|
|
209
|
-
===
|
214
|
+
=== Erubis
|
210
215
|
|
211
|
-
La gem/librería
|
216
|
+
La gem/librería erubis es necesaria para renderizar plantillas erubis:
|
212
217
|
|
213
218
|
## Vas a necesitar requerir erubis en tu app
|
214
219
|
require 'erubis'
|
@@ -217,23 +222,11 @@ La gem/librería <tt>erubis</tt> es necesaria para renderizar plantillas Erubis:
|
|
217
222
|
erubis :index
|
218
223
|
end
|
219
224
|
|
220
|
-
Renderiza <tt>./views/index.erubis</tt
|
221
|
-
|
222
|
-
También es posible reemplazar Erb con Erubis:
|
223
|
-
|
224
|
-
require 'erubis'
|
225
|
-
Tilt.register :erb, Tilt[:erubis]
|
226
|
-
|
227
|
-
get '/' do
|
228
|
-
erb :index
|
229
|
-
end
|
230
|
-
|
231
|
-
Renderiza <tt>./views/index.erb</tt> con Erubis.
|
225
|
+
Renderiza <tt>./views/index.erubis</tt>
|
232
226
|
|
233
227
|
=== Plantillas Builder
|
234
228
|
|
235
|
-
La gem/librería
|
236
|
-
builder:
|
229
|
+
La gem/librería builder es necesaria para renderizar plantillas builder:
|
237
230
|
|
238
231
|
## Vas a necesitar requerir builder en tu app
|
239
232
|
require 'builder'
|
@@ -246,8 +239,7 @@ Renderiza <tt>./views/index.builder</tt>.
|
|
246
239
|
|
247
240
|
=== Plantillas Nokogiri
|
248
241
|
|
249
|
-
La gem/librería
|
250
|
-
nokogiri:
|
242
|
+
La gem/librería nokogiri es necesaria para renderizar plantillas nokogiri:
|
251
243
|
|
252
244
|
## Vas a necesitar requerir nokogiri en tu app
|
253
245
|
require 'nokogiri'
|
@@ -260,8 +252,7 @@ Renderiza <tt>./views/index.nokogiri</tt>.
|
|
260
252
|
|
261
253
|
=== Plantillas Sass
|
262
254
|
|
263
|
-
La gem/librería
|
264
|
-
plantillas Sass:
|
255
|
+
La gem/librería haml es necesaria para renderizar plantillas Sass:
|
265
256
|
|
266
257
|
## Vas a necesitar requerir haml o sass en tu app
|
267
258
|
require 'sass'
|
@@ -285,8 +276,7 @@ y reemplazadas individualmente.
|
|
285
276
|
|
286
277
|
=== Plantillas Scss
|
287
278
|
|
288
|
-
La gem/librería
|
289
|
-
plantillas Scss:
|
279
|
+
La gem/librería haml es necesaria para renderizar plantillas Scss:
|
290
280
|
|
291
281
|
## Vas a necesitar requerir haml o sass en tu app
|
292
282
|
require 'sass'
|
@@ -310,7 +300,7 @@ y reemplazadas individualmente.
|
|
310
300
|
|
311
301
|
=== Plantillas Less
|
312
302
|
|
313
|
-
La gem/librería
|
303
|
+
La gem/librería less es necesaria para renderizar plantillas Less:
|
314
304
|
|
315
305
|
## Vas a necesitar requerir less en tu app
|
316
306
|
require 'less'
|
@@ -323,7 +313,7 @@ Renderiza <tt>./views/stylesheet.less</tt>.
|
|
323
313
|
|
324
314
|
=== Plantillas Liquid
|
325
315
|
|
326
|
-
La gem/librería
|
316
|
+
La gem/librería liquid es necesaria para renderizar plantillas Liquid:
|
327
317
|
|
328
318
|
## Vas a necesitar requerir liquid en tu app
|
329
319
|
require 'liquid'
|
@@ -341,8 +331,7 @@ plantilla Liquid, casi siempre vas a querer pasarle locales:
|
|
341
331
|
|
342
332
|
=== Plantillas Markdown
|
343
333
|
|
344
|
-
La gem/librería
|
345
|
-
Markdown:
|
334
|
+
La gem/librería rdiscount es necesaria para renderizar plantillas Markdown:
|
346
335
|
|
347
336
|
## Vas a necesitar requerir rdiscount en tu app
|
348
337
|
require "rdiscount"
|
@@ -359,30 +348,15 @@ generalmente vas a usarlo en combinación con otro motor de renderizado:
|
|
359
348
|
|
360
349
|
erb :resumen, :locals => { :texto => markdown(:introduccion) }
|
361
350
|
|
362
|
-
Tené en cuenta que también podés llamar al método
|
351
|
+
Tené en cuenta que también podés llamar al método markdown desde otras
|
363
352
|
plantillas:
|
364
353
|
|
365
354
|
%h1 Hola Desde Haml!
|
366
355
|
%p= markdown(:saludos)
|
367
356
|
|
368
|
-
|
357
|
+
=== Plantilla Textile
|
369
358
|
|
370
|
-
|
371
|
-
|
372
|
-
Tilt.register 'markdown', BlueClothTemplate
|
373
|
-
Tilt.register 'mkd', BlueClothTemplate
|
374
|
-
Tilt.register 'md', BlueClothTemplate
|
375
|
-
|
376
|
-
get '/' do
|
377
|
-
markdown :index
|
378
|
-
end
|
379
|
-
|
380
|
-
Renderiza <tt>./views/index.md</tt> con BlueCloth.
|
381
|
-
|
382
|
-
=== Plantillas Textile
|
383
|
-
|
384
|
-
La gem/librería <tt>RedCloth</tt> es necesaria para renderizar plantillas
|
385
|
-
Textile:
|
359
|
+
La gem/librería RedCloth es necesaria para renderizar plantillas Textile:
|
386
360
|
|
387
361
|
## Vas a necesitar requerir redcloth en tu app
|
388
362
|
require "redcloth"
|
@@ -398,7 +372,7 @@ generalmente vas a usarlo en combinación con otro motor de renderizado:
|
|
398
372
|
|
399
373
|
erb :resumen, :locals => { :texto => textile(:introduccion) }
|
400
374
|
|
401
|
-
Tené en cuenta que también podés llamar al método
|
375
|
+
Tené en cuenta que también podés llamar al método textile desde otras
|
402
376
|
plantillas:
|
403
377
|
|
404
378
|
%h1 Hola Desde Haml!
|
@@ -406,7 +380,7 @@ plantillas:
|
|
406
380
|
|
407
381
|
=== Plantillas RDoc
|
408
382
|
|
409
|
-
La gem/librería
|
383
|
+
La gem/librería RDoc es necesaria para renderizar plantillas RDoc:
|
410
384
|
|
411
385
|
## Vas a necesitar requerir rdoc en tu app
|
412
386
|
require "rdoc"
|
@@ -422,7 +396,7 @@ generalmente vas a usarlo en combinación con otro motor de renderizado:
|
|
422
396
|
|
423
397
|
erb :resumen, :locals => { :texto => rdoc(:introduccion) }
|
424
398
|
|
425
|
-
Tené en cuenta que también podés llamar al método
|
399
|
+
Tené en cuenta que también podés llamar al método rdoc desde otras
|
426
400
|
plantillas:
|
427
401
|
|
428
402
|
%h1 Hola Desde Haml!
|
@@ -430,7 +404,7 @@ plantillas:
|
|
430
404
|
|
431
405
|
=== Plantillas Radius
|
432
406
|
|
433
|
-
La gem/librería
|
407
|
+
La gem/librería radius es necesaria para renderizar plantillas Radius:
|
434
408
|
|
435
409
|
## Vas a necesitar requerir radius en tu app
|
436
410
|
require 'radius'
|
@@ -448,8 +422,7 @@ plantilla Radius, casi siempre vas a querer pasarle locales:
|
|
448
422
|
|
449
423
|
=== Plantillas Markaby
|
450
424
|
|
451
|
-
La gem/librería
|
452
|
-
Markaby:
|
425
|
+
La gem/librería markaby es necesaria para renderizar plantillas Markaby:
|
453
426
|
|
454
427
|
## Vas a necesitar requerir markaby en tu app
|
455
428
|
require 'markaby'
|
@@ -460,16 +433,30 @@ Markaby:
|
|
460
433
|
|
461
434
|
Renderiza <tt>./views/index.mab</tt>.
|
462
435
|
|
463
|
-
|
436
|
+
Si tenés Tilt 1.2 o posterior, podés usar markaby inline:
|
464
437
|
|
465
|
-
|
466
|
-
|
438
|
+
get '/' do
|
439
|
+
markaby { h1 "Bienvenido!" }
|
440
|
+
end
|
441
|
+
|
442
|
+
|
443
|
+
=== Plantillas Slim
|
467
444
|
|
468
|
-
|
469
|
-
* utilizar OSX
|
470
|
-
* la gem/librería +therubyracer+
|
445
|
+
La gem/librería slim es necesaria para renderizar plantillas Slim:
|
471
446
|
|
472
|
-
|
447
|
+
## Vas a necesitar requerir slim en tu app
|
448
|
+
require 'slim'
|
449
|
+
|
450
|
+
get '/' do
|
451
|
+
slim :index
|
452
|
+
end
|
453
|
+
|
454
|
+
Renderiza <tt>./views/index.slim</tt>.
|
455
|
+
|
456
|
+
=== Plantillas CoffeeScript
|
457
|
+
|
458
|
+
La gem/librería coffee-script y el binario `coffee` son necesarios para
|
459
|
+
renderizar plantillas CoffeeScript:
|
473
460
|
|
474
461
|
## Vas a necesitar requerir coffee-script en tu app
|
475
462
|
require 'coffee-script'
|
@@ -480,13 +467,13 @@ son necesarios para renderizar plantillas CoffeeScript:
|
|
480
467
|
|
481
468
|
Renderiza <tt>./views/application.coffee</tt>.
|
482
469
|
|
483
|
-
=== Plantillas
|
470
|
+
=== Plantillas Inline
|
484
471
|
|
485
472
|
get '/' do
|
486
473
|
haml '%div.titulo Hola Mundo'
|
487
474
|
end
|
488
475
|
|
489
|
-
Renderiza el template
|
476
|
+
Renderiza el template contenido en el string.
|
490
477
|
|
491
478
|
=== Accediendo a Variables en Plantillas
|
492
479
|
|
@@ -552,39 +539,13 @@ Las plantillas también pueden ser definidas usando el método top-level
|
|
552
539
|
end
|
553
540
|
|
554
541
|
Si existe una plantilla con el nombre "layout", va a ser usada cada vez que
|
555
|
-
una plantilla es renderizada. Podés desactivar los layouts
|
556
|
-
|
557
|
-
<tt>set :haml, :layout => false</tt>.
|
542
|
+
una plantilla es renderizada. Podés desactivar los layouts pasando
|
543
|
+
<tt>:layout => false</tt>.
|
558
544
|
|
559
545
|
get '/' do
|
560
546
|
haml :index, :layout => !request.xhr?
|
561
547
|
end
|
562
548
|
|
563
|
-
=== Asociando Extensiones de Archivo
|
564
|
-
|
565
|
-
Para asociar una extensión de archivo con un motor de renderizado, usá
|
566
|
-
<tt>Tilt.register</tt>. Por ejemplo, si querés usar la extensión +tt+ para
|
567
|
-
las plantillas Textile, podés hacer lo siguiente:
|
568
|
-
|
569
|
-
Tilt.register :tt, Tilt[:textile]
|
570
|
-
|
571
|
-
=== Agregando Tu Propio Motor de Renderizado
|
572
|
-
|
573
|
-
Primero, registrá tu motor con Tilt, y después, creá tu método de renderizado:
|
574
|
-
|
575
|
-
Tilt.register :mipg, MiMotorParaPlantillaGenial
|
576
|
-
|
577
|
-
helpers do
|
578
|
-
def mypg(*args) render(:mypg, *args) end
|
579
|
-
end
|
580
|
-
|
581
|
-
get '/' do
|
582
|
-
mypg :index
|
583
|
-
end
|
584
|
-
|
585
|
-
Renderiza <tt>./views/index.mypg</tt>. Mirá https://github.com/rtomayko/tilt
|
586
|
-
para aprender más de Tilt.
|
587
|
-
|
588
549
|
== Ayudantes
|
589
550
|
|
590
551
|
Usá el método top-level <tt>helpers</tt> para definir métodos ayudantes que
|
@@ -638,6 +599,16 @@ patrón:
|
|
638
599
|
session[:ultimo_slug] = slug
|
639
600
|
end
|
640
601
|
|
602
|
+
Al igual que las rutas, los filtros también aceptan condiciones:
|
603
|
+
|
604
|
+
before :agent => /Songbird/ do
|
605
|
+
# ...
|
606
|
+
end
|
607
|
+
|
608
|
+
after '/blog/*', :host_name => 'ejemplo.com' do
|
609
|
+
# ...
|
610
|
+
end
|
611
|
+
|
641
612
|
== Interrupción
|
642
613
|
|
643
614
|
Para detener inmediatamente una petición dentro de un filtro o una ruta usá:
|
@@ -747,7 +718,7 @@ Ejecutar cuando el entorno es <tt>:production</tt> o <tt>:test</tt>:
|
|
747
718
|
...
|
748
719
|
end
|
749
720
|
|
750
|
-
== Manejo de
|
721
|
+
== Manejo de errores
|
751
722
|
|
752
723
|
Los manejadores de errores se ejecutan dentro del mismo contexto que las rutas
|
753
724
|
y los filtros before, lo que significa que podés usar, por ejemplo,
|
@@ -913,6 +884,13 @@ etc.). Ahí es donde Sinatra::Base entra en el juego:
|
|
913
884
|
end
|
914
885
|
end
|
915
886
|
|
887
|
+
La clase MiApp es un componente Rack independiente que puede actuar como Rack
|
888
|
+
middleware, una aplicación Rack, o Rails metal. Podés usar (con +use+) o
|
889
|
+
ejecutar (con +run+) esta clase desde un archivo rackup +config.ru+; o,
|
890
|
+
controlar un componente de servidor provisto como una librería:
|
891
|
+
|
892
|
+
MiApp.run! :host => 'localhost', :port => 9090
|
893
|
+
|
916
894
|
Las subclases de Sinatra::Base tienen disponibles exactamente los mismos
|
917
895
|
métodos que los provistos por el DSL de top-level. La mayoría de las
|
918
896
|
aplicaciones top-level se pueden convertir en componentes Sinatra::Base con
|
@@ -929,64 +907,6 @@ desactivadas por defecto, incluyendo el servidor incorporado. Mirá
|
|
929
907
|
{Opciones y Configuraciones}[http://sinatra.github.com/configuration.html]
|
930
908
|
para detalles sobre las opciones disponibles y su comportamiento.
|
931
909
|
|
932
|
-
=== Sirviendo una Aplicación Modular
|
933
|
-
|
934
|
-
Las dos opciones más comunes para iniciar una aplicación modular son, iniciarla
|
935
|
-
activamente con <tt>run!</tt>:
|
936
|
-
|
937
|
-
# mi_app.rb
|
938
|
-
require 'sinatra/base'
|
939
|
-
|
940
|
-
class MiApp < Sinatra::Base
|
941
|
-
# ... código de la app ...
|
942
|
-
|
943
|
-
# iniciar el servidor si el archivo fue ejecutado directamente
|
944
|
-
run! if app_file == $0
|
945
|
-
end
|
946
|
-
|
947
|
-
Iniciar con:
|
948
|
-
|
949
|
-
ruby mi_app.rb
|
950
|
-
|
951
|
-
O, con un archivo <tt>config.ru</tt>, que permite usar cualquier handler Rack:
|
952
|
-
|
953
|
-
# config.ru
|
954
|
-
require 'mi_app'
|
955
|
-
run MiApp
|
956
|
-
|
957
|
-
Después ejecutar:
|
958
|
-
|
959
|
-
rackup -p 4567
|
960
|
-
|
961
|
-
=== Usando una Aplicación Clásica con un Archivo config.ru
|
962
|
-
|
963
|
-
Escribí el archivo de tu aplicación:
|
964
|
-
|
965
|
-
# app.rb
|
966
|
-
require 'sinatra'
|
967
|
-
|
968
|
-
get '/' do
|
969
|
-
'Hola mundo!'
|
970
|
-
end
|
971
|
-
|
972
|
-
Y el <tt>config.ru</tt> correspondiente:
|
973
|
-
|
974
|
-
require 'app'
|
975
|
-
run Sinatra::Application
|
976
|
-
|
977
|
-
=== ¿Cuándo Usar config.ru?
|
978
|
-
|
979
|
-
Indicadores de que probablemente querés usar <tt>config.ru</tt>:
|
980
|
-
|
981
|
-
* Querés realizar el deploy con un hanlder Rack distinto (Passenger, Unicorn,
|
982
|
-
Heroku, ...).
|
983
|
-
* Querés usar más de una subclase de <tt>Sinatra::Base</tt>.
|
984
|
-
* Querés usar Sinatra únicamente para middleware, pero no como un endpoint.
|
985
|
-
|
986
|
-
<b>No hay necesidad de utilizar un archivo <tt>config.ru</tt> exclusivamente
|
987
|
-
porque tenés una aplicación modular, y no necesitás una aplicación modular para
|
988
|
-
iniciarla con <tt>config.ru</tt>.</b>
|
989
|
-
|
990
910
|
=== Utilizando Sinatra como Middleware
|
991
911
|
|
992
912
|
Sinatra no solo es capaz de usar otro Rack middleware, sino que a su vez,
|
@@ -996,7 +916,7 @@ aplicación basada en Rack (Rails/Ramaze/Camping/...).
|
|
996
916
|
|
997
917
|
require 'sinatra/base'
|
998
918
|
|
999
|
-
class PantallaDeLogin< Sinatra::Base
|
919
|
+
class PantallaDeLogin < Sinatra::Base
|
1000
920
|
enable :sessions
|
1001
921
|
|
1002
922
|
get('/login') { haml :login }
|
@@ -1086,7 +1006,7 @@ desde el ámbito de la petición utilizando `settings`:
|
|
1086
1006
|
|
1087
1007
|
Tenés la ligadura al ámbito de la petición dentro de:
|
1088
1008
|
|
1089
|
-
* bloques pasados a get/head/post/put/delete
|
1009
|
+
* bloques pasados a get/head/post/put/delete/options
|
1090
1010
|
* filtros before/after
|
1091
1011
|
* métodos ayudantes
|
1092
1012
|
* plantillas/vistas
|
@@ -1109,7 +1029,7 @@ Pegale una mirada al código: acá está el
|
|
1109
1029
|
{Sinatra::Delegator mixin}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/base.rb#L1128]
|
1110
1030
|
que es {incluido en el espacio de nombres principal}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/main.rb#L28].
|
1111
1031
|
|
1112
|
-
== Línea de
|
1032
|
+
== Línea de comandos
|
1113
1033
|
|
1114
1034
|
Las aplicaciones Sinatra pueden ser ejecutadas directamente:
|
1115
1035
|
|
@@ -1124,71 +1044,33 @@ Las opciones son:
|
|
1124
1044
|
-s # especifica el servidor/manejador rack (thin es usado por defecto)
|
1125
1045
|
-x # activa el mutex lock (está desactivado por defecto)
|
1126
1046
|
|
1127
|
-
== A la
|
1128
|
-
|
1129
|
-
Si querés usar el código de Sinatra más reciente, sentite libre de ejecutar
|
1130
|
-
tu aplicación sobre la rama master, en general es bastante estable.
|
1131
|
-
|
1132
|
-
También liberamos prereleases de vez en cuando, así, podés hacer
|
1133
|
-
|
1134
|
-
gem install sinatra --pre
|
1135
|
-
|
1136
|
-
Para obtener algunas de las últimas características.
|
1137
|
-
|
1138
|
-
=== Con Bundler
|
1139
|
-
|
1140
|
-
Esta es la manera recomendada para ejecutar tu aplicación sobre la última
|
1141
|
-
versión de Sinatra usando {Bundler}[http://gembundler.com/].
|
1142
|
-
|
1143
|
-
Primero, instalá bundler si no lo hiciste todavía:
|
1144
|
-
|
1145
|
-
gem install bundler
|
1146
|
-
|
1147
|
-
Después, en el directorio de tu proyecto, creá un archivo +Gemfile+:
|
1148
|
-
|
1149
|
-
source :rubygems
|
1150
|
-
gem 'sinatra', :git => "git://github.com/sinatra/sinatra.git"
|
1151
|
-
|
1152
|
-
# otras dependencias
|
1153
|
-
gem 'haml' # por ejemplo, si usás haml
|
1154
|
-
gem 'activerecord', '~> 3.0' # quizás también necesités ActiveRecord 3.x
|
1155
|
-
|
1156
|
-
Tené en cuenta que tenés que listar todas las dependencias directas de tu
|
1157
|
-
aplicación. No es necesario listar las dependencias de Sinatra (Rack y Tilt)
|
1158
|
-
porque Bundler las agrega directamente.
|
1047
|
+
== A la vanguardia
|
1159
1048
|
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1164
|
-
=== Con Git
|
1165
|
-
|
1166
|
-
Cloná el repositorio localmente y ejecutá tu aplicación, asegurándote que el
|
1167
|
-
directorio <tt>sinatra/lib</tt> esté en el <tt>LOAD_PATH</tt>:
|
1049
|
+
Si querés usar el código de Sinatra más reciente, cloná el repositorio
|
1050
|
+
localmente y ejecutá tu aplicación, asegurándote que el directorio
|
1051
|
+
<tt>sinatra/lib</tt> esté en el <tt>LOAD_PATH</tt>:
|
1168
1052
|
|
1169
1053
|
cd miapp
|
1170
1054
|
git clone git://github.com/sinatra/sinatra.git
|
1171
1055
|
ruby -Isinatra/lib miapp.rb
|
1172
1056
|
|
1173
|
-
|
1174
|
-
|
1175
|
-
cd miapp/sinatra
|
1176
|
-
git pull
|
1177
|
-
|
1178
|
-
=== Instalación Global
|
1057
|
+
Otra opción consiste en agregar el directorio <tt>sinatra/lib</tt> al
|
1058
|
+
<tt>LOAD_PATH</tt> dentro de tu aplicación:
|
1179
1059
|
|
1180
|
-
|
1060
|
+
$LOAD_PATH.unshift File.dirname(__FILE__) + '/sinatra/lib'
|
1061
|
+
require 'rubygems'
|
1062
|
+
require 'sinatra'
|
1181
1063
|
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
rake install
|
1064
|
+
get '/acerca-de' do
|
1065
|
+
"Estoy usando la versión " + Sinatra::VERSION
|
1066
|
+
end
|
1186
1067
|
|
1187
|
-
|
1068
|
+
Para actualizar el código fuente de Sinatra en el futuro:
|
1188
1069
|
|
1189
|
-
|
1070
|
+
cd miproyecto/sinatra
|
1071
|
+
git pull
|
1190
1072
|
|
1191
|
-
==
|
1073
|
+
== Más
|
1192
1074
|
|
1193
1075
|
* {Sito web del proyecto}[http://www.sinatrarb.com/] - Documentación
|
1194
1076
|
adicional, noticias, y enlaces a otros recursos.
|